求解多目標規划的思路
1、加權系數法
為每一個目標加一個權系數,把多目標模型轉化成單一目標模型。但是困難時確定合理的權系數,以反映不同目標之間的重要程度。
2、優先等級法
將各目標按其重要程度分為不同的優先等級,轉化為單目標模型。
3、有效解法
尋求能夠照顧到各個目標,並使決策者感到滿意的解。由決策者來確定選取哪一個解,即得到滿意的解。但是有效解太多,無法挑選
一、目標規划的數學模型
1、正、負偏差變量
2、絕對約束和目標約束
(1)絕對約束:一定要達到的要求,線性規划的約束條件都是
(2)軟約束(目標約束):就是在這個目標值允許有一定的正負偏差存在。
3、優先因子(優先等級)與權系數
一個規划問題如果有多個目標,可以按照重要性來規定一個優先因子P,越重要的越優先。
4、目標規划的目標函數
每一個目標值確定后,要求是盡可能小的縮小偏差。因此目標函數只能是,有三種形式
(1)要求恰好達到目標值,即正負偏差都要小
(2)要求不超過目標值,正偏差小
(3)要求超過目標值,負偏差小
5、目標規划的一般數學模型
二、求解目標規划的序貫式模型
解題思路:
按照優先級的先后次序,將目標規划問題分解成一系列的單項目標規划問題。然后再依次求解。(由於使用LINGO求解,暫時忽略)
三、多目標規划的MATLAB解法
1、一般模型
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、例子
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));