主要内容

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

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

为了使用基于问题的方法找到非线性目标函数的最小值,首先将目标函数写成文件或匿名函数。本例的目标函数是

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);结束

创建优化问题变量x而且y

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

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

obj = objfunx (x, y);

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

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

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

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

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

TiltEllipse = 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;G = @(x,y) x.*y/2+(x+2).^2+(y-2).^2/2-2;Rnge = [-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轮廓”“全球解决方案”“本地解决方案”“位置”“东北”);持有

图中包含一个axes对象。axis对象包含4个类型为隐式函数line、函数contour和line的对象。这些对象代表约束,f轮廓,全局解,局部解。

解在非线性约束边界上。等高线图显示这些是唯一的局部极小值。图还显示在[- 2,3/2]附近有一个静止点,在[- 2,0]和[- 1,4]附近有一个局部极大值。

使用转换目标函数fcn2optimexpr

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

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

创建一个优化问题obj目标函数和之前一样。

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

其余的解过程是相同的。

The MathWorks, Inc.版权所有

另请参阅

相关的话题

Baidu
map