主要内容GydF4y2Ba

查找全局或多个本地最小值GydF4y2Ba

函数优化GydF4y2Ba

这个例子说明了GydF4y2BaGlobalsearch.GydF4y2Ba有效地查找全球最小值,以及如何GydF4y2Ba多层的GydF4y2Ba找到更多的本地最小值。GydF4y2Ba

此示例的目标函数具有许多本地最小值和唯一的全局最小值。在极性坐标中,功能是GydF4y2Ba

FGydF4y2Ba(GydF4y2BaR.GydF4y2Ba那GydF4y2BaT.GydF4y2Ba)=GydF4y2BaGGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)GydF4y2BaHGydF4y2Ba(GydF4y2BaT.GydF4y2Ba),GydF4y2Ba

在哪里GydF4y2Ba

GGydF4y2Ba (GydF4y2Ba R.GydF4y2Ba )GydF4y2Ba =GydF4y2Ba (GydF4y2Ba 罪GydF4y2Ba (GydF4y2Ba R.GydF4y2Ba )GydF4y2Ba -GydF4y2Ba 罪GydF4y2Ba (GydF4y2Ba 2GydF4y2Ba R.GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba +GydF4y2Ba 罪GydF4y2Ba (GydF4y2Ba 3.GydF4y2Ba R.GydF4y2Ba )GydF4y2Ba 3.GydF4y2Ba -GydF4y2Ba 罪GydF4y2Ba (GydF4y2Ba 4.GydF4y2Ba R.GydF4y2Ba )GydF4y2Ba 4.GydF4y2Ba +GydF4y2Ba 4.GydF4y2Ba )GydF4y2Ba R.GydF4y2Ba 2GydF4y2Ba R.GydF4y2Ba +GydF4y2Ba 1GydF4y2Ba HGydF4y2Ba (GydF4y2Ba T.GydF4y2Ba )GydF4y2Ba =GydF4y2Ba 2GydF4y2Ba +GydF4y2Ba 因为GydF4y2Ba (GydF4y2Ba T.GydF4y2Ba )GydF4y2Ba +GydF4y2Ba 因为GydF4y2Ba (GydF4y2Ba 2GydF4y2Ba T.GydF4y2Ba -GydF4y2Ba 1GydF4y2Ba 2GydF4y2Ba )GydF4y2Ba 2GydF4y2Ba .GydF4y2Ba

全局最低限度是GydF4y2BaR.GydF4y2Ba= 0.GydF4y2Ba,目标函数为0。这个函数GydF4y2BaGGydF4y2Ba(GydF4y2BaR.GydF4y2Ba)近似线性增长GydF4y2BaR.GydF4y2Ba,呈重复的锯齿状。这个函数GydF4y2BaHGydF4y2Ba(GydF4y2BaT.GydF4y2Ba)有两个当地最小值,其中一个是全球性的。GydF4y2Ba

生成图形的代码GydF4y2Ba

通过GlobalSearch单一全局最低限度GydF4y2Ba

  1. 编写函数文件以计算目标: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
  2. 创建问题结构。使用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

  3. 通过运行验证问题结构GydF4y2Ba粉刺GydF4y2Ba:GydF4y2Ba

    [x,fval] = fmincon(problem) x = 45.7332 -107.6469 fval = 555.5422GydF4y2Ba
  4. 创建GydF4y2BaGlobalsearch.GydF4y2Ba对象,并设置迭代显示:GydF4y2Ba

    gs = GlobalSearch(“显示”、“iter”);GydF4y2Ba
  5. 运行解决: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

通过MultiStart实现多个局部最小值GydF4y2Ba

  1. 编写函数文件以计算目标: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
  2. 创建问题结构。使用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
  3. 通过运行它来验证问题结构:GydF4y2Ba

    [x,fval] = fminunc(problem) x = 1.7533 -111.9488 fval = 577.6960GydF4y2Ba
  4. 创建默认值GydF4y2Ba多层的GydF4y2Ba对象:GydF4y2Ba

    女士= MultiStart;GydF4y2Ba
  5. 运行求解器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

  6. 绘制本地最小值的函数值: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

相关的话题GydF4y2Ba