对于GlobalSearch和多头绘图功能

什么是图形函数?

PlotFcn领域的选项指定一个或多个功能,在每次迭代优化的函数调用。绘图功能绘制的,而算法执行进度的各项措施。传递一个函数手柄或手柄功能的单元阵列。的曲线图函数的结构是相同的作为输出功能的结构。有关此结构的更多信息,请参阅OutputFcn

绘图功能是专业输出功能(见输出函数的全局搜索和多开始)。预设有两种剧情功能:

  • @gsplotbestf绘制最佳目标函数值。

  • @gsplotfunccount绘制函数计算的数量。

窗口具有的绘图功能暂停停止按钮。默认情况下,所有图形都显示在一个窗口中。

使用全局标绘函数:

  • 使用语法写剧情的功能描述OutputFcn

  • 设置PlotFcn你的属性GlobalSearch要么MultiStart对象指向绘图函数的函数句柄。设置,可以使用多个绘图函数PlotFcn属性设置为函数句柄的单元格数组。

内置绘图功能的详细信息

内置的plot函数具有一些会让你吃惊的特性。

  • @gsplotbestf可以有不严格减少的图形。这是因为早期值可能由带有负退出标志(如不可行的解决方案)的本地求解器运行而产生。万博 尤文图斯后续带有正退出标志的本地解决方案更好,即使其函数值更高。一旦本地求解器返回带有正退出标志的值,绘图将单调递减。

  • @gsplotfunccount可能不会画出函数计算的总数。这是因为GlobalSearch可以继续执行功能评估它调用最后一次的绘图功能之后。欲了解更多信息,请参阅GlobalSearch算法

MultiStart情节功能

这个例子地块局部求解器运行的次数才能获得更好的本地最小值MultiStart。该示例还使用一个内置的绘图函数来显示当前的最佳函数值。

示例问题与in相同找到全局或多个局部极小值,带有附加的边界。

示例使用持久变量来存储以前的最佳值。在每次本地求解器运行后,plot函数检查最佳函数值bestfval场的optimValues结构。如果该值不低于之前的最佳值,则绘图函数将连续调用的次数加1,没有改进,并绘制条形图。如果该值低于之前的最佳值,plot函数将在图中开始一个值为1的新柱状图。在绘图之前,绘图函数对连续调用的次数取对数。对数有助于保持绘图清晰,因为有些值可能比其他值大得多。

若要使用嵌套函数而不是持久变量存储本地结果,请参阅嵌套输出函数的示例(MATLAB)。

  1. 写出目标函数:

    函数f = sawtoothxy(x,y) [t r] = cart2pol(x,y);极坐标h = cos(2*t - 1/2)/2 + cos(t) + 2;g = (sin (r) -罪(2 * r) / 2 +罪(3 * r) / 3 -罪(4 * r) / 4 + 4)…。* r。^ 2. / (r + 1);f = g。* h;
  2. sawtoothxy.m作为您的MATLAB的文件夹中文件®路径。

  3. 编写plot函数:

    功能停止= NumberToNextBest(optimValues,状态)持续bestfv bestcounter停止= FALSE;开关状态的情况下为“init”%初始化变量来记录最好的函数值。bestfv = [];%初始化计数器%的本地求解器的记录编号运行到查找下一个最好的最小值。bestcounter = 1;%创建直方图。巴(日志(bestcounter), '标签', 'NumberToNextBest');xlabel(“新的最佳FVAL的数量”);ylabel(“本地解算器的日志编号运行”);标题(“本地解算器的运行次数,查找下最小”)的情况下“ITER”%查找含有该直方图中的轴。 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
  4. NumberToNextBest.m作为MATLAB路径中文件夹中的一个文件。

  5. 创建问题的结构和全球求解。设定下限(3 e3, 4 e3)的上限[4e3,3e3]并设置全局求解器使用plot函数:

    问题= createOptimProblem (“fmincon”,…“客观”,@ (x) sawtoothxy (x (1), (2)),…x0,(100、-50),“磅”,[3 e3 4 e3],……乌兰巴托,[4 e3, 3 e3],“选项”,…optimoptions (@fmincon、“算法”、“sqp”));女士= MultiStart (PlotFcn, {@NumberToNextBest, @gsplotbestf});
  6. 为100个本地求解器运行全球求解器:

    [X,FV] =运行(MS,问题,100);
  7. 该地块功能产生如下图(您的结果可能有所不同,因为该解决方案的过程是随机的):

没有平行绘图函数

MultiStart可以并行运行,它不支持全局输出函数和绘图函数并行。万博1manbetx此外,当本地输出函数和绘图函数在workers上运行时MultiStart在平行运行,效果不同于连续运行。工人运行时,本地输出和打印功能不创建一个显示。你看不到的输出和打印功能的任何其他效果,直到工人将它的结果给客户端(的鼻祖MultiStart并行工作)。

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

相关话题