Векторная оптимизация с программированием в среде 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 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. , 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, предлагаемый подход позволяет найти целочисленное решение, в том числе, если искомые переменные (параметры оптимизации) находятся над знаком суммы.