主要内容

Plot函数的全局搜索和多开始

什么是情节函数?

Plotfcn.现场选项指定优化函数在每次迭代时调用的一个或多个函数。当算法执行时,Plot函数绘制各种进度度量。传递一个函数句柄或函数句柄的单元格数组。plot函数的结构与输出函数的结构相同。有关此结构的更多信息,请参见OutputFcn

Plot函数是专门的输出函数(参见GlobalSearch和Mulistart的输出函数).有两个预定义的plot函数:

  • @gsplotbestf.绘制最佳的客观函数值。

  • @gsplotfunccount.绘制函数评估的数量。

绘图函数窗口有暂停停止纽扣。默认情况下,所有绘图都出现在一个窗口中。

要使用全局绘图功能:

  • 使用中描述的语法编写绘图函数OutputFcn

  • 设定Plotfcn.你的财产Globalsearch.多层的对象绘制函数的函数句柄。您可以通过设置多个绘图功能来设置Plotfcn.属性到功能函数的单元格数组。

内置Plot函数的详细信息

内置绘图功能具有可能让您感到惊讶的特征。

  • @gsplotbestf.可以有没有严格下降的情节。这是因为早期的值可以由本地解算器带有负口出口标志(例如不可行的解决方案)。金宝搏官方网站即使其功能值较高,带有正退出标志的后续本地解决方案也更好。一旦本地解算器返回具有正退出标志的值,绘图就会单调逐渐减小。

  • @gsplotfunccount.可能不会绘制功能评估的总数。这是因为Globalsearch.可以在最后一次调用plot函数后继续执行函数计算。有关更多信息,请参见GlobalSearch算法

多层的绘图功能

这个例子绘制局部求解器运行的数量,它需要获得更好的局部最小值多层的.这个示例还使用内置的plot函数来显示当前的最佳函数值。

示例问题与中相同查找全局或多个本地最小值,附加界限。

这个示例使用持久变量来存储以前的最佳值。在每个局部求解器运行后,plot函数检查最佳函数值最好的场面的领域优化价值结构体。如果该值不低于以前的最佳,则绘图函数会增加1到连续呼叫的数量,没有改进并绘制条形图。如果值低于上一个最佳,则绘图函数在图表中启动一个新栏,其中值1.在绘制之前,绘图功能采用连续呼叫数量的对数。对数有助于保持绘图清晰,因为某些值可能比其他值要大得多。

要使用嵌套功能而不是持久变量存储本地结果,请参阅嵌套输出功能的示例

绘图功能示例

这个例子最小化sawtoothxy辅助功能,列在本例结束.通常,将您的目标函数保存在Matlab®路径上的文件中。

NumberToNextBest自定义绘图函数附加到此示例。通常,将您的绘图功能保存在MATLAB路径上的文件中。这是一个列表。

类型NumberToNextBest
function stop = NumberToNextBest(optimValues, state) persistent bestfv bestcounter stop = false;初始化变量以记录最好的函数值。bestfv = [];初始化计数器以记录%本地求解器运行的次数,以找到下一个最佳最小值。bestcounter = 1;%创建直方图。栏(日志(bestcounter)、“标签”,“NumberToNextBest”);xlabel(“新最佳Fval发现数量”);ylabel('本地求解器运行的日志数量');查找包含直方图的轴。 NumToNext = ... findobj(get(gca,'Children'),'Tag','NumberToNextBest'); % Update the counter that records number of local % solver runs to find next best minimum. if ~isequal(optimValues.bestfval, bestfv) bestfv = optimValues.bestfval; bestcounter = [bestcounter 1]; else bestcounter(end) = bestcounter(end) + 1; end % Update the histogram. set(NumToNext,'Ydata',log(bestcounter)) end

创建问题结构和全局求解器对象。设置下限[-3E3,-4E3],的上界(4 e3, 3 e3)并将全局求解器设置为使用NumberToNextBest自定义绘图功能和gsplotbestf.内置绘图功能。

问题= createOptimproblem(“fmincon”......'客观的',@(x)Sawtoothxy(x(1),x(2)),......'x0',[100,-50],“磅”,[ -  3e3 -4e3],......乌兰巴托的,[4e3,2e3],“选项”......Optimoptions(@Fmincon,'算法'“sqp”));ms = multiStart(“PlotFcn”,{@ numpertonextbest,@ gsplotbestf});

运行全局求解器,可为100个本地解算器运行。

RNG(2);%的再现性[x,阵线]=运行(女士,100年问题);

图MultiStart包含2个轴。标题为“寻找更低最小值的本地求解器运行数”的坐标轴1包含一个类型为bar的对象。标题为“最佳函数值:1.43883e-14”的轴2包含两个类型为line、text的对象。

MultiStart从起点完成了一些运行。在100个本地求解器中的34个运行中包含正本地求解器出口标志。

辅助功能

此代码创建sawtoothxy帮手功能。

函数f = SawtoothXy(x,y)[t,r] = cart2pol(x,y);%变为极地坐标H = COS(2 * T  -  1/2)/ 2 + COS(T)+ 2;G =(SIN(R) -  SIN(2 * R)/ 2 + SIN(3 * R)/ 3  -  SIN(4 * R)/ 4 + 4)....... * r。^ 2. / (r + 1);f = g。* h;结尾

没有平行的绘图功能

多层的可以并行运行,它不支持全局输出函数和绘图函数并行运行。金宝app此外,当本地输出函数和绘图函数在工人上运行时多层的并行运行,效果不同于串行运行。本地输出和绘图函数在工人上运行时不会创建显示。在worker将其结果传递给客户机(即多层的平行就业)。

有关运行的信息多层的同时,看到并行计算

相关的话题