Загрузил DDRD Makar

Многокритериальная Оптимизация с МАТЛАБ

реклама
Многокритериальная оптимизация с использованием МАТЛАБ
Из отчета Георгия Жемелева
Математическая модель операции:
𝑧1 = −2𝑁𝐴 − 4𝑁𝐵 → min;
𝑧2 = −
2𝑁𝐴 + 4𝑁𝐵
→ min;
12𝑁𝐴 + 30𝑁𝐵
3
4
1700
𝑁𝐴
[−12 −30] ⋅ [ ] ≤ [−6000] ;
𝑁𝐵
12
30
9600
𝑁𝐴 ≥ 0, 𝑁𝐵 ≥ 0, 𝑦1 ≥ 0.8𝑦1max .
Последнее ограничение на y1 можно будет использовать только
после решения однокритериальной задачи оптимизации для целевой
функции z1.
1.1. Поиск оптимумов частных критериев
Найдем оптимумы каждой из целевых функций независимо от других.
Для этого необходимо решить две задачи однокритериальной оптимизации:
для z1 и z2 соответственно при тех же ограничениях на NA и NB, что имеют
место для задачи многокритериальной оптимизации, поставленной выше.
Для задания всех необходимых переменных в пакете MATLAB был
исполнен следующий скрипт:
%% Многокритериальная оптимизация
% Жемелев Г. А., 13541/3
clc; clearvars
% Параметры
pA
= 2;
% Прибыль, которую приносит одно изделие A (у.е.)
pB
= 4;
% Прибыль, которую приносит одно изделие B (у.е.)
tA
= 12;
% Время на изготовление изделия A (мин)
tB
= 30;
% Время на изготовление изделия B (мин)
dA
= 3;
% Кол-во досок для изделия A (м2)
dB
= 4;
% Кол-во досок для изделия B (м2)
D
= 1700;
% Максимум досок в нед. (м2)
Tmin
= 100*60; % Минимально допустимое машинное время в нед.
Tmax
= 160*60; % Максимально допустимое машинное время в нед.
ycoeff = 0.8;
% Доля, которую суммарная прибыль составляет от масимальной
% Целевые
y1 = @(N)
y2 = @(N)
z1 = @(N)
функции
pA*N(1) + pB*N(2); % → max
y1(N)/(tA*N(1) + tB*N(2)); % → max
-y1(N); % → min
z2 = @(N) -y2(N); % → min
% Функциональные ограничения (в данном случае только линейные)
A = [dA, dB; -tA, -tB; tA, tB];
b = [D; -Tmin; Tmax];
Aeq = [];
beq = [];
% Параметрические ограничения
lb = [0; 0];
ub = [Inf; Inf];
Скрипт для поиска оптимумов частных критериев z1 и z2 выглядит
следующим образом:
%% Поиск оптимумов частных критериев
startingPoint = lb;
[N, z1_opt] = fmincon(z1, startingPoint, A, b, Aeq, beq, lb, ub)
[N, z2_opt] = fmincon(z2, startingPoint, A, b, Aeq, beq, lb, ub)
Аддитивная свертка критериев
Для использования метода аддитивной свертки необходимо выполнить
нормировку критериев, с тем чтобы сделать их значения соизмеримыми, а
единицы измерения – безразмерными. Выполним нормировку следующим
образом:
𝑧1 =
𝑧2 =
𝑧1
|𝑧1min |
𝑧2
|𝑧2min |
=
−2𝑁𝐴 − 4𝑁𝐵
𝑁𝐴 + 2𝑁𝐵
=−
,
1400
700
=−
(2𝑁𝐴 + 4𝑁𝐵 ) ⋅ 6
2𝑁𝐴 + 4𝑁𝐵
=−
.
12𝑁𝐴 + 30𝑁𝐵
2𝑁𝐴 + 5𝑁𝐵
Формула аддитивной свертки имеет вид [1, 2]:
𝑟
𝐹(𝑥) = ∑ 𝜆𝑖 𝑓𝑖 (𝑥) ,
0 < 𝜆𝑖 < 1,
𝑖=1
∑ 𝜆𝑖 = 1,
𝑖
где fi(x) – критерии оптимальности, r – их общее число, а λi – параметры
важности. Примем λ1 = λ2 = 0.5, считая нормированные критерии одинаково
важными.
Тогда
получим
следующую
задачу
оптимизации:
𝑓 = 0.5𝑧1н + 0.5𝑧2н → min;
однокритериальной
1700
3
4
𝑁
−6000
−12 −30
[
] ⋅ [ 𝐴] ≤ [
];
𝑁𝐵
12
30
9600
−2
−4
−1120
𝑁𝐴 ≥ 0, 𝑁𝐵 ≥ 0.
Для её решения можно использовать следующий скрипт MATLAB:
% Аддитивная свертка
z1_norm = @(N) z1(N)/abs(z1_opt);
z2_norm = @(N) z2(N)/abs(z2_opt);
f = @(N) 0.5*z1_norm(N) + 0.5*z2_norm(N);
A = [dA, dB; -tA, -tB; tA, tB; -pA, -pB];
b = [D; -Tmin; Tmax; z1_bound];
[N, f_opt] = fmincon(f, startingPoint, A, b, Aeq, beq, lb, ub)
Мультипликативная свертка критериев
В итоге получим следующую задачу однокритериальной оптимизации:
𝑓=
1
→ min;
𝑧1 ⋅ 𝑧2
1700
3
4
𝑁
−6000
−12 −30
[
] ⋅ [ 𝐴] ≤ [
];
𝑁𝐵
12
30
9600
−2
−4
−1120
𝑁𝐴 ≥ 0, 𝑁𝐵 ≥ 0.
Для её решения можно использовать следующий скрипт MATLAB:
% Мультипликативная свертка
f = @(N) 1/(z1(N)*z2(N));
A = [dA, dB; -tA, -tB; tA, tB; -pA, -pB];
b = [D; -Tmin; Tmax; z1_bound];
[N, f_opt] = fmincon(f, startingPoint, A, b, Aeq, beq, lb, ub)
Минимакс
max {−
𝑖
𝑧1
;−
min
0.8𝑧1
𝑧2
𝑧2min
} → min;
3
4
1700
𝑁𝐴
[−12 −30] ⋅ [ ] ≤ [−6000] ;
𝑁𝐵
12
30
9600
𝑁𝐴 ≥ 0, 𝑁𝐵 ≥ 0.
Для решения этой задачи можно использовать функцию fminimax
пакета MATLAB.
Выполним следующий скрипт:
%% В. Минимакс
f = @(N) [z1(N)/(-z1_bound), z2(N)/(-z2_min)];
A = [dA, dB; -tA, -tB; tA, tB];
b = [D; -Tmin; Tmax];
[N, f_opt] = fminimax(f, startingPoint, A, b, Aeq, beq, lb, ub)
Метод достижения цели (fgoalattain)
Задача достижения цели, решаемая функцией fgoalattain может быть
сформулирована следующим образом:
𝐹(𝑥) − 𝑤𝛾 ≤ goal,
min 𝛾 , где {
𝑥,𝛾
𝐺(𝑥) ≤ 𝑏,
где γ – скалярный критерий, называемый attain factor; F(x) = (f1(x), f2(x), … ,
fr(x)) – вектор критериев оптимизации; goal = (f1*, f2*, … , fr*) – вектор целей,
которые могут быть как достижимыми, так и недостижимыми; w – вектор
весовых коэффициентов, которые рекомендуется принимать равными |goal|
«для того чтобы обеспечить ту же самую долю не- или передостижения
активных целей» [4]; и G(x) ≤ b – система ограничений.
Так как цели в векторе goal могут быть недостижимы без ущерба для
решения задачи, пусть goal = (z1min, z2min), w = (|z1min|, |z2min|). Тогда скрипт для
решения задачи будет выглядеть следующим образом:
%% Д. Метод достижения цели
f = @(N) [z1(N), z2(N)];
goal = [z1_opt, z2_opt];
w = abs(goal);
A = [dA, dB; -tA, -tB; tA, tB];
b = [D; -Tmin; Tmax];
startingPoint = [10, 10];
[N, f_opt, af] = fgoalattain(f, startingPoint, goal, w, A, b, Aeq, beq, lb,
ub)
В данном случае начальная точка для алгоритма оптимизации была
изменена с (0, 0) на (10, 10), потому что, начиная из точки (0, 0), функция
fgoalattain
не
находила
оптимального
решения.
программы:
Local minimum possible. Constraints satisfied.
Результаты
работы
fgoalattain stopped because the predicted change in the objective function
is less than the default value of the function tolerance and constraints
are satisfied to within the default value of the constraint tolerance.
<stopping criteria details>
N =
414.2936
114.2798
f_opt =
1.0e+03 *
-1.2857
-0.0002
af =
0.0816
>> y1(N)
ans =
1.2857e+03
>> y2(N)
ans =
0.1531
Значение переменной af, которая соответствует показателю γ, говорит о
том, что полученное решение на 8.2% хуже цели. Итоговое решение имеет
вид:
𝑁𝐴 = 414 изделий,
𝑁𝐵 = 114 изделий,
𝑦1 = 1284 у. е. (91.7% от оптимума),
𝑦2 = 0.1531 у. е.⁄мин. (91.8% от оптимума).
Скачать