1 近似线性法
近似线性法:在一个小范围内展开
2 罚函数法
基本思想是通过构造罚函数把约束问题转化为一系列无约束最优化问题,进而用无约束最优化方法去求解。这类方法为序列无约束最小化方法。简称为SUMT。分为内点法和外点法两种。
罚函数法:将约束条件放入目标函数
(1)SUMT外点法
原问题化为
其中T(X,M)称为罚函数,M称为罚因子,带M的项称为罚项。罚函数只对不满足约束条件的点实行惩罚。
(2)SUMT内点法(障碍函数法)
构造障碍函数
3 MATLAB函数求解方法
(1)二次规划模型
标准型:
用MATB软件求解,其输入格式如下:
1,x=quadprog(H,CA,b);
2,x=quadprog(H,CA,b,Aeqbeq);
3,x=quadprog(H,C,A,b,Aeq,beq,VLBVUB);
4,x=quadprog(H,CA,b,Aeq,beqVLBVUBXO);
5,x=quadprog(H,C,A,b,AeqbeqVLBVUB,XOoptions);
6,[xfva刂=quaprog(...);
7,[xfval,exitflag]=quaprog(...);
8,[xfval,exitflag,output]=quaprog(,..);
举例:
写成标准型
程序设计:
H = [1 1 ;1 1]
C = [-1;-2]
A = [2 3;1 4]
b = [6:5]
vlb = [0,0]
[x,fval] = quadprog(H,C,A,b,[],[],vlb)
(2)一般规划模型
标准型
MATLAB求解方法
- 首先建立M文件fun.m。用来定义目标函数F(X)
- 若约束条件中有非线性约束:G(X)<=0或Ceq = 0,则建立M文件nonlcon.m定义函数G(X)与Ceq(X)
function[G,Ceq](X〕
G=...
Ceq=...
- 建立主程序
x = fmincon('fun',X0,A, b)
x =fmincon('fun' , XO,A, b, Aeq, beq)
x =fmincon('fun',X0,A,b,Aeq, beq, VLB, VUB)
x=fmincon ( 'fun' , XO , A, b, Aeg, beg,VLB, VLJB, 'nonlcon' )
x=fmincon ('fun' ,XO,A,b,Aeq, beq, YLB, YUB, ' nonlcon' , options )
[z, fval]= fmincon(... )
[z, fval, exitflag] = fmincon(... )
[z, fval, exitflag, output] = fmincon(...)
举例:
写成标准形式:
程序设计
x0 = [1;1];
A=[2 3 ;1 4 ];
b = [6;5];
Aeq = [];
beq = [];
vlb = [0;0];
[x,fval] = fmincon(@fun,x0,A,b,Aeq,beq,vlb)
function f = fun(x)
f = -x(1)-2*x(2)+ (1/2)*x(1)^2+(1/2)*x(2)^2+ x(1)*x(2)
end
4 LINGO软件求解方法
min =-x1-2*x2 + x1^2/2 + x2^2/2 + x1*x2
2*x1 + 3*x2 <6
x1 + 4*x2 <5
5 课后习题
编程求解下列非线性数学规划模型
x0 = rand(3,1);
VLB = zeros(3,1);
[x,fval] = fmincon(@fun1,x0,[],[],[],[],VLB,[],@fun2)
function f=fun1(x)
f=2*x(1)+3*x(1)^2+3*x(2)+x(2)^2+x(3);
end
function [C,Ceq]=fun2(x)
C(1)=x(1)+2*x(1)^2+x(2)+2*x(2)^2+x(3)-10; % 非线性约束,若不止1个,则用C(1),C(2),...
C(2)=x(1)+x(1)^2+x(2)+x(2)^2-x(3)-50;
C(3)=2*x(1)+x(1)^2+2*x(2)+x(3)-40;
C(4)= -x(1)-2*x(2)+1;
Ceq= x(1)^2+x(3)-2; % 等式约束, 若没有等式约束,可令Ceq=[];
end
输出结果是
x =
0.0006
0.4997
2.0000
fval =
3.7500
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容