Matlab非线性规划
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一般非线性规划 标准型为:
min F(X)
s.t AX<=b b e q
X A e q =⋅ G(X)0≤ 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 2221212
121
2min x x x x f ++--= s.t.0
,546
32212121≥≤+≤+x x x x x x
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]; 1、写成标准形式:
s.t.
⎪⎭⎫ ⎝⎛≤⎪⎭⎫ ⎝⎛-+-+00546322121x x x x ⎪⎭⎫ ⎝⎛≤⎪⎭⎫ ⎝⎛2100x x 22212121212min x x x x f ++--=
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
0 100
5.1
..
)1
2
4
2
4(
)
(
min
2 1
2
1
2
1
2
1
2
2
1
2
2
2
1
1
≤
-
-
≤
-
-
+
=
+
+
+
+
+
=
x
x
x
x
x
x
x
x t s
x
x
x
x
x
e
x
f x
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年效益之和为最大.
设变量i x 表示第i 年所使用的资金数,则有 4,3,2,1,04
.5321.121.1331.1484
1.121.1440
1.1400
..max 43213212114
321=≥≤+++≤++≤+≤+++=i x x x x x x x x x x x t s x x x x z i
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')