1.線性規划問題
如果目標函數和約束條件都是線性函數,則該模型稱為線性規划。
[x,f_opt,flag,c]=linprog(f,A,B,Aeq,Beq,xm,xM,x0,opt)
參數說明:
X: 解
f_opt: 最優值
Flag:大於零表示求解成功,否則求解出問題
C:求解信息
X0:搜索點的初值
Opt:最優化控制項
例子:
MATLAB求解:
f=[-6,-4]'; A=[2 3;4 2]; B=[100;120]; Ae=[]; Be=[]; xm=[0,0]; ff=optimset; ff.LargeScale='off'; % 不用大規模問題求解 ff.TolX=1e-15; ff.TolFun=1e-20; ff.TolCon=1e-20; ff.Display='iter'; [x,f_opt,key,c]=linprog(f,A,B,Ae,Be,xm,[],[],ff)
運行結果:
x =
20.0000
20.0000
f_opt =
-200
key =
1
c =
iterations: 2
constrviolation: 0
algorithm: 'active-set'
cgiterations: []
message: 'Optimization terminated.'
firstorderopt: 7.1054e-15
2. 二次規划問題
[x,f_opt,flag,c]=quadprog(H,f,A,B,Aeq,Beq,xm,xM,x0,opt)
例子:
MATLAB求解:
f=[-2,-4,-6,-8]; H=diag([2,2,2,2]); OPT=optimset; OPT.LargeScale='off'; A=[1,1,1,1; 3,3,2,1]; B=[5;10]; Aeq=[]; Beq=[]; LB=zeros(4,1); [x,f_opt]=quadprog(H,f,A,B,Aeq,Beq,LB,[],[0 0 0 0],OPT)
運行結果:
x =
0.0000
0.6667
1.6667
2.6667
f_opt =
-23.6667
3.非線性規划問題
目標函數或約束條件中至少有一個是非線性函數的最優化問題叫做非線性規划問題。
[x,f_opt,flag,c]=fmincon(F, x0, A,B,Aeq,Beq,xm,xM,CF,opt)
F;目標函數,inline函數或m函數
Cf;非線性約束條件對應的m函數
MATLAB求解:
1.目標函數:
function y=opt_fun1(x)
y=100-x(1)*x(1)-2*x(2)*x(2)-x(3)*x(3)-x(1)*x(2)-x(1)*x(3);
2.非線性約束條件的函數:
function [c,ceq]=opt_con1(x)
ceq=[x(1)*x(1)+x(2)*x(2)+x(3)*x(3)-25;8*x(1)+14*x(2)+7*x(3)-56];
c =[0 0 0 ];
3.求解:
ff=optimset; ff.LargeScale='off'; ff.Display='iter'; ff.TolFun=1e-30; ff.TolX=1e-15; ff.TolCon=1e-20; x0=[1;1;1]; xm=[0;0;0]; xM=[];A=[];B=[];Aeq=[]; Beq=[]; [x,f_opt,c,d]=fmincon('opt_fun1',x0,A,B,Aeq,Beq,xm,xM,'opt_con1',ff);
運行結果:
x =
3.5121
0.2170
3.5522
f_opt =
61.7152
c =
2
d =
iterations: 105
funcCount: 569
constrviolation: 0
stepsize: 8.0563e-20
algorithm: 'interior-point'
firstorderopt: 1.2326e-07
cgiterations: 26
message: 'Local minimum possible. Constraints satisfied.…'