此示例示出了如何以最小化的目标函数,受非线性不等式约束和界限,使用模式搜索。
对于这个问题中,目标函数最小化是2 d变量的简单函数X
。
simple_objective(X)=(4 - 2.1 *×(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]。
此外,该问题有非线性约束和边界。
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
函数y = simple_objective(X)%SIMPLE_OBJECTIVE为PATTERNSEARCH求解%版权所有2004 The MathWorks公司目标函数,Inc.的X1 = X(1);X2 = X(2);。Y =(。4-2.1 * X1 ^ 2 + X1 ^ 4/3)* X1 ^ 2 + X 1 * X 2 +( - 4 + 4 * X 2 ^ 2)* X2 ^ 2。;
求解器如patternsearch
接受单个输入X
,其中X
有一样多的元素的问题的变量数。目标函数计算目标函数的标量值,并返回它在其单一输出参数ÿ
。
创建一个名为MATLAB文件simple_constraint.m
包含以下代码:
类型simple_constraint
功能并[c,CEQ] = simple_constraint(X)%SIMPLE_CONSTRAINT非线性不等式约束。%版权所有2005-2007 MathWorks公司C = [1.5 + X(1)* X(2)+ X(1) - X(2);-x(1)* X(2)+ 10];%未非线性等式约束:CEQ = [];
约束函数计算的所有的不等式和等式约束的值并返回矢量C
和CEQ
, 分别。的价值C
表示非线性不等式约束求解器企图使小于或等于零。的价值CEQ
表示非线性等式约束求解器试图使等于零。本实施例中不具有非线性等式约束,所以CEQ = []
。有关详细信息,请参阅非线性约束(优化工具箱)。
patternsearch
指定目标函数的函数句柄。
ObjectiveFunction = @simple_objective;
指定问题范围。
磅= [0 0];%下界UB = [1 13];%上界
指定非线性约束功能的功能句柄。
ConstraintFunction = @simple_constraint;
指定解算器的初始点。
X0 = [0.5 0.5]。% 初始点
让解决,请求最佳点X
和在最佳点的函数值FVAL
。
[X,FVAL] = patternsearch(ObjectiveFunction,X0,[],[],[],[],LB,UB,...ConstraintFunction)
优化终止:网孔尺寸小于options.MeshTolerance和约束违反小于options.ConstraintTolerance。
X =1×20.8122 12.3122
FVAL = 9.1324e + 04
观察求解器的进步,指定选择两个地块功能的选项。该地块功能psplotbestf
绘制在每次迭代的最佳目标函数值,和绘图功能psplotmaxconstr
绘制的最大约束违反在每次迭代。在单元阵列设置这两个情节功能。此外,通过设置显示关于在命令窗口中的解算器的进度信息显示
选项'ITER'
。
选项= optimoptions(@patternsearch,'PlotFcn'{@ psplotbestf,@ psplotmaxconstr},...'显示','ITER');
运行求解器,包括选项
论据。
[X,FVAL] = patternsearch(ObjectiveFunction,X0,[],[],[],[],LB,UB,...ConstraintFunction,期权)
最大Iter项目Func键数F(x)的约束MeshSize方法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增加惩罚优化终止:筛目大小小于options.MeshTolerance和约束违反小于options.ConstraintTolerance。
X =1×20.8122 12.3122
FVAL = 9.1324e + 04
非线性约束的原因patternsearch
在每次迭代解决诸多的问题。如曲线和迭代显示两者中所示,溶液方法具有几个迭代。但是,那FUNC数
在迭代显示栏显示每迭代许多功能评估。两者的曲线和迭代显示表明初始点是不可行的,并且所述目标函数是在初始点低。在求解过程中,目标函数值最初增加,然后下降到其最终值。
[1]迪克森,L. C.W。,和G .P。Szego(编辑)。往全球性优化2。北荷兰:Elsevier科学有限公司,阿姆斯特丹,1978年。