主要内容

基于问题的模式搜索约束最小化

这个例子展示了如何在基于问题的方法中使用模式搜索最小化受非线性不等式约束和边界约束的目标函数。有关此问题的基于求解器的版本,请参见使用模式搜索的约束最小化,基于求解器

约束的最小化问题

对于这个问题,最小化的目标函数是一个简单的二维变量函数X而且Y

camxy = @(X,Y)(4 - 2.1.*X。^ 2 + X ^ 4. / 3)。* X。²+ x .* y + (-4 + 4.* y .^2).* y .^2;

正如L.C.W. Dixon和G.P. Szego所描述的那样,这个功能被称为“凸轮”[1]

此外,该问题具有非线性约束和边界。

X (1)* X (2) + X (1) - X(2) + 1.5 <= 0(非线性约束)10 - X (1)* X(2) <= 0(非线性约束)0 <= X(1) <= 1(约束)0 <= X(2) <= 13(约束)

在目标函数的曲面上画出非线性约束区域。约束条件将解限制在两条红色曲线上方的小区域。

x1 = linspace (0,1);Y1 = (-x1 - 1.5)/ (x1 - 1);y2 = 10. / x1;(X, Y) = meshgrid (x1, linspace (0, 13));Z = camxy (X, Y);冲浪(X, Y, Z,“线型”“没有”)举行z1 = camxy (x1, y1);z2 = camxy (x1, y2);plot3 (x1, y1, z1,的r -, x1, y2、z2的r -) xlim([0 1]) ylim([0 13]) zlim([0,max(Z,[]),“所有”)))举行

图中包含一个axes对象。axis对象包含3个类型为surface、line的对象。

创建优化变量、问题和约束

要建立这个问题,创建优化变量x而且y.在创建变量时设置边界。

x = optimvar (“x”“下界”0,“UpperBound”1);y = optimvar (“y”“下界”0,“UpperBound”13);

将目标创建为优化表达式。

凸轮= camxy (x, y);

用这个目标函数创建一个优化问题。

概率= optimproblem (“客观”、凸轮);

创建两个非线性不等式约束,并将它们包含到问题中。

prob.Constraints。con1 = x*y + x - y + 1.5 <= 0;prob.Constraints。cons2= 10 - x*y <= 0;

回顾这个问题。

显示(概率)
OptimizationProblem:解:x, y最小化:(((((4 - (2.1 . * x ^ 2)) + (x ^ 4。/ 3))* x ^ 2) + (x, y)) +(((4) +(4。* y ^ 2)) * y ^ 2))受cons1: ((((x。* y) + x) - y) + 1.5) < = 0 cons2主题:(10 - (x, y)) < = 0变量范围:0 < = x < = 1 0 < = y < = 13

设置初始点并求解

将初始点设置为带字段的结构x等于0.5而且y等于0.5

x0。x= 0.5; x0.y = 0.5;

解决指定的问题patternsearch解算器。

[溶胶,fval] =解决(x0,概率“规划求解”“patternsearch”
使用模式搜索解决问题。优化终止:网格尺寸小于选项。MeshTolerance和约束违例小于options. constraintolerance。
索尔=结构体字段:X: 0.8122 y: 12.3122
fval = 9.1324 e + 04

patternsearch找到解点x = 0.8122y = 12.3122目标函数值e4 9.1324

添加可视化

要观察求解器的进度,请指定选择两个绘图函数的选项。绘制函数psplotbestf绘制每次迭代的最佳目标函数值,绘制函数psplotmaxconstr绘制每个迭代中最大的约束违反。在单元格数组中设置这两个绘图函数。方法在命令窗口中显示有关求解器进度的信息显示选项“通路”

选择= optimoptions (@patternsearch,...“PlotFcn”{@psplotbestf, @psplotmaxconstr},...“显示”“通路”);

运行求解器,包括选项论点。

[溶胶,fval] =解决(x0,概率“规划求解”“patternsearch”“选项”选项)
使用模式搜索解决问题。最大Iter函数计数f(x)约束网格尺寸方法01 0.373958 9.75 0.9086 1 18 113581 1.617e-10 0.001增加惩罚2 147 92267 0 1e-05增加惩罚3 373 91333.2 0 1e-07增加惩罚4 638 91324 0 1e-09增加惩罚优化终止:网格尺寸小于选项。MeshTolerance和约束违例小于options. constraintolerance。

{

索尔=结构体字段:X: 0.8122 y: 12.3122
fval = 9.1324 e + 04

非线性约束的原因patternsearch在每次迭代中解决许多子问题。如图和迭代显示所示,求解过程很少迭代。然而,Func-count迭代显示中的列显示每次迭代的许多函数计算。结果表明,初始点不可行,目标函数在初始点处较低。在求解过程中,目标函数值先增大,然后减小到最终值。

不支持的功能

如果你的目标或非线性约束函数不是优化变量和表达式的支持操作,使用fcn2optimexpr将它们转换为适合基于问题的方法的形式。例如,假设不是约束条件 x y 1 0 你有约束条件 1 x + 1 y 1 0 ,在那里 1 x 是修正的贝塞尔函数besseli (x).(不支持贝塞尔函数。)使用以下命令创建此约束fcn2optimexpr如下。首先创建一个优化表达式 1 x + 1 y

Bfun = fcn2optimexpr(@(t,u)besseli(1,t) + besseli(1,u),x,y);

接下来,替换约束cons2与约束bfun > = 10

prob.Constraints。cons2= bfun >= 10;

解决这个问题。由于约束区域不同,解也不同。

[sol2, fval2] =解决(x0,概率“规划求解”“patternsearch”“选项”选项)
使用模式搜索解决问题。最大Iter函数计数f(x)约束网格尺寸方法01 0.373958 9.484 0.9307 1 18 113581 1.659e-08 0.001增加惩罚2 183 962.841 0 1e-05增加惩罚3 499 960.942 0 1e-07增加惩罚4 636 960.94 0 8.511e-15更新乘法器优化终止:网格尺寸小于选项。MeshTolerance和约束违例小于options. constraintolerance。

{

sol2 =结构体字段:X: 0.4998 y: 3.9981
fval2 = 960.9401

参考文献

狄克逊,l.c.w., G . p。Szego (eds)。向着全球优化2。荷兰北部:爱思唯尔科学有限公司,阿姆斯特丹,1978。

另请参阅

|

相关的话题

Baidu
map