您可以设置StartPointsToRun
选择这MultiStart
和GlobalSearch
只使用满足不等式约束的起始点。这个选项可以加速你的优化,因为本地解算器不需要搜索一个可行的区域。然而,该选项可能会导致求解器错过一些吸引点。
有三种设置StartPointsToRun
选择:
所有
-接受所有起点
界限
-拒绝不满足边界的起点
bounds-ineqs
-拒绝不满足边界或不等式约束的起点
例如,假设你的目标函数是
函数y = tiltcircle(x) vx = x(:)-[4;4];% ensure vx is in column form y = vx'*[1;1] + sqrt(16 - vx'*vx);% if norm(x-[4;4]
tiltcircle
返回的复数值范数(x - [4 4]
.
写一个约束函数,该约束函数在下列集合上为正数范数(x - [4 4]
函数[c ceq] = myconstraint(x) ceq = [];Cx = x(:) - [4;4];% ensure x是一个列向量c = cx'*cx - 16;%负,其中倾斜度(x)为实数
集GlobalSearch
只使用满足不等式约束的起始点:
gs = GlobalSearch(“StartPointsToRun”、“bounds-ineqs”);
要完成这个示例,创建一个问题结构并运行求解器:
选择= optimoptions (@fmincon、“算法”、“内点”);问题= createOptimProblem(“fmincon”,…x0, 4[4],“客观”,@tiltcircle,……@myconstraint nonlcon”,“磅”,(-10 -10),……乌兰巴托,10[10],“选项”,选择);rng(7,“旋风”);GlobalSearch停止,因为它分析了所有的试验点。金宝搏官方网站所有5个本地求解器都以一个正的本地求解器退出标志运行。x = 1.1716 1.1716 fval = -5.6530 exitflag = 1 output = struct with fields: funcCount: 3242 localSolverTotal: 5 localSolverSuccess: 5 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 'GlobalSearch stopped because it analyzed all the trial po…' 金宝搏官方网站solutionset = 1x4 GlobalOptimSolution数组的属性:X Fval Exitflag输出X0
局部极小的倾斜圆
的tiltcircle
函数只有一个局部最小值。然而,GlobalSearch
(fmincon
)停在几个点上。这是否意味着fmincon
让一个错误?
的原因fmincon
在几个边界点停车是很微妙的。的tiltcircle
函数在边界上有一个无限的梯度,正如你从一维计算中看到的:
所以边界上有一个很大的梯度。这个梯度压倒了线性项的小的额外倾斜。至于fmincon
可以看出,边界点是约束问题的驻点。
只要函数有平方根,就会出现这种行为。