從你給出的形式看,這是一個非常簡單的線性規劃題,只要把偏差量理解成x3-x10即可:
% 目標規劃
% x3 = d1-, x7 = d1+
% x4 = d2-, x8 = d2+
% x5 = d3-, x9 = d3+
% x6 = d4-, x10 = d4+
f = zeros(10, 1);
f([7 8]) = [2 3];
A = -eye(10);
b = zeros(10, 1);
A1 = [1 1; 1 0; 5 3; 1 1];
A2 = [eye(4) -eye(4)];
A3 = zeros(1, 10);
A3(5) = 1;
Aeq = [A1 A2; A3];
beq = [10; 4; 56; 12; 0];
x = linprog(f,A,b,Aeq,beq)
但是,目標規劃的偏差變數應該始終滿足 d+ * d- = 0,所以,還應該補充4個非線性約束,考慮用linprog的結果作為初值,然後呼叫fmincon進行規劃:
function zd581643424
x0 = linprog(f,A,b,Aeq,beq);
x = fmincon(@obj,x0,A,b,Aeq,beq,[],[],@nlc)
function f = obj(x)
f = 2 * x(7) + 3 * x(8);
function [c, ceq] = nlc(x)
c = [];
ceq = x(3:6) .* x(7:10);
得到的結果是(由於是數值計算,計算得到的結果並不是嚴格的整數,根據數量級作適當的舍入):
x1=4
x2=12
d1+ = 6
d4+ = 4
其餘為0。
另外,MATLAB中提供了用於多目標最佳化的函式fgoalattain,但是這個函式怎樣和樓主現在的問題形式聯絡起來,我一時之間沒想明白(好多年沒接觸目標規劃了),時間精力所限,就不深入研究了,僅提供這麼一個線索,供參考。
從你給出的形式看,這是一個非常簡單的線性規劃題,只要把偏差量理解成x3-x10即可:
% 目標規劃
% x3 = d1-, x7 = d1+
% x4 = d2-, x8 = d2+
% x5 = d3-, x9 = d3+
% x6 = d4-, x10 = d4+
f = zeros(10, 1);
f([7 8]) = [2 3];
A = -eye(10);
b = zeros(10, 1);
A1 = [1 1; 1 0; 5 3; 1 1];
A2 = [eye(4) -eye(4)];
A3 = zeros(1, 10);
A3(5) = 1;
Aeq = [A1 A2; A3];
beq = [10; 4; 56; 12; 0];
x = linprog(f,A,b,Aeq,beq)
但是,目標規劃的偏差變數應該始終滿足 d+ * d- = 0,所以,還應該補充4個非線性約束,考慮用linprog的結果作為初值,然後呼叫fmincon進行規劃:
% 目標規劃
% x3 = d1-, x7 = d1+
% x4 = d2-, x8 = d2+
% x5 = d3-, x9 = d3+
% x6 = d4-, x10 = d4+
function zd581643424
f = zeros(10, 1);
f([7 8]) = [2 3];
A = -eye(10);
b = zeros(10, 1);
A1 = [1 1; 1 0; 5 3; 1 1];
A2 = [eye(4) -eye(4)];
A3 = zeros(1, 10);
A3(5) = 1;
Aeq = [A1 A2; A3];
beq = [10; 4; 56; 12; 0];
x0 = linprog(f,A,b,Aeq,beq);
x = fmincon(@obj,x0,A,b,Aeq,beq,[],[],@nlc)
function f = obj(x)
f = 2 * x(7) + 3 * x(8);
function [c, ceq] = nlc(x)
c = [];
ceq = x(3:6) .* x(7:10);
得到的結果是(由於是數值計算,計算得到的結果並不是嚴格的整數,根據數量級作適當的舍入):
x1=4
x2=12
d1+ = 6
d4+ = 4
其餘為0。
另外,MATLAB中提供了用於多目標最佳化的函式fgoalattain,但是這個函式怎樣和樓主現在的問題形式聯絡起來,我一時之間沒想明白(好多年沒接觸目標規劃了),時間精力所限,就不深入研究了,僅提供這麼一個線索,供參考。