matlab解決線性規划問題


求解線性規划問題:

化為標准形式:

輸入:

輸出:

如果有非線性函數,如何做呢?

例如:

 每一個xi 變成了兩個量 u, v 所以我們需要2n長度的向量來表示新的自變量x*,前n項為u,后n項為v;

 如題:

 代碼為:

c = 1:4;
c = [c,c]';
Aeq = [1 -1 -1 1;1 -1 1 -3;1 -1 -2 3];
beq = [0 1 -1/2]';
aeq = [Aeq,-Aeq];
[x,fval,exitflag] = linprog(c,[],[],aeq,beq,zeros(8,1))
x = x(1:4)-x(5:8)

輸出為:

實際問題:

 

指派問題:

  

      

更復雜的問題:用✔️標記未選中的0的行,然后對該0所在列選中的0行標記✔️, 然后對該行其他0所在列標記✔️,然后對✔️標記的行重復之前操作,直到✔️號標記的補行和✔️號標記的列覆蓋所有的0元素為止。未覆蓋的元素最小值m,對應標記行減去m,對應標記列加上m可以得到新的等價變換矩陣,得到最優指派問題的解。

 

 多目標規划模型:

       

模型一:固定風險上限,最大化收益;

x0表示存銀行,但收益率很低只有5%,

因為不同人可接受的風險度的上限不同,所以對a從0到0.05進行遍歷,步長為0.001。 對於每一個a,得到當前a情況下最優的收益Q,做出Q-a圖像。

代碼如下:

clc,clear

a=0;

hold on

while a<0.05

c=[-0.05,-0.27,-0.19,-0.185,-0.185];

A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])]; 

b=a*ones(4,1);

Aeq=[1,1.01,1.02,1.045,1.065];

beq=1;

lb=zeros(5,1); 

[x,Q]=linprog(c,A,b,Aeq,beq,lb);

D = std(x);

Q=-Q;

plot(a,Q,'*b');

plot(a,D,'^r');

a=a+0.001;

end

xlabel('a'),ylabel('Q')

由圖像可以看出當a取0.025附近時候,最優Q已經達到了最大值,之后不再改變,a只會影響Q的下限,而不會影響Q的上限。

紅色點表示解的方差值,可見投資較為分散時,投資者承擔的風險越小,與題意一致(a<0.5%時)。

可見在0.006處左邊Q增長很快,右邊增長很慢,所以a = 0.006時候的Q值為相對最優解,

模型二:

 

代碼如下:

clc,clear
k=0;
hold on
while k<0.25
c=[zeros(1,5),1]';
a1=[-0.05,-0.27,-0.19,-0.185,-0.185,0];
a2=[diag([0,0.025,0.015,0.055,0.026]),-1*ones(5,1)];
A=[a1;a2];
b=[-k,zeros(1,5)]';
Aeq=[1,1.01,1.02,1.045,1.065,0];
beq=1;
lb=zeros(6,1); 
[x,minrisk]=linprog(c,A,b,Aeq,beq,lb);
Q = -a1*x;
plot(k,minrisk*10,'*b'); 
plot(k,Q,'^r');
k=k+0.005;
end
xlabel('k'),ylabel('Q & 10*minrisk')

輸出:

可見隨着自己設置的最低收益率k的增加,Q值先不變(保持0.005,為全儲存銀行所得收益率),然后增加;

minrisk最小風險也隨着k增加而增加,在k小於0.2時候,風險增加緩慢,大於0.2時候,風險增加速度突然加快,所以

k = 0.20時候的Q值為最優解,保證了風險較小並且收益率較大。

此時Q = 20% ,解同模型一;

模型三:

clc,clear
s=0;
hold on
while s<1
c=(1-s)*[-0.05,-0.27,-0.19,-0.185,-0.185,0]'+s*[zeros(1,5),1]';
a1=[-0.05,-0.27,-0.19,-0.185,-0.185,0];
A=[diag([0,0.025,0.015,0.055,0.026]),-1*ones(5,1)];
b=zeros(5,1);
Aeq=[1,1.01,1.02,1.045,1.065,0];
beq=1;
lb=zeros(6,1); 
[x,fval]=linprog(c,A,b,Aeq,beq,lb);
Q = -a1*x;
plot(s,fval,'*b'); 
plot(s, Q,'^r');
s=s+0.02;
end
xlabel('s'),ylabel('Q & fval')

輸出:

 

可見隨着風險的加權系數越來越高,使得最大收益率呈梯度下降,當s = 0.764時候Q開始呈斷崖式下降,之后收益率一直比較小,

該點s = 0.764, 可見我們此刻更看重的是風險,但同時也側重收益率,所以此時的Q最優。

Q 接近20%,與上面的模型所得結論基本一致。

 


免責聲明!

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



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