这个例子展示了如何使用模式搜索最小化受非线性不等式约束和边界约束的目标函数。有关此示例的基于问题的版本,请参见基于问题的模式搜索的约束最小化.
对于这个问题,要最小化的目标函数是一个二维变量的简单函数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]所描述的,这个功能被称为“cam”。
此外,该问题具有非线性约束和边界。
10 - X (1)* X(2) <= 0(非线性约束)0 <= X(1) <= 1(约束)0 <= X(2) <= 13(约束)
创建一个MATLAB文件名为simple_objective.m
包含以下代码:
类型simple_objective
function y = simple_objective(x) % simple_objective for PATTERNSEARCH solver %版权所有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
.
创建一个MATLAB文件名为simple_constraint.m
包含以下代码:
类型simple_constraint
函数[c, ceq] = simple_constraint(x) %c = [1.5 + x(1)*x(2) + x(1) - x(2);x - x (1) * (2) + 10);%无非线性等式约束:ceq = [];
约束函数计算所有不等式和等式约束的值,并返回向量c
和量表信
,分别。的价值c
表示求解器试图使之小于或等于零的非线性不等式约束。的价值量表信
表示求解器试图使其等于零的非线性等式约束。这个例子没有非线性等式约束,所以测查= []
.有关详细信息,请参见非线性约束.
patternsearch
将目标函数指定为函数句柄。
ObjectiveFunction = @simple_objective;
指定问题的边界。
Lb = [0 0];%下界Ub = [1 13];%上界
将非线性约束函数指定为函数句柄。
ConstraintFunction = @simple_constraint;
为求解器指定一个初始点。
X0 = [0.5 0.5];%的起点
呼叫解算器,请求最佳点x
函数在最优点处的值fval
.
[x, fval] = patternsearch (ObjectiveFunction x0 ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction)
优化终止:网格尺寸小于选项。MeshTolerance和constraint violation小于options. constraintolerance。
x =1×20.8122 - 12.3122
fval = 9.1324 e + 04
要观察求解器的进程,请指定选择两个绘图函数的选项。绘制函数psplotbestf
绘制每次迭代的最佳目标函数值,并绘制函数psplotmaxconstr
绘制每个迭代的最大约束违背。在单元格数组中设置这两个绘图函数。控件,在命令窗口中显示有关求解器进度的信息显示
选项“通路”
.
选择= optimoptions (@patternsearch,“PlotFcn”{@psplotbestf, @psplotmaxconstr},...“显示”,“通路”);
运行求解器,包括选项
论点。
[x, fval] = patternsearch (ObjectiveFunction x0 ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction选项)
Max Iter函数计数f(x)约束网格尺寸方法01 0.373958 9.75 0.9086 1 18 113581 1.617e-10 0.001增加惩罚2 148 92267 0 1e-05增加惩罚3 374 91333.2 0 1e-07增加惩罚4 639 91324 0 1e-09增加惩罚优化终止:网格尺寸小于选项。MeshTolerance和constraint violation小于options. constraintolerance。
x =1×20.8122 - 12.3122
fval = 9.1324 e + 04
非线性约束的原因patternsearch
在每次迭代中解决许多子问题。从图和迭代显示中可以看出,求解过程的迭代次数很少。然而,Func-count
列在迭代显示中显示每个迭代的许多函数求值。图和迭代显示都表明初始点是不可行的,目标函数在初始点是低的。在求解过程中,目标函数值先增大,然后减小到最终值。
L. C. W.迪克森和G . p。Szego (eds)。面向全局优化北荷兰:爱思唯尔科学有限公司,阿姆斯特丹,1978。