主要内容

只使用可行的起点进行优化

您可以设置StartPointsToRun选择这MultiStartGlobalSearch只使用满足不等式约束的起始点。这个选项可以加速你的优化,因为本地解算器不需要搜索一个可行的区域。然而,该选项可能会导致求解器错过一些吸引点。

有三种设置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函数只有一个局部最小值。然而,GlobalSearchfmincon)停在几个点上。这是否意味着fmincon让一个错误?

的原因fmincon在几个边界点停车是很微妙的。的tiltcircle函数在边界上有一个无限的梯度,正如你从一维计算中看到的:

d d x 16 x 2 x 16 x 2 ± | x | 4.

所以边界上有一个很大的梯度。这个梯度压倒了线性项的小的额外倾斜。至于fmincon可以看出,边界点是约束问题的驻点。

只要函数有平方根,就会出现这种行为。

相关的话题