解决约束非线性优化,基于问题
这个例子展示了如何使用基于问题的方法来寻找具有非线性约束的非线性目标函数的最小值。有关类似问题的解决方案的视频,请参见基于问题的非线性规划.
为了使用基于问题的方法找到非线性目标函数的最小值,首先将目标函数写成文件或匿名函数。本例的目标函数为
类型objfunx
函数f = objfunx(x,y) f = exp(x).*(4*x.)²+ 2*y。^2 + 4*x。*y + 2*y - 1);结束
创建优化问题变量x
而且y
.
X = optimvar(“x”);Y = optimvar(“y”);
创建目标函数作为优化变量中的表达式。
Obj = objfunx(x,y);
创建一个优化问题obj
作为目标函数。
问题=优化问题(“目标”、obj);
创建解位于倾斜椭圆(指定为)的非线性约束
在优化变量中创建约束作为不等式表达式。
TiltEllipse = x.*y/2 + (x+2)。²+ (y-2)^2/2 <= 2;
在问题中包含约束条件。
probv . constraints .constr = 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
解决问题。
[sol,fval] = solve(prob,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轮廓”,“全球解决方案”,“本地解决方案”,“位置”,“东北”);持有从
解在非线金宝搏官方网站性约束边界上。等高线图显示这些是唯一的局部极小值。该图还表明,在[- 2,3/2]附近存在一个静止点,在[- 2,0]和[- 1,4]附近存在局部极大值。
使用目标函数转换fcn2optimexpr
对于某些目标函数或软件版本,必须使用将非线性函数转换为优化表达式fcn2optimexpr
.看到金宝app优化变量和表达式的支持操作而且将非线性函数转化为优化表达式.通过x
而且y
中的变量fcn2optimexpr
调用来指示每个优化变量对应于哪个优化变量objfunx
输入。
Obj = fcn2optimexpr(@objfunx,x,y);
创建一个优化问题obj
作为目标函数。
问题=优化问题(“目标”、obj);
剩下的解过程是一样的。
版权所有The MathWorks, Inc.