GlobalSearch和MultiStart的输出函数
什么是输出函数?
输出函数允许您检查优化中的中间结果。此外,它们允许您以编程方式暂停求解器。
有两种类型的输出函数,就像的两种类型输出结构:
全局输出函数在每次本地求解器运行后运行。它们还在全局求解器开始和结束时运行。
局部输出函数在局部求解器的每次迭代之后运行。看到优化工具箱的输出函数.
使用全局输出函数:
使用中描述的语法编写输出函数OutputFcn.
设置
OutputFcn
你的属性GlobalSearch
或MultiStart
求解器到输出函数的函数句柄。属性可以使用多个输出函数OutputFcn
属性设置为函数句柄的单元格数组。
GlobalSearch输出函数
输出函数停止GlobalSearch
在它找到五个具有正退出标志的不同局部最小值之后,或者在它找到一个小于的局部最小值之后0.5
.输出函数使用一个持久的局部变量,foundLocal
,以存储本地结果。foundLocal
允许输出函数确定本地解决方案是否与其他解决方案不同,误差范围为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;结束结束结束
保存
StopAfterFive.m
作为MATLAB文件夹中的一个文件®路径。写出目标函数并创建优化问题结构如查找全局或多个局部极小值.
函数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;结束
保存
sawtoothxy.m
作为MATLAB路径文件夹中的文件。在命令行中,创建问题结构:
问题= createOptimProblem(“fmincon”,…“客观”,@ (x) sawtoothxy (x(1),(2)),…x0,(100、-50),“选项”,…optimoptions (@fmincon、“算法”、“sqp”));
创建一个
GlobalSearch
对象与@StopAfterFive
作为输出函数,并将迭代显示属性设置为“通路”
.@StopAfterFive gs = GlobalSearch(“OutputFcn”,“显示”,“iter”);
(可选)若要得到与本例相同的答案,请设置默认的随机数流。
rng违约
运行问题。
[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
同时,看到并行计算.