主要内容

解决约束非线性优化,具体问题具体分析

这个例子展示了如何找到最低的非线性目标函数的非线性约束通过具体问题具体分析的方法。对于一个视频解决类似的问题,明白了具体问题具体分析非线性规划

找到一个非线性目标函数的最小值使用具体问题具体分析的方法,首先把目标函数写成文件或匿名函数。这个例子是目标函数

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

创建一个不等式的约束表达式的优化变量。

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

包括问题的约束。

prob.Constraints。若干= TiltEllipse;

创建一个结构代表初始点x = 3,y = 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 (x, y)。* y / 2 + (x + 2) ^ 2 + (y2)。^ 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轮廓”,“全球解决方案”,“本地解决方案”,“位置”,“东北”);持有

图包含一个坐标轴对象。坐标轴对象包含4 implicitfunctionline类型的对象,functioncontour,线。这些对象代表约束,f轮廓,全球解决方案,当地的解决方案。

非线性约万博 尤文图斯束边界上的解决方案。等高线图表明,这些是唯一的局部最小值。情节还表明,附近有一个平稳点(2,3/2),和当地最大值附近(2,0)和[1,4]。

将目标函数使用fcn2optimexpr

对于一些目标函数或软件版本,您必须将通过使用非线性函数优化表达式fcn2optimexpr。看到万博1manbetx支持操作优化变量和表达式将非线性函数优化表达式。通过xy变量的fcn2optimexpr优化变量对应于每个调用显示objfunx输入。

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

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

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

其余的解决方案的过程是相同的。

版权2018 - 2020 MathWorks公司。

另请参阅

相关的话题