Векторная оптимизация с программированием в среде MathCAD при комплексировании машин и агрегатов
Автор: Богатырев Владимир Анатольевич, Булыгин Кирилл Александрович, Пинкевич Василий Юрьевич
Журнал: Технико-технологические проблемы сервиса @ttps
Рубрика: Методические основы совершенствования проектирования и производства технических систем
Статья в выпуске: 4 (18), 2011 года.
Бесплатный доступ
Рассматриваются возможности использования средств программирования в системе математических расчетов Mathcad для создания набора функций, направленного на поддержку решения задач целочисленной векторной оптимизации. В качестве объекта оптимизации рассматривается комплекс машин и агрегатов, предусматривающих многоэтапный процесс выполнения работ.
Целочисленной векторной оптимизации, программирование, аддитивный критерий, надежность, среднее время пребывания
Короткий адрес: https://sciup.org/148185956
IDR: 148185956
Текст научной статьи Векторная оптимизация с программированием в среде MathCAD при комплексировании машин и агрегатов
Проектирование машин, агрегатов и их комплексирование в системы требует решения задачи оптимизации структуры с целью максимизации надежности и производительности системы при минимизации затрат на ее построение и эксплуатацию.
Задача оптимизации является векторной, её сложность обусловлена тем, что одно решение (альтернатива) может превосходить другую по одним показателям и уступать по другим [1].
В статье рассматривается задача векторной оптимизации при построении резервированных комплексов машин и агрегатов, реализующих многоэтапный процесс выполнения работ [2,3].
Эффективность поиска наилучших решений по реализации структуры исследуемых многоуровневых систем во многом зависит от выбора инструментальных средств оптимизации и эффективности их использования.
Решение оптимизационной задачи с использованием встроенных функций Minimize ( f , x 1, x 2,…)/ Maximize ( f , x 1, x 2,…) системы Mathcad сопряжено с трудностями получения целочисленного решения и определения параметров оптимизации над знаком суммы целевой функции [2-11].
В предлагаемой статье рассматриваются возможности использования средств программирования в системе математических расчетов Mathcad для со- здания набора функций, направленного на поддержку решения задач целочисленной векторной оптимизации.
Постановка задачи оптимизации
В качестве объекта оптимизации рассмотрим комплекс машин и агрегатов, предусматривающих многоэтапный процесс выполнения работ. Для повышения надежности и производительности системы предусматривается резервирование машин, реализующих различные этапы процесса обработки.
Требуется найти число (кратность резервирования) машин, реализующих каждый этап обработки ( mx , m 2,..., mM ) , при котором обеспечивается максимум надежности системы, минимум среднего времени пребывания в ней запросов, а стоимость реализации системы не должна превышать выделенных на это средств:
P(m1,m2,...,mM) max
T ( m 1 ,m 2 ,...,mM ) —> min , при
M
C ( mx,m2,...,т м ) = ^<С 0 .
i1
Возможна также другая постановка задачи. Требуется найти число машин, реализующих каждый этап обработки, при котором стоимость реализации системы минимальна и обеспечиваются требуемые технические показатели системы:
C ( m1,m 2 ,..., m M ) —> min , при
P ( m 1 ,m 2 ,..., m M )> P и
T ( mx,m 2 ,..., mM ) < T .
При этом Т 0 , P 0 , C о - предельно допустимые значения среднего времени реализации процесса обработка, надежности и стоимости системы.
При оптимизации будем считать заданными:
-
• интенсивность входного потока запросов X;
m 1 m 2 m 3
-
1, m2, m3,..., mM ) ...
машин и агрегатов показатели надежности машин (вероятности безотказной работы) Pi,р2,рз,...,Pm ;
-
• средние времена выполнения запросов машинами на этапах обработки
-
v i , v 2 , v 3 ,..., v m ;
-
• стоимости машин, выполняющих соответствующие этапы процесса обработки c , c 2, c 3,..., cM .
Решение рассматриваемых задач векторной оптимизации, как правило, включает поиск области Парето и выработку решающего правила, основанного на компромиссе между значениями компонент векторного показателя.
Оценка частных показателей качества
Возможности системы по обработке запросов определим по среднему времени пребывания запросов в системе и по ее надежности [4, 10] . В простейшем случае каждый узел представим системой массового обслуживания типа M/M/1. Считая, что каждый запрос последовательно обслуживается одним из исправных узлов на каждом уровне системы, среднее время пребывания запросов в системе оценим как:
Mv
Надежность системы оценим по вероятности сохранения работоспособности, которая зависит от формулировки условия отказа (сохранения функционирования Y).
Если система работоспособна, когда исправно не менее чем d i узлов на i -м уровне системы, то надежность системы оценим как [5, 6]:
mM kM
M
Ck1Ck2Ck3 ...C m1 m2 m3 ... m
Особенность представленной функции заключается в том, что искомые параметры оптимизации находятся над знаком суммы, что затрудняет использование встроенных функций оптимизации Minimize / Maximize системы Mathcad [5,11]. Программирования функций поиска целочисленного оптимума отдельных критериев ранее рассматривалось в работах [6, 11], в представленной же статье предлагается взаимосвязанный набор функций поддержки решения задач целочисленной векторной оптимизации .
Функции оценки частных показателей качества в системе Mathcad
Определим функцию для расчёта времени пребывания заявки в системе [12], интерпретируя каждый узел исследуемой структуры системой массового обслуживания типа M/M/1 , как:
Эта функция принимает два аргумента: интенсивность входного потока заявок и вектор числа элементов на каждом уровне. Кроме этого, она учитывает значения вектора а, определяющего коэффициенты передач (сколько раз заявка попадает в узел каждого типа). Функция для расчёта вероятности работоспособного состояния системы включает вычисление числа сочетаний из n по к (для этого используется треугольник Паскаля):
Combins := pascal _triangle(max(my) (Combins,„=Cf г <—1
for j EOJast(p)
p^) ■= C <— Combins^
r^f [c, -(^ )' -(1-^ )v']
r .
Функции для нахождения интен- сивности максимального входного потока, выдерживаемого системой, и её стоимости имеют вид:
T (2, k ):=
ki i return oo if p > 1
b rr i i X-p
.
_ х . NA Л ( N ):=min - ,
C ( N ):= N-c .
r
Функция, формирующая множество допустимых систем, из которых потом выбирается наилучшая со вспомогательными функциями :
Crits ( N ) := stack ( P ( N ), T (2, N ), A( N ), C ( N ), format ("{0},{1},{2}", N , N , N ))
is _ valid ( Crits ) := ( Crits^ > P 0) л ( Critsx< T 0) л ( Crits . < C 0)
i ^0
for n 0 e s 0 .. m 0
for n g s..m, for n2 e s2 ..m2
N <- stack ( n 0, nx , n 2) Crits _ N <— Crits ( N ) if is _ valid ( Crits ( n )
RN^ i <—i +1 RNT Здесь Crits(N) и is_valid(Crit) -вспомогательные функции, которые используются при вычислении значения матрицы RN. Crits(k) вычисляет значения всех критериев данной системы (которая задаётся вектором к - число элементов на каждом уровне), в том числе имя системы (которое будет критерием для лица, принимающего решение) в виде строки . is_valid(Crit) принимает вектор критериев и проверяет, удовлетворяют ли критерии заданным условиям (возвращает 1 или 0 - «да» или «нет»). Матрица RN создаётся при помощи вложенных циклов for (число циклов соответствуе числу уровней системы) и состоит из векторов k (то есть системы) с числом устройств на каждом уровне от необходимого (здесь « 1 ») до максималь- Векторная оптимизация с программированием в среде Mathcad при комплексировании машин и агрегатов ного, которое можно использовать, не превысив бюджет (ограничение C0). Далее при помощи вспомогательных функций для каждой системы вычисляются значения критериев и проверяется, удовлетворяют ли эти значения ограничениям. При удовлетворении весь вектор критериев помещается в матрицу RN - матрицу допустимых решений. В итоге формируется матрица, строками которой являются вектора критериев (Results) с именами решений (Names). Дальше определяются вспомогательные функции для отделения от этой матрицы столбца (вектора) имён и собственно матрицы критериев, которыми оперируют функции методов многокритериальной оптимизации. rn 2 n (RN) := RN W. ; rn2r(RN) := submatriXRN, 0, rows(RN)-... ...-1, 0, cols(RN) —2). если критерий, индекс которого передается как параметр, имеет смысл «чем меньше, тем лучше», иначе возвращается 0 («ложь»): P и Л мы максимизируем, а T и C - минимизируем. fill_vector возвращает вектор указанной длины, заполненный нужным значением. Функция normalize нормализует значения по столбцам, поскольку в них находятся значения одного и того же критерия для разных систем. C Ri Cmin ■<— min(C; Cmax <— max(C; fill_vector(0.5, length(C))... C Cmin otherwise Cmax Cmin C<— 1 - C if is _ less _ better^i) R^ <- C. Функции нахождения областиПарето Для нахождения области Парето определим следующие вспомогательные функции: is _ member( z, V ) := fill_ vector(value, length): V value V Функция is_member(z, V) служит для проверки, является ли значение z элементом множества V (заданного в виде вектора). is_less_better возвращает 1 («истина»), Далее определены функции, упрощающие нахождение области Парето: Функция is_pareto_worse(V, W, nV, nW) определяет, доминирует ли по Парето вектор W над вектором V, то есть, является ли вектор V однозначно худшим, чем W. Функция is_pareto_bad(V, Cols, nV, N) находит, доминирует ли по Парето над вектором V хоть один другой вектор, то есть лишний ли вектор V в матрице Cols. Функции для нахождения области Парето, принимающие нормализованные значения (все критерии имеют вид «чем больше, тем лучше») : . , return 1 if is pareto worse(V, Cols^, is pareto bad(V,Cols,nV,N):= _ . _ _ ... nV, N) Cols RT i _ good <- 0 pareto _ names( R, N) := V Cols i N<—"bad" if is _ pareto_bad(V, Cols, N, N) otherwise N _ goodi_ good <- Ni i _ good <— i _ good+1 N _ good. filter_ names(R,N,N_new) :=... ... = if is _ member(N, N _ new) Cols new_nw<— Col^'i ^^^^^^^ i newt—i new+1 ^^^^^^^ ^^^^^^^ Cols newT Функция pareto_names(R, N) по заданной матрице критериев (R) и вектору имен систем (N) отбирает в новый вектор имена систем, входящих в область Парето. Функция filter_names (R, N, N_new) по этому вектору составляет матрицу критериев (“R_new”) систем, входящих в область Парето. Функции для решения задач векторной оптимизации Для нахождения оптимального решения при векторной оптимизации могут использоваться: минимаксный критерий; аддитивный критерий; мультипликативный критерий; метод отклонения от идеала; метод главного критерия; метод последовательных уступок и др. Приведём определение функции для нахождения оптимального решения по аддитивному критерию. Cols RT max value ^^^^" name<—"" additiveR, N, W): value W Cols i if value max_value max value value ^^^^" name N name машин и агрегатов вается с максимальным на данный момент значением и, если новое значение больше максимального, то оно само становится максимальным, а его имя запоминается как возможный ответ. После перебора всех систем в переменной name оказывается имя системы с максимальным значением аддитивного критерия. Здесь trace - встроенная функция Mathcad, которая выводит в окно отладки строку с нужными переменными при включенной опции Tools > Debug > Toggle debugging. Функция требует нормализованных значений, то есть в качестве аргумента R ей должна передаваться матрица критериев в области Парето, обработанная функцией normalize. Кроме того, в функцию передаётся вектор имён систем, которым принадлежат эти критерии, и вектор весов критериев W. Для удобства матрица критериев R представляется так, чтобы каждый столбец содержал характеристики одной системы. Функция ска-лярно умножает каждый столбец (вектор критериев системы) на вектор весов, получая значение аддитивного критерия для данной системы. После этого полученное Пример оптимизации Начальные условия задачи можно задать в таком виде: b := stack(1, 4, 2) - время обслуживания; p := stack(0.99, 0.9, 0.92) - надёжность; c := stack(1, 5, 6) - стоимость. После генерации матрицы с характеристиками решений и применения к ней функций нормализации и области Парето, можно найти параметры оптимальных систем (число машин на каждом уровне системы) при использовании разных методов: значение аддитивного критерия сравни- r minimax(R _ pn, N _ pn) f "2,8,4") additiveR _ pn, N_ pn, Weights) "4,6,3" multiplicative(R _ pn, N_ pn, Weights) "4,6,3" RateNames := divergent^R, N, Weights') = "1,6,5" main _ crit(R, N) "1,4,2" seq _ concessionsR _ pn, N _ pn) "3,3,3" \ stem(R _ pn, N _ pn, stem _ mins) / I "3,4,2" J Определим значения критериев у выбранных систем, чтобы можно было сравнить их и принять окончательное решение. Для этого определим функцию, возвращающую матрицу критериев систем по вектору имён этих систем. names2crits(Names, R, N) :=... ... = j <— match(Namest, N)0 Crits i Cols j CritsT . Получим характеристики выбранных систем: P 1 8.889 0.999 9.028 0.999 9.028 names2crits(RateNames, R, N) : 0.99 9.289 0.984 10 0.998 9.905 0.993 9.643 T л C 2 66 минимаксный 1.5 52 аддитивный 1.5 52 мультиплик ативный 1 61 отклонения от идеала 1 33 главного критерия 0.75 36 последовательной уступки 1 35 J STEM Заключение Таким образом, предложен набор функций для решения оптимизационной целочисленной задачи проектирования систем резервированных машин и агрегатов в среде Mathcad. В отличие от использования для оптимизации встроенных в Mathcad функций Minimize/Maximize, предлагаемый подход позволяет найти целочисленное решение, в том числе, если искомые переменные (параметры оптимизации) находятся над знаком суммы.
return 0 if nW ="bad"
is worse <— 0
for i g 0..last(V)
is_pareto_worse(V,W,nV,nW) :=
return 0 if V. > W
ii
is worse <— 1 if V, < W.
ii
trace('' is _ pareto _ worse:
{0} is worse than {1}",nV,nW) if is_worse
is worse.
^^■i^^*
for i g 0..cols(Cols) -1