一、ε約束法
定義
ε約束法通過將部分目標函數轉化為約束條件,保留一個主要目標進行優化。
1、選擇一個主要目標?fk?(x)?進行優化。
2、其他目標?fi?(x)?轉化為約束?fi?(x)≤εi?,其中?εi??是決策者設定的容許閾值。
??原理??
??目標選擇??:決策者選擇一個最重要的目標作為優化目標。
約束轉換??:其余目標被限制在某個可接受范圍內。
??參數調整??:通過調整?εi?,可以探索不同的Pareto最優解。
求解代碼
clear
clcprob = optimproblem('ObjectiveSense', 'min');
x = optimvar('x', 2, 'LowerBound', 0);%定義約束
prob.Constraints.con1 = 0.5*x(1) + 0.25*x(2) <= 8;
prob.Constraints.con2 = 0.2*x(1) + 0.2*x(2) <= 4;
prob.Constraints.con3 = x(1) + 5*x(2) <= 72;
prob.Constraints.con4 = x(1) + x(2) >= 10;%ε約束:污染 ≤ 33
prob.Constraints.epsilon_con = x(1) + 2*x(2) <= 33;%主目標:利潤最大化(轉換為最小化 -利潤)
prob.Objective = -2*x(1) - 3*x(2);[sol, fval] = solve(prob);
fprintf('最優解: x1 = %.2f, x2 = %.2f\n', sol.x(1), sol.x(2));
fprintf('利潤: %.2f, 污染: %.2f\n', -fval, sol.x(1) + 2*sol.x(2));
二、?理想點法
定義
理想點法通過計算各單目標的最優解(理想點),然后尋找最接近理想點的解。
先分別優化每個單目標,得到理想值?fi??。
構造評價函數,最小化目標值與理想值的加權距離(如歐氏距離)。
?
?
求解代碼?
clear
clcprob = optimproblem('ObjectiveSense', 'min');
x = optimvar('x', 2, 'LowerBound', 0);%定義約束
prob.Constraints.con1 = 0.5*x(1) + 0.25*x(2) <= 8;
prob.Constraints.con2 = 0.2*x(1) + 0.2*x(2) <= 4;
prob.Constraints.con3 = x(1) + 5*x(2) <= 72;
prob.Constraints.con4 = x(1) + x(2) >= 10;%計算理想點(單目標優化)
prob1 = prob;
%利潤最大化
prob1.Objective = -2*x(1) - 3*x(2);
[sol1, fval1] = solve(prob1);
%利潤理想值
f1_ideal = -fval1; prob2 = prob;
%污染最小化
prob2.Objective = x(1) + 2*x(2);
[sol2, fval2] = solve(prob2);
%污染理想值
f2_ideal = fval2; %構造理想點法的二次規劃
prob_ideal = prob;
prob_ideal.Objective = (-2*x(1) - 3*x(2) - (-53))^2 + (x(1) + 2*x(2) - 10)^2;[sol_ideal, fval_ideal] = solve(prob_ideal);
fprintf('最優解: x1 = %.2f, x2 = %.2f\n', sol_ideal.x(1), sol_ideal.x(2));
fprintf('利潤: %.2f, 污染: %.2f\n', 2*sol_ideal.x(1) + 3*sol_ideal.x(2), sol_ideal.x(1) + 2*sol_ideal.x(2));