实验 6 无约束规划与非线性规划模型的求解 姓名 : 徐美君 学号 :201505060451 班级 : 数统 (3) 班 一 实验要求 (1) 了解 matlab 中常用优化命令 ( 无约束规划 : fminunc, fminsearch; 约束规 划 :fminbnd, fmincon, fminimax) 的用法 (2) 掌握 lingo 软件进行非线性规划问题的求解方法 实验方法 : 先重复实验内容中各例子的操作, 并思考联系中提出的问题和解释输出 结果, 最后将思考题及练习题的内容写到实验报告中 二 实验内容 练习 1:(1) 将 steepdesc 方法换成 bfgs 试试, 观察结果有和变化 (2) 绘制目标函数曲面及等高线图, 并观察曲面与等高线图的变化规律 Bfgs: options = optimset('display', 'iter-detailed',... 'HessUpdate','bfgs'); %fun 是目标函数, 匿名函数的形式 fun = @(x) x(2)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + (2)^2)/20; %x 为初始值 x0 = [1,2]; [x,fval] = fminunc(fun,x0,options);
Iteration Func-count f(x) Step-size optimality 0 3 0.263476 0.073 1 9 0.208741 10 0.0242 2 12 0.201153 1 0.0102 3 15 0.200428 1 0.0024 4 18 0.200302 1 0.00171 5 21 0.200119 1 0.000719 6 24 0.200059 1 0.000371 7 27 0.200027 1 0.000178 8 30 0.200013 1 8.79e-005 9 33 0.200006 1 4.31e-005 10 36 0.200003 1 2.12e-005 11 39 0.200001 1 1.04e-005 12 42 0.200001 1 5.14e-006 13 45 0.2 1 2.53e-006 14 48 0.2 1 1.25e-006 15 51 0.2 1 6.17e-007 Optimization completed: The first-order optimality measure, 5.752985e-007, is less than options.tolfun = 1.000000e-006. Optimization Metric Options relative norm(gradient) = 5.75e-007 TolFun = 1e-006 (default) 结果变化 : Func-count f(x) Step-size optimality 等值发生变化 Func-count 的次数减少, 只有 steepdesc 的一部分值,f(x) 部分值相同, 但也减少 迭代次数减少 (2) ezmesh('x2*exp(-(x1^2 + x2^2)) + (x1^2 + x2^2)/20') 图形为 : x 2 exp(-(x 1 2 + x2 2 )) + (x1 2 + x2 2 )/20 4 3 2 1 0-1 5 0 0 5 x 2-5 -5 x 1
等高线图 ezcontour('x2*exp(-(x1^2 + x2^2)) + (x1^2 + x2^2)/20'); 2 x 2 exp(-(x 1 + 2 x2 )) + 2 (x1 + 2 x2 )/20 6 4 2 x 2 0-2 -4-6 -6-4 -2 0 2 4 6 x 1 练习 2. 如果将线性等号约束写到 mycon 中去, 观察结果有没有变化 %main function function demo1 x0=[-1;1]; A=[];b=[]; Aeq=[];beq=[]; vlb=[];vub=[]; [x,fval]=fmincon(@fun1,x0,a,b,aeq,beq,vlb,vub,@mycon) %fun1 is object function function f=fun1(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); %mycon is nonlinear constrains function [g,ceq]=mycon(x) g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; Aeq=[1 1];beq=[0]; ceq=[];
Active inequalities (to within options.tolcon = 1e-006): lower upper ineqlin ineqnonlin 1 2 x = -9.5474 1.0474 fval = 0.0236 结果发生变化 练习 3. 将上述两个例子用 lingo 求解, 并将结果与 Matlab 结果做比较 (1) lingo min=x2*@exp(-(x1^2 + x2^2)) + (x1^2 + x2^2)/20; Local optimal solution found. Objective value: -0.4052369 Exted solver steps: 5 Total solver iterations: 12 X2-0.6690718 0.000000 X1 0.000000 0.000000 1-0.4052369-1.000000
Matlab: % steepdesc 是最速下降法 options = optimset('display', 'iter-detailed',... 'HessUpdate','steepdesc'); %fun 是目标函数, 匿名函数形式 fun = @(x) x(2)*exp(-(x(1)^2 + x(2)^2)) + (x(1)^2 + (2)^2)/20; %x0 是初始值 x0 = [1,2]; [x,fval] = fminunc(fun,x0,options) x = 0.0000 3.7268 fval = 0.2000 比较 :lingo 的答案更小 (2) min=@exp(x1)*(4*x1^2+2*x2^2+4*x1*x2+2*x2+1); x1+x2=0; 1.5+x1*x2-x1-x2<=0; -x1*x2-10<=0; Global optimal solution found. Objective value: 1.156627 Exted solver steps: 16 Total solver iterations: 857 X1-3.162278 0.000000 X2 3.162278 0.000000 1 1.156627-1.000000 2 0.000000-0.3529293 3 8.500000 0.000000 4 0.000000 0.8483469E-01
Matlab: %main function function demo1 x0=[-1;1]; A=[];b=[]; Aeq=[1 1];beq=[0]; vlb=[];vub=[]; [x,fval]=fmincon(@fun1,x0,a,b,aeq,beq,vlb,vub,@mycon) %fun1 is object function function f=fun1(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); %mycon is nonlinear constrains function [g,ceq]=mycon(x) g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10]; ceq=[]; x = -1.2247 1.2247 fval = 1.8951 比较 :lingo 比 matlab 答案更小 练习 4. 求下列函数的极小点 : 1) f(x)=x1^2+4x2^2+9x3^2-2x1+18x2 2) f(x)=x1^2+3/2x2^2-2x1x2+x1-2x2 3)f(x)=(x1-1)^4+x2^2
(1) min=x1^2+4*x2^2+9*x3^2-2*x1+18*x2; @free(x3); Global optimal solution found. Objective value: -21.25000 Objective bound: -21.25000 Infeasibilities: 0.000000 Exted solver steps: 2 Total solver iterations: 268 X1 1.000000 0.000000 X2-2.250000 0.3115211E-08 X3 0.000000 0.000000 1-21.25000-1.000000 (2) min=x1^2+(3/2)*x2^2-2*x1*x2-2*x2; Global optimal solution found. Objective value: -2.000000 Objective bound: -2.000000 Infeasibilities: 0.000000 Exted solver steps: 237 Total solver iterations: 51136 X1 2.000000 0.000000 X2 2.000000 0.000000 1-2.000000-1.000000
(3) min=(x1-1)^4+x2^2; Global optimal solution found. Objective value: 0.1078389E-11 Objective bound: 0.000000 Infeasibilities: 0.000000 Exted solver steps: 0 Total solver iterations: 55 X1 1.001019 0.4231836E-08 X2-0.1932330E-07-0.3864660E-07 1 0.000000-1.000000 三 实验总结 1 了解 matlab 中常用优化命令的用法 2 掌握 lingo 软件进行非线性规划问题的求解方法