Matlab非线性规划

更新时间:2023-10-28 16:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一般非线性规划

标准型为:

min F(X)

s.t AX<=b Aeq G(X)?0 ?X?beq Ceq(X)=0 VLB?X?VUB

其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab求解上述问题,基本步骤分三步: 1. 首先建立M文件fun.m,定义目标函数F(X): function f=fun(X); f=F(X);

2. 若约束条件中有非线性约束:G(X)?0或Ceq(X)=0,则建立M文件

nonlcon.m定义函数G(X)与Ceq(X): function [G,Ceq]=nonlcon(X) G=... Ceq=... 3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:

(1) x=fmincon(‘fun’,X0,A,b) (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq)

(3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)

(4) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’) (5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options) (6) [x,fval]= fmincon(...) (7) [x,fval,exitflag]= fmincon(...) (8)[x,fval,exitflag,output]= fmincon(...) 注意:

[1] fmincon函数提供了大型优化算法和中型优化算法。默认时,若在

fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。

[2] fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。 [3] fmincon函数可能会给出局部最优解,这与初值X0的选取有关。

2例2 minf??x1?2x2?x12?x2

12122x1?3x2?6s.t.x1?4x2?5

x1,x2?01、写成标准形式:

1212minf??x1?2x2?x1?x222?2x1?3x2?6??0??????

?x1?4x2?5??0?

0??x1?? s.t. ?????x0???2?

2、先建立M-文件 fun3.m: function f=fun3(x);

f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2 3、再建立主程序youh2.m: x0=[1;1];

A=[2 3 ;1 4]; b=[6;5]; Aeq=[];beq=[]; VLB=[0;0]; VUB=[];

[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB) 4、运算结果为:

x = 0.7647 1.0588 fval = -2.0294 例3

2minf(x)?ex1(4x12?2x2?4x1x2?2x2?1)s.t.x1?x2?01.5?x1x2?x1?x2?0?x1x2?10?0

1.先建立M文件 fun4.m,定义目标函数: function f=fun4(x); f=exp(x(1))

*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); 2.再建立M文件mycon.m定义非线性约束: function [g,ceq]=mycon(x)

g=[x(1)+x(2);1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; 3.主程序youh3.m为: x0=[-1;1]; A=[];b=[];

Aeq=[1 1];beq=[0]; vlb=[];vub=[];

[x,fval]=fmincon('fun4',x0,A,b,Aeq,beq,vlb,vub,'mycon') 3. 运算结果为:

x = -1.2250 1.2250 fval = 1.8951

例4.资金使用问题

设有400万元资金, 要求4年内使用完, 若在一年内使用资金x万元, 则可得效益

x万元(效益不能再使用),当年不用的资金可存入银行, 年利率为10%. 试制定出资金的

使用计划, 以使4年效益之和为最大.

设变量xi表示第i年所使用的资金数,则有

maxz?x1?x2?x3?x4s.t.x1?400

1.1x1?x2?4401.21x1?1.1x2?x3?4841.331x1?1.21x2?1.1x3?x4?532.4xi?0,i?1,2,3,4

1.先建立M文件 fun44.m,定义目标函数:

function f=fun44(x)

f=-(sqrt(x(1))+sqrt(x(2))+sqrt(x(3))+sqrt(x(4)));

2.再建立M文件mycon1.m定义非线性约束: function [g,ceq]=mycon1(x) g(1)=x(1)-400;

g(2)=1.1*x(1)+x(2)-440;

g(3)=1.21*x(1)+1.1*x(2)+x(3)-484;

g(4)=1.331*x(1)+1.21*x(2)+1.1*x(3)+x(4)-532.4; ceq=0

3.主程序youh4.m为:

x0=[1;1;1;1];vlb=[0;0;0;0];vub=[];A=[];b=[];Aeq=[];beq=[];

[x,fval]=fmincon('fun44',x0,A,b,Aeq,beq,vlb,vub,'mycon1')

得到

x1?86.2,x2?104.2,x3?126.2,x4?152.8z?43.1

本文来源:https://www.bwwdw.com/article/l6e2.html

Top