主要内容

求解约束非线性优化,基于问题

这个例子展示了如何使用基于问题的方法来寻找非线性目标函数的最小值。有关一个类似问题的解决方案的视频,请参见具体问题具体分析非线性规划

用基于问题的方法求非线性目标函数的最小值,首先将目标函数写成文件函数或匿名函数。这个例子的目标函数是

f x y e x 4 x 2 + 2 y 2 + 4 x y + 2 y - 1

类型objfunx
函数f = objfunx(x,y) f = exp(x).*(4*x)^ 2 + 2 * y。^ 2 + 4 * x。*y + 2*y - 1);结束

创建优化问题变量xy

x = optimvar (“x”);y = optimvar (“y”);

将目标函数作为优化变量的表达式创建。

obj = objfunx (x, y);

创建一个优化问题obj作为目标函数。

概率= optimproblem (“目标”、obj);

创建一个非线性约束,使解位于一个倾斜的椭圆中,指定为

x y 2 + x + 2 2 + y - 2 2 2 2

将约束创建为优化变量中的不等式表达式。

= x.*y/2 + (x+2)。^ 2 + (y2)。^ 2/2 < = 2;

在问题中包含约束。

prob.Constraints.constr = TiltEllipse;

创建一个结构,表示初始点为x = 3y = 3

x0。x=-3; x0.y = 3;

回顾这个问题。

显示(概率)
OptimizationProblem:解:x, y:最小化(exp (x ) .* ((((( 4 . * x ^ 2) + (2 * y。^ 2))+((4。* x)。* y)) +(2。* y)) - 1))若干主题:((((x。* y) / 2) + (x + 2) ^ 2) + ((y - 2) ^ 2。/ 2))< = 2

解决这个问题。

[溶胶,fval] =解决(x0概率)
使用fmincon解决问题。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
索尔=结构体字段:X: -5.2813 y: 4.6815
fval = 0.3299

尝试一个不同的起点。

x0。x=-1; x0.y = 1; [sol2,fval2] = solve(prob,x0)
使用fmincon解决问题。找到目标函数值较低的可行点。找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。
sol2 =结构体字段:X: -0.8210 y: 0.6696
fval2 = 0.7626

绘制椭圆、目标函数轮廓和两个解。金宝搏官方网站

f = @objfunx;x = (x,y) x.*y/2+(x+2).^2+(y-2).^2/2-2;rge = [-5.5 -0.25 -0.25 7];fimplicit (g,“k -”轴(rnge);持有rnge fcontour (f,“LevelList”情节,logspace (1,1)) (sol.x sol.y,“罗”“线宽”2)图(sol2.x sol2.y,“柯”“线宽”2)传说(“约束”“f轮廓”“全球解决方案”“本地解决方案”“位置”“东北”);持有

图中包含一个坐标轴。轴包含隐函数线、函数轮廓线、直线4个对象。这些对象代表约束,f轮廓,全局解,局部解。

解在非线金宝搏官方网站性约束边界上。等高线图表明这些是唯一的局部最小值。图中还显示在[- 2,3/2]附近有一个驻点,在[- 2,0]和[- 1,4]附近有一个局部极大值。

使用以下方法转换目标函数fcn2optimexpr

对于某些目标函数或软件版本,必须通过使用将非线性函数转换为优化表达式fcn2optimexpr.看到金宝app支持优化变量和表达式的操作将非线性函数转换为优化表达式.通过xy变量的fcn2optimexpr调用以指示每个优化变量对应的优化变量objfunx输入。

obj = fcn2optimexpr (@objfunx, x, y);

创建一个优化问题obj作为目标函数。

概率= optimproblem (“目标”、obj);

解决过程的其余部分是相同的。

The MathWorks, Inc.版权所有

另请参阅

相关的话题