回覆列表
  • 1 # 使用者7004596690954

    從你給出的形式看,這是一個非常簡單的線性規劃題,只要把偏差量理解成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,但是這個函式怎樣和樓主現在的問題形式聯絡起來,我一時之間沒想明白(好多年沒接觸目標規劃了),時間精力所限,就不深入研究了,僅提供這麼一個線索,供參考。

  • 中秋節和大豐收的關聯?
  • 蘋果6splus能顯示畫中畫功能嗎?