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.…'