主要内容

GlobalSearch和MultiStart的输出函数

什么是输出函数?

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

有两种类型的输出函数,就像的两种类型输出结构

  • 全局输出函数在每次本地求解器运行后运行。它们还在全局求解器开始和结束时运行。

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

使用全局输出函数:

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

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

GlobalSearch输出函数

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

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

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

    函数停止= StopAfterFive(optimValues, state) persistent foundLocal停止= false;switch state case 'init' foundLocal = [];%初始化为空大小写'iter' newf = optimValues.localsolution.Fval;exitflag = optimValues.localsolution.Exitflag;%现在检查退出标志是否为正,并且%新值与所有其他值至少有1e- 4%的差异。如果是,将新值添加到newf列表if exitflag > 0 && all(abs(newf - foundLocal) > 1e-4) foundLocal = [foundLocal;newf];现在检查添加到foundLocal %的最新值是否小于1/2 %也检查在foundLocal %中是否有5个本地最小值如果是,则停止如果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分析f -count f(x) Penalty惩罚f(x) exitflag处理步骤0 200 555.5 555.5 0初始点200 1463 1.547e-15 1.547e-15 1阶段1局部全局搜索被输出或plot函数停止。2次本地求解器运行中有1次收敛于正向本地求解器出口标志。X = 1.0e-07 * 0.0414 0.1298 fval = 1.5467e-15

跑步提前停止了,因为GlobalSearch找到一个函数值小于的点0.5

无并行输出函数

MultiStart可以并行运行,它不支持全局输出函数和plot函数并行运行。此外,当局部输出函数和plot函数在工作者上运行时MultiStart并行运行,效果不同于串行运行。本地输出和plot函数在工作上运行时不创建显示。在工作程序将其结果传递给客户端(函数的发起者)之前,您看不到输出和绘图函数的任何其他效果MultiStart并行工作)。

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

相关的话题

Baidu
map