3. 用MATLAB優化工具箱解線性規劃和非線性規劃
線性規劃
題目:
linprog找目標函式在約束條件下的最小值。
放題
第0問
假設生產甲飲料x百箱,乙飲料y百箱,利潤為z
上程式碼
c=[-10 -9];%因為linprog找的是最小值,所以這個地方取相反數。 % <=條件約束 A=[6 5; 10 20]; b=[60; 150]; % =條件約束 Aeq=[]; beq=[]; %變數範圍約束 vlb=[0,0]; vub=[]; [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub);
執行結果
當X =642 Y = 428 時候大概取最優值(是不是X應該多一個或者Y少一個,我懶得算了,正式比賽再說)
此時利潤 Z = 102.72
非線性規劃也很簡單
1.首先建立M檔案fun.m,定義目標函式F(x):
function f= =fun (X) ;
f= =F(X) ;
2. 若約束條件中有非線性約束:G(X)或Ceq(X)=0,則建立M檔案nonlcon.m定義函式G(X)與Ceq(X):
function [G,Ceq]=nonlcon(X)
G=...
Ceq=...
3.建立主程式.非線性規劃求解的函式是fmincon,命令的基本格式如下:
(1)x=fmincon( 'fun' ,Xo,A,b)
(2) x=fmincon( 'fun' ,Xo,A,b, Aeq, beq)
(3) x=fmincon( 'fun' ,Xo,A,b, Aeq, beq, VLB, VUB)
(4) x=fmincon( 'fun' ,Xo,A,b, Aeq, beq, VLB, VUB, ' nonlcon' )
(5)x-fmincon( 'fun' ,Xo,A,b, Aeq, beq, VLB, VUB, 'nonlcon' ,options)
(6) [x, fval]= fmincon(...)
(7) [x, fval,exitflag]= fmincon(...)
function f=fun3(x); f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2
(8) [x, fval, exi tflag, output]= fmincon(.. .)
非線性案例
案例1
程式碼:
fun.m
function f=fun(x); f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2
main.m
x0=[1;1]; A=[2 3 ;1 4]; b=[6;5]; Aeq=[];beq=[]; VLB=[0;0]; VUB=[]; [x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB)
結果
x =
0.7647
1.0588
fval =
-2.0294
案例二
fun.m
function f=fun(x); f=-2*x(1)-x(2);
mycon.m
function [g,ceq]=mycon(x) g=[x(1)^2+x(2)^2-25;x(1)^2-x(2)^2-7]; ceq = [];
main.m
x0=[3;2.5]; A=[];b=[]; Aeq=[];beq=[]; vlb=[0 0];vub=[5 10]; [x,fval]=fmincon('fun',x0,A,b,Aeq,beq,vlb,vub,'mycon')
解得結果是
x =
4.0000
3.0000
fval =
-11.0000
標準型為: min F(X)
s.t AX<=b G(X)
Ceq(X)=0 VLBXVUB