主要内容

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

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

约束最小化问题

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

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

正如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,[]],“所有”)))举行

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

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

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

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

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

CAM = camxy(x,y);

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

问题=优化问题(“客观”、凸轮);

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

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解算器。

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

patternsearch找到解决点X = 0.8122Y = 12.3122目标函数值e4 9.1324

添加可视化

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

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

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

[sol,fval] = solve(prob,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.1324e+04

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

不支金宝app持的功能

如果你的目标或非线性约束函数不是金宝app优化变量和表达式的支持操作,使用fcn2optimexpr将它们转换为适合基于问题的方法的形式。例如,假设不是约束条件 x y 1 0 你有约束条件 1 x + 1 y 1 0 ,在那里 1 x 是修正的贝塞尔函数besseli (x).(不支持Bessel函数。)金宝app使用以下命令创建此约束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] = solve(prob,x0,“规划求解”“patternsearch”“选项”选项)
使用模式搜索解决问题。最大Iter功能计数f(x)约束网格尺寸方法01 0.373958 9.484 0.9307 1 18 113581 0 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

参考文献

[1]迪克森,l.c.w, g.p。Szego (eds)。朝向全局优化2。北荷兰:爱思唯尔科学有限公司,阿姆斯特丹,1978年。

另请参阅

|

相关的话题