这个例子展示了如何使用模式搜索在非线性不等式约束和边界下最小化目标函数。
对于这个问题,最小化的目标函数是一个二维变量的简单函数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=[];
约束函数计算所有不等式和等式约束的值并返回向量C
和ceq
分别地价值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年。