建模算法(十一)——目標規划


求解多目標規划的思路

1、加權系數法

       為每一個目標加一個權系數,把多目標模型轉化成單一目標模型。但是困難時確定合理的權系數,以反映不同目標之間的重要程度。

2、優先等級法

       將各目標按其重要程度分為不同的優先等級,轉化為單目標模型。

3、有效解法

       尋求能夠照顧到各個目標,並使決策者感到滿意的解。由決策者來確定選取哪一個解,即得到滿意的解。但是有效解太多,無法挑選

一、目標規划的數學模型

1、正、負偏差變量

image

2、絕對約束和目標約束

(1)絕對約束:一定要達到的要求,線性規划的約束條件都是

(2)軟約束(目標約束):就是在這個目標值允許有一定的正負偏差存在。

3、優先因子(優先等級)與權系數

     一個規划問題如果有多個目標,可以按照重要性來規定一個優先因子P,越重要的越優先。

4、目標規划的目標函數

     每一個目標值確定后,要求是盡可能小的縮小偏差。因此目標函數只能是image,有三種形式

(1)要求恰好達到目標值,即正負偏差都要小

               image

(2)要求不超過目標值,正偏差小

              image

(3)要求超過目標值,負偏差小

                image

5、目標規划的一般數學模型

image

二、求解目標規划的序貫式模型

解題思路:

       按照優先級的先后次序,將目標規划問題分解成一系列的單項目標規划問題。然后再依次求解。(由於使用LINGO求解,暫時忽略)

三、多目標規划的MATLAB解法

1、一般模型

image

2、MATLAB封裝的函數

[x,fval]=fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)

(1)fun是用M文件定義的目標向量函數

(2)x0是初值,一般弄個隨機列向量

(3)weight為權重,一般為goal的絕對值

(4)A,b定義不等式約束A*x<=b,Aeq,beq定義等式約束

(5)nonlcon是用M文件定義的非線性約束條件c(x)<=0,ceq(x)=0

(6)返回值,x是最優解,fval是最優值

3、例子

image

function F=Fun(x)
F(1)=-100*x(1)-90*x(2)-80*x(3)-70*x(4);
F(2)=3*x(2)+2*x(4);
a=[-1  -1  0  0
    0  0  -1  -1 
    3  0  2  0
    0  3  0  2];
b=[-30  -30  120  48]';
c1=[-100  -90  -80  -70];
c2=[0  3  0 2 ];

[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))

g3=[g1;g2];
[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4,1));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM