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

这个例子展示了如何使用模式搜索在非线性不等式约束和边界下最小化目标函数。

约束极小化问题

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

简单目标(x)=(4-2.1*x(1)^2+x(1)^4/3)*x(1)^2+x(1)*x(2)+(-4+4*x(2)^2)*x(2)^2;

如L.C.W.Dixon和G.P.Szego[1]所述,该功能称为“cam”。

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

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(界)

对目标函数进行编码

创建一个名为简单目标包含以下代码:

类型简单目标
函数y=简单目标(x)%PATTERNSEARCH解算器的简单目标函数%Copyright 2004 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;

解决方案,例如模式搜索接受单个输入x哪里x具有与问题中变量数量相同的元素。目标函数计算目标函数的标量值,并在其单个输出参数中返回Y.

约束函数的编码

创建一个名为简单约束包含以下代码:

类型简单约束
函数[c,ceq]=简单约束(x)%简单约束非线性不等式约束版权所有2005-2007 The MathWorks,Inc.c=[1.5+x(1)*x(2)+x(1)-x(2);-x(1)*x(2)+10];%无非线性等式约束:ceq=[];

约束函数计算所有不等式和等式约束的值并返回向量Cceq分别地价值C表示解算器试图使其小于或等于零的非线性不等式约束。的值ceq表示解算器试图使其等于零的非线性等式约束。这个例子没有非线性等式约束,所以ceq=[]. 有关详细信息,请参阅非线性约束(优化工具箱)。

尽量减少使用模式搜索

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

ObjectiveFunction=@simple\u objective;

指定问题边界。

lb=[0];%下限ub=[1 13];%上界

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

ConstraintFunction=@simple_constraint;

指定解算器的初始点。

x0=[0.50.5];%起点

调用解算器,请求最佳点x以及最佳点的函数值未来值.

[x,fval]=patternsearch(ObjectiveFunction,x0,[],[],[],[],[],[],[],[],[],[],[],lb,ub,...约束函数)
优化已终止:网格大小小于options.MeshTolerance和约束冲突小于options.ConstraintTolerance。
x=1×20.8122 12.3122
fval=9.1324e+04

添加可视化

要观察解算器的进度,请指定选择两个打印函数的选项。绘图函数psplotbestf在每次迭代时绘制最佳目标函数值,并绘制函数psplotmaxconstr绘制每次迭代时的最大约束冲突。在单元格数组中设置这两个绘图函数。此外,通过设置陈列选择“国际热核实验堆”.

options=options(@patternsearch,“PlotFcn”,{@psplotbestf,@psplotmaxconstr},...“显示”,“国际热核实验堆”);

运行解算器,包括选择权论点

[x,fval]=patternsearch(ObjectiveFunction,x0,[],[],[],[],[],[],[],[],[],[],[],lb,ub,...约束函数(选项)
最大Iter函数计数f(x)约束网格尺寸法0 1 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增加惩罚优化终止:网格大小小于选项。网格公差和约束冲突小于选项。约束公差。

x=1×20.8122 12.3122
fval=9.1324e+04

非线性约束导致模式搜索在每次迭代中解决多个子问题。如图和迭代显示所示,解决过程的迭代次数很少。但是Func计数迭代显示中的列显示每次迭代的许多函数求值。图和迭代显示均表明初始点不可行,且目标函数在初始点处较低。在求解过程中,目标函数值先增大,然后减小到最终值。

工具书类

[1] 狄克逊、L.C.W.和G.P。Szego(编辑)。走向全球优化2。北荷兰:爱思唯尔科学有限公司,阿姆斯特丹,1978年。

相关话题