使用模式搜索的约束最小化,基于问题
这个例子展示了如何在基于问题的方法中使用模式搜索,在非线性不等式约束和边界下最小化目标函数。有关此问题的基于求解器的版本,请参见使用模式搜索的约束最小化,基于求解器.
约束最小化问题
对于这个问题,最小化的目标函数是一个简单的二维变量函数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,[]],“所有”)))举行从
创建优化变量、问题和约束
要建立这个问题,请创建优化变量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.8122
,Y = 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
将它们转换为适合基于问题的方法的形式。例如,假设不是约束条件
你有约束条件
,在那里
是修正的贝塞尔函数besseli (x)
.(不支持Bessel函数。)金宝app使用以下命令创建此约束fcn2optimexpr
如下。首先创建的优化表达式
.
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年。