求解線性規划問題:
化為標准形式:
輸入:
輸出:
如果有非線性函數,如何做呢?
例如:
每一個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%,與上面的模型所得結論基本一致。