主要内容

使用模式搜索的约束最小化,基于求解器

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

约束最小化问题

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

simple_objective (x) = (4 - 2.1 * (1) ^ 2 + x (1) ^ 4/3) * x (1) ^ 2 + x (1) * (2) + (4 + 4 * x (2) ^ 2) * x (2) ^ 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(边界)

编码目标函数

创建一个MATLAB®文件simple_objective.m包含以下代码:

类型simple_objective
版权所有2004 The MathWorks, Inc. x1 = x(1);X2 = x(2);y = (4 - 2.1 * x1。^ 2 + x1。^ 4. / 3)。* x1。^ 2 + x1。* x2 + (4 + 4 * x2。^ 2)。* x2。^ 2;

求解器,比如patternsearch接受单个输入x,在那里x问题中有多少变量就有多少元素。目标函数计算目标函数的标量值,并在其单个输出参数中返回它y

约束函数编码

创建一个名为simple_constraint.m包含以下代码:

类型simple_constraint
function [c, ceq] = simple_constraint(x) % simple_constraint非线性不等式约束。c = [1.5 + x(1)*x(2) + x(1) - x(2);-x(1)*x(2) + 10];%无非线性等式约束:ceq = [];

约束函数计算所有不等式和等式约束的值,并返回向量c而且量表信,分别。的价值c表示求解器试图使其小于或等于零的非线性不等式约束。的价值量表信表示求解器试图使其等于零的非线性等式约束。这个例子没有非线性等式约束,所以Ceq = [].详细信息请参见非线性约束

尽量减少使用patternsearch

将目标函数指定为函数句柄。

ObjectiveFunction = @simple_objective;

指定问题边界。

Lb = [0 0];%下界Ub = [1 13];%上界

将非线性约束函数指定为函数句柄。

约束函数= @simple_constraint;

为求解器指定一个初始点。

X0 = [0.5 0.5];%起点

调用求解器,请求最优点x和最优点的函数值fval

[x, fval] = patternsearch (ObjectiveFunction x0 ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction)
优化终止:网格尺寸小于选项。MeshTolerance和约束违反小于options. constraintolerance。
x =1×20.8122 - 12.3122
Fval = 9.1324e+04

添加可视化

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

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

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

[x, fval] = patternsearch (ObjectiveFunction x0 ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction选项)
最大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 =1×20.8122 - 12.3122
Fval = 9.1324e+04

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

参考文献

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

相关的话题