这个例子说明了GydF4y2BaGlobalsearch.GydF4y2Ba
有效地查找全球最小值,以及如何GydF4y2Ba多层的GydF4y2Ba
找到更多的本地最小值。GydF4y2Ba
此示例的目标函数具有许多本地最小值和唯一的全局最小值。在极性坐标中,功能是GydF4y2Ba
FGydF4y2Ba(GydF4y2BaR.GydF4y2Ba那GydF4y2BaT.GydF4y2Ba)=GydF4y2BaGGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)GydF4y2BaHGydF4y2Ba(GydF4y2BaT.GydF4y2Ba),GydF4y2Ba
在哪里GydF4y2Ba
全局最低限度是GydF4y2BaR.GydF4y2Ba= 0.GydF4y2Ba,目标函数为0。这个函数GydF4y2BaGGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)近似线性增长GydF4y2BaR.GydF4y2Ba,呈重复的锯齿状。这个函数GydF4y2BaHGydF4y2Ba(GydF4y2BaT.GydF4y2Ba)有两个当地最小值,其中一个是全球性的。GydF4y2Ba
编写函数文件以计算目标:GydF4y2Ba
功能f =锯齿(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;结尾GydF4y2Ba
创建问题结构。使用GydF4y2Ba“sqp”GydF4y2Ba
算法GydF4y2Ba粉刺GydF4y2Ba
:GydF4y2Ba
问题= createOptimproblem('fmincon',...'目标',@(x)sawtoothxy(x(1),x(2)),...'x0',[100,-50],'选项',...优化(@ Fmincon,'算法','SQP','显示','OFF'));GydF4y2Ba
起点是GydF4y2Ba[100,-50]GydF4y2Ba
代替GydF4y2Ba(0,0)GydF4y2Ba
, 所以GydF4y2BaGlobalsearch.GydF4y2Ba
不在全球解决方案中启动。GydF4y2Ba
通过运行验证问题结构GydF4y2Ba粉刺GydF4y2Ba
:GydF4y2Ba
[x,fval] = fmincon(problem) x = 45.7332 -107.6469 fval = 555.5422GydF4y2Ba
创建GydF4y2BaGlobalsearch.GydF4y2Ba
对象,并设置迭代显示:GydF4y2Ba
gs = GlobalSearch(“显示”、“iter”);GydF4y2Ba
运行解决:GydF4y2Ba
RNG(14,'Twister')%用于再现性[x,fval] = run(gs,问题)num pts最佳电流阈值本地分析f(x)罚款罚款f(x)ExitFlag过程0 200 555.5 555.50初始点200 1463 1.547E-15 1.547E-15 1阶段1本地300 1564 1.547E-15 5.858E + 04 1.074阶段2搜索400 1664 1.547E-15 1.84E + 05 4.16阶段2搜索500 1764 1.547E-15 2.683e+04 11.84 Stage 2 Search 600 1864 1.547e-15 1.122e+04 30.95 Stage 2 Search 700 1964 1.547e-15 1.353e+04 65.25 Stage 2 Search 800 2064 1.547e-15 6.249e+04 163.8 Stage 2 Search 900 2164 1.547e-15 4.119e+04 409.2 Stage 2 Search 950 2356 1.547e-15 477 589.7 387 2 Stage 2 Local 952 2420 1.547e-15 368.4 477 250.7 2 Stage 2 Local 1000 2468 1.547e-15 4.031e+04 530.9 Stage 2 Search GlobalSearch stopped because it analyzed all the trial points. 3 out of 4 local solver runs converged with a positive local solver exit flag. x = 1.0e-07 * 0.0414 0.1298 fval = 1.5467e-15
你可以得到不同的结果,因为GydF4y2BaGlobalsearch.GydF4y2Ba
是随机的。GydF4y2Ba
求职者发现了三个局部最小值,它发现全局最小值GydF4y2Ba(0,0)GydF4y2Ba
.GydF4y2Ba
编写函数文件以计算目标:GydF4y2Ba
功能f =锯齿(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;结尾GydF4y2Ba
创建问题结构。使用GydF4y2BaFminunc.GydF4y2Ba
求助者与GydF4y2Ba算法GydF4y2Ba
选项设置为GydF4y2Ba“拟牛顿”GydF4y2Ba
.这些选择的原因是:GydF4y2Ba
问题是不受约束的。所以,GydF4y2BaFminunc.GydF4y2Ba
是合适的解决者;看GydF4y2Ba优化决策表GydF4y2Ba.GydF4y2Ba
默认的GydF4y2BaFminunc.GydF4y2Ba
算法需要梯度;看GydF4y2Ba选择算法GydF4y2Ba.因此,设置GydF4y2Ba算法GydF4y2Ba
至GydF4y2Ba“拟牛顿”GydF4y2Ba
.GydF4y2Ba
问题= createOptimprobrom('fminunc',...'目标',@(x)sawtoothxy(x(1),x(2)),...'x0',[100,-50],'选项',... Optimoptions(@ Fminunc,'算法','准牛顿','显示','关闭'));GydF4y2Ba
通过运行它来验证问题结构:GydF4y2Ba
[x,fval] = fminunc(problem) x = 1.7533 -111.9488 fval = 577.6960GydF4y2Ba
创建默认值GydF4y2Ba多层的GydF4y2Ba
对象:GydF4y2Ba
女士= MultiStart;GydF4y2Ba
运行求解器50次迭代,录制本地最小值:GydF4y2Ba
%rng(1)%取消注释获得相同的结果[x,fval,eflag,输出,manymins] =运行(ms,问题,50)multiStart从起点完成了一些运行。50个本地求解器中的9个运行融合了正本地求解器出口标志。x = -142.4608 406.8030 fval = 1.2516e + 03 eflag = 2输出= struct with字段:funccount:8586 localsolvertotal:50 localsolversuccess:9 localsolverincomplete:41 localsolvernosolution:0消息:'multiStart从起点完成了一些运行。↵9在50个本地求解器中融合的统一用正本地求解器出口标志。Monymins = 1×9 globalOptimsolution阵列具有属性:x FVAL EXITFLAG输出X0GydF4y2Ba
你可以得到不同的结果,因为GydF4y2Ba多层的GydF4y2Ba
是随机的。GydF4y2Ba
求解器没有在附近找到全局最小值GydF4y2Ba(0,0)GydF4y2Ba
.它发现了10个不同的局部最小值。GydF4y2Ba
绘制本地最小值的函数值:GydF4y2Ba
直方图([Manymins.fval],10)GydF4y2Ba
绘制三个最佳点数的函数值:GydF4y2Ba
bestf = [manymins.fval];直方图(BESTF(1:3),10)GydF4y2Ba
多层的GydF4y2Ba
开始GydF4y2BaFminunc.GydF4y2Ba
从起始点使用均匀分布在-1000和1000之间的组件。GydF4y2BaFminunc.GydF4y2Ba
经常陷入许多局部极小值之一。GydF4y2BaFminunc.GydF4y2Ba
超过其迭代限制或函数求值限制40次。GydF4y2Ba