surrogateopt
选项这个例子展示了如何通过运行搜索全局最小值surrogateopt
在一个有六个局部极小值的二维问题上。然后,该示例展示了如何修改一些选项以更有效地搜索。
定义目标函数sixmin
如下。
sixmin = @ (x) (4 * x(: 1)。^ 2 - 2.1 * x(: 1)。^ 4 + x(: 1)。^ 6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^ 2 + 4 * x (:, 2) ^ 4);
绘制函数。
(X, Y) = meshgrid (linspace (-2.1, 2.1), linspace (-1.2, 1.2);Z = sixmin ([X (:), Y (:)));Z =重塑(Z,大小(X));冲浪(X, Y, Z,“EdgeColor”,“没有”)视图(-139、31)
该函数有6个局部极小值和2个全局极小值。
运行surrogateopt
在这个问题上“surrogateoptplot”
在每个方向为。的区域内绘制函数[-2.1, 2.1]
.了解“surrogateoptplot”
情节,看到解释surrogateoptplot.
rng默认的磅= [-2.1,-2.1];乌兰巴托=磅;选择= optimoptions (“surrogateopt”,“PlotFcn”,“surrogateoptplot”);[x, fvals eflags、输出]= surrogateopt (sixmin、磅、乌兰巴托、选择);
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
的设置较小的值MinSurrogatePoints
选项,查看更改是否有助于求解器更快地达到全局最小值。
选择。MinSurrogatePoints = 4;[xs2, fvals2 eflags2 outputs2] = surrogateopt (sixmin、磅、乌兰巴托、选择);
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
较小的MinSurrogatePoints
选项不会明显改变求解器的行为。
尝试设置一个更大的值MinSampleDistance
选择。
选择。MinSampleDistance = 0.05;[xs3, fvals3 eflags3 outputs3] = surrogateopt (sixmin、磅、乌兰巴托、选择);
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
改变了MinSampleDistance
选项对求解器有很小的影响。此设置会导致代理程序更频繁地重置,并导致最佳目标函数比以前略高(更差)一些。
尝试使用并行处理。使用或不使用并行处理的执行时间骑在骆驼背上的
函数的变体sixmin
函数。为了模拟一个耗时的函数骑在骆驼背上的
函数的每个函数求值都增加了1秒的暂停时间。
类型骑在骆驼背上的
函数y =骑在骆驼背上的(x) y = x (4 * (1) ^ 2 - 2.1 * (1) ^ 4 + x(1) ^ 6/3……x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4;暂停(1)
Tic options = optimoptions(“surrogateopt”,“UseParallel”,真的,“PlotFcn”,“surrogateoptplot”);[xs4, fvals4 eflags4 outputs4] = surrogateopt (@camelback、磅、乌兰巴托、选择);
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
toc
运行时间为43.142697秒。
时间求解器运行时,同一问题在串行。
选择。UseParallel = false;Tic [xs5,fvals5,eflags5,outputs5] = surrogateopt(@camelback,lb,ub,opts);
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
toc
运行时间为227.968689秒。
对于耗时的目标函数,并行处理显著地提高了速度,而不会过度影响结果。