这个例子展示了如何使用基于问题的方法来寻找非线性目标函数的最小值。有关一个类似问题的解决方案的视频,请参见具体问题具体分析非线性规划.
用基于问题的方法求非线性目标函数的最小值,首先将目标函数写成文件函数或匿名函数。这个例子的目标函数是
类型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 + (y2)。^ 2/2 < = 2;
在问题中包含约束。
prob.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
解决这个问题。
[溶胶,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轮廓”,“全球解决方案”,“本地解决方案”,“位置”,“东北”);持有从
解在非线金宝搏官方网站性约束边界上。等高线图表明这些是唯一的局部最小值。图中还显示在[- 2,3/2]附近有一个驻点,在[- 2,0]和[- 1,4]附近有一个局部极大值。
fcn2optimexpr
对于某些目标函数或软件版本,必须通过使用将非线性函数转换为优化表达式fcn2optimexpr
.看到金宝app支持优化变量和表达式的操作和将非线性函数转换为优化表达式.通过x
和y
变量的fcn2optimexpr
调用以指示每个优化变量对应的优化变量objfunx
输入。
obj = fcn2optimexpr (@objfunx, x, y);
创建一个优化问题obj
作为目标函数。
概率= optimproblem (“目标”、obj);
解决过程的其余部分是相同的。
The MathWorks, Inc.版权所有