線性規划問題是在一組線性約束條件下,求線性目標函數最大/最小值的問題。這些約束條件有不等式約束、等式約束以及邊界約束,這和中學講的線性規划無異。
此類問題的MATLAB標准形式為:
其中,max問題可以轉換為min求解,三個約束條件分別為不等、等式、邊界約束。
MATLAB求解函數:
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
param:
c是目標系數;
A、b對應不等條件;
Aeq、beq對用等式條件;
LB、UB為邊界;
x0是求解的初始值;
OPTIONS是控制參數,一般不用。
return:
x向量是使得目標函數最小的x取值;
fval是相應的目標函數最優值,若是由max問題轉化為min,還要取反。
例題以及matlab求解:
一、求解線性規划問題
求解的matlab程序如下:
1 f = [-2;-3;5]; 2 A = [-2,5,-1;1,3,1]; 3 b = [-10;12]; 4 Aeq = [1,1,1]; 5 beq = 7; 6 lb = [0;0;0]; 7 ub = [inf;inf;inf]; 8 [x,y]=linprog(f,A,b,Aeq,beq,zeros(3,1)); 9 x 10 y = -y
二、其他可以轉換為線性規划問題,如目標為絕對值函數,指派問題(匈牙利算法),對偶理論與敏感度分析,在此略過,使用時查閱。
三、應用建模:投資的收益與風險
模型一的求解:
1 clc,clear 2 a = 0; 3 hold on 4 while a<0.05 5 c = [-0.05,-0.27,-0.19,-0.185,-0.185] 6 A = [zeros(4,1),diag([0.025,0.015,0.055,0.026])]; 7 b = a*ones(4,1); 8 Aeq = [1,1.01,1.02,1.045,1.065]; 9 beq = 1; 10 LB = zeros(5,1); 11 [X,Q] = linprog(c,A,b,Aeq,beq,LB); 12 Q = -Q; 13 Q 14 plot(a,Q,'*k'); 15 a = a + 0.001; 16 end 17 xlabel('風險水平a'); 18 ylabel('最大收益Q');
結果分析: