主要内容

GlobalSearch和MultiStart的输出函数

什么是输出函数?

输出函数允许您检查优化中的中间结果。此外,它们允许您以编程方式停止求解器。

有两种类型的输出函数,例如输出结构

  • 全局输出函数在每个局部求解器运行后运行。它们也在全局求解器开始和结束时运行。

  • 局部输出函数在局部求解器的每次迭代之后运行。看到优化工具箱的输出函数

使用全局输出函数:

  • 使用中描述的语法编写输出函数OutputFcn

  • 设置OutputFcn你的属性GlobalSearchMultiStart解算器到输出函数的函数句柄。属性可以使用多个输出函数OutputFcn属性设置为函数句柄的单元格数组。

GlobalSearch输出函数

这个输出函数停止GlobalSearch在它找到五个不同的带有正退出标志的局部最小值之后,或者在它找到一个小于的局部最小值之后0.5.输出函数使用一个持久的局部变量,foundLocal,以存储本地结果。foundLocal允许输出函数确定本地解决方案是否不同于其他解决方案,以达到1的军医

要使用嵌套函数而不是持久变量存储局部结果,请参见嵌套输出函数的示例

  1. 使用中描述的语法编写输出函数OutputFcn

    function stop = StopAfterFive(optimValues, state) persistent foundLocal stop = false;switch state case 'init' foundLocal = [];%初始化为空的情况'iter' newf = optimValues.localsolution.Fval;eflag = optimValues.localsolution.Exitflag;%现在检查退出标志是否为正数,并且新值与其他值至少相差1e-4 %如果是,如果eflag > 0 && all(abs(newf - foundLocal) > 1e-4) foundLocal = [foundLocal;newf];如果有,则停止,如果foundLocal(end) < 0.5 || length(foundLocal) >= 5 stop = true;结束结束结束
  2. 保存StopAfterFive.m作为MATLAB文件夹中的一个文件®路径。

  3. 写出目标函数并创建一个优化问题结构,如寻找全局或多个局部极小值

    函数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;结束
  4. 保存sawtoothxy.m作为MATLAB路径中的一个文件夹中的文件。

  5. 在命令行中,创建问题结构:

    问题= createOptimProblem(“fmincon”,…“客观”,@ (x) sawtoothxy (x(1),(2)),…x0,(100、-50),“选项”,…optimoptions (@fmincon、“算法”、“sqp”));
  6. 创建一个GlobalSearch对象与@StopAfterFive作为输出函数,并将迭代显示属性设置为“通路”

    @StopAfterFive gs = GlobalSearch(“OutputFcn”,“显示”,“iter”);
  7. (可选)若要获得与本例相同的答案,请设置默认随机数流。

    rng违约
  8. 运行问题。

    [x,fval] = run(gs,problem) Num Pts最佳电流阈值Local Local Analyzed f -count f(x) Penalty Penalty f(x) exitflag2个本地求解器中有1个在本地求解器退出标志为正的情况下运行。X = 0.0414 * 0.1298 fval = 1.5467e-15

跑得早是因为GlobalSearch找到一个函数值小于的点0.5

无并行输出函数

MultiStart可以并行运行,它不支持全局输出函数和绘图函数并行运行。金宝app此外,当本地输出函数和plot函数运行在工人MultiStart并行运行,其效果不同于连续运行。当在工人上运行时,本地输出和plot函数不会创建显示。在工作人员将其结果传递给客户端之前,您不会看到输出和绘图函数的任何其他影响MultiStart并行工作)。

查阅有关跑步的资料MultiStart同时,看到并行计算

相关的话题