6个求解器的比较

函数优化

这个例子展示了如何用六个求解器最小化Rastrigin函数。每个求解器都有自己的特点。这些特征导致了不同的解决方案和运行时间。金宝搏官方网站结果,在检查中比较语法和解决方案金宝搏官方网站,可以帮助你为自己的问题选择合适的解决方案。

Rastrigin函数有多个局部极小值,在(0,0)处有一个全局极小值:

xgydF4y2Ba 20. + xgydF4y2Ba 1 2 + xgydF4y2Ba 2 2 10 因为 2 π xgydF4y2Ba 1 + 因为 2 π xgydF4y2Ba 2

通常你不知道目标函数的全局最小值的位置。为了展示解算器如何寻找全局解,这个例子从这个点周围的所有解算器开始(20、30),这远未达到全球最低水平。

Restriginsfcn.m.文件实现Rastrigin的功能。这个文件配有全局优化工具箱软件这个例子使用了拉斯特里金函数的一个缩放版本,带有更大的吸引盆。信息,请参阅盆地的吸引力

rf2 = @ (x) rastriginsfcn (x / 10);

生成图形的代码

这个例子最小化rf2使用的默认设置fminunc(优化工具箱™求解器),patternsearch,GlobalSearch.这个例子还使用了遗传算法particleswarm使用非默认选项从点周围的初始填充开始(20、30).因为surrogateopt需要有限界,例子使用surrogateopt下限-70和上界130在每一个变量。

六个解决方法

fminunc

解决优化问题,使用fminunc优化工具箱求解器,输入:

rf2 = @ (x) rastriginsfcn (x / 10);% objective x0 = [20,30];%起始点远离最小值[xf,ff,flf,of] = fminunc(rf2,x0)

fminunc返回

局部最小值。优化完成,因为梯度的大小小于默认值的功能公差。xf = 19.8991 29.8486 ff = 12.9344 flf = 1 of = struct with fields: iterations: 3 funcCount: 15 stepsize: 1.7776e-06 lssteplength: 1 firstorderopt: 5.9907e-09 algorithm: '拟牛顿' message: 'Local minimum found....'
  • xf是最小化点。

  • ff是目标的价值,rf2,在xf

  • flf是退出标志。的退出标志1表明xf是局部最小值。

  • 是输出结构,哪个描述了fminunc计算导致解决方案。

patternsearch

解决优化问题,使用patternsearch全局优化工具箱解算器,输入:

rf2 = @ (x) rastriginsfcn (x / 10);% objective x0 = [20,30];[xp,fp,flp,op] = patternsearch(rf2,x0)

patternsearch返回

优化终止:网孔尺寸小于选项。网孔公差。flp xp = 19.8991 -9.9496 fp = 4.9748 = 1 op =结构体字段:功能:@ (x) rastriginsfcn (x / 10) problemtype:“无约束”pollmethod:“gpspositivebasis2n”maxconstraint: [] searchmethod:[]迭代:48 funccount: 174 meshsize: 9.5367 e-07 rngstate: [1 x1 struct]信息:“优化终止:网格大小小于options.MeshTolerance。”
  • xp是最小化点。

  • 《外交政策》是目标的价值,rf2,在xp

  • 隔爆是退出标志。的退出标志1表明xp是局部最小值。

  • op.是输出结构,哪个描述了patternsearch计算导致解决方案。

遗传算法

解决优化问题,使用遗传算法全局优化工具箱解算器,输入:

RNG default % for重现性rf2 = @(x)rastriginsfcn(x/10);% objective x0 = [20,30];% start point away from the minimum initpop = 10*randn(20,2) + repmat(x0,20,1);选择= optimoptions(“遗传算法”,“InitialPopulationMatrix”,initpop);(xga fga、flga简称oga] = ga (rf2 2 ,[],[],[],[],[],[],[], 选择)

initpop是一个20 × 2矩阵。每一行的initpop也意味着(20、30),每个元素均为正态分布,且具有标准差10.行的行initpop形成初始总体矩阵遗传算法解算器。

选择是否设置了选项initpop作为初始人口。

最后一行调用遗传算法,使用选项。

遗传算法使用随机数字,并产生随机结果。在这种情况下遗传算法返回:

优化终止:超过了最大代数。xga = -0.0042 -0.0024 fga = 4.7054e-05 flga = 0 oga = struct with fields: problemtype: 'unconstrained' rngstate: [1×1 struct] generations: 200 funccount: 9453 message: '优化终止:最大代数超过。“maxconstraint: []
  • xga是最小化点。

  • fga是目标的价值,rf2,在xga

  • flga是退出标志。的退出标志0表示遗传算法达到函数计算极限或迭代极限。在这种情况下,遗传算法达到迭代的极限。

  • 简称oga是输出结构,哪个描述了遗传算法计算导致解决方案。

particleswarm

就像遗传算法particleswarm是一种基于人群的算法。因此,为了公平地比较求解器,初始化粒子群为相同的种群遗传算法

RNG default % for重现性rf2 = @(x)rastriginsfcn(x/10);% objective opts = optimoptions('particleswarm','InitialSwarmMatrix',initpop);[xpso,单点、flgpso opso] = particleswarm (rf2 2[][],选择)
优化结束:最后一个options的目标值中的相对变化.maxstallerations迭代率小于options.functionTolectance。xpso = 9.9496 0.0000 fpso = 0.9950 flgpso = 1 opso =带字段的结构:rngstate:[1×1 struct]迭代:56 funccount:1140消息:'优化结束:目标值中的相对变化¶最后一个options.maxstallitions迭代少于选项。功能。'
  • xpso是最小化点。

  • 单点是目标的价值,rf2,在xpso

  • flgpso是退出标志。的退出标志1表明xpso是局部最小值。

  • opso.是输出结构,哪个描述了particleswarm计算导致解决方案。

surrogateopt

surrogateopt不需要起点,但需要有限的界限。在每个组件中设置-70到130的边界。要获得与其他求解器相同的输出类型,请禁用默认plot函数。

RNG default % for重现性lb = [-70,-70];乌兰巴托= [130130];rf2 = @ (x) rastriginsfcn (x / 10);% objective opts = optimoptions('surrogateopt','PlotFcn',[]);[xsur, fsur flgsur osur] = surrogateopt (rf2、磅、乌兰巴托、选择)
Surrogateopt停止是因为它超过了'options. maxfunctionevalues'设置的函数计算限制。xsur = -0.0033 0.0005 fsur = 2.2456e-05 flgsur = 0 osur = struct with fields: elapsedtime: 2.3877 funccount: 200 rngstate: [1×1 struct] message: 'Surrogateopt stopped because it exceeded the function evaluation set by↵'options. maxfunctionevalues '.'
  • xsur是最小化点。

  • fsur是目标的价值,rf2,在xsur

  • flgsur是退出标志。的退出标志0表示surrogateopt因为耗尽了功能计算或时间而停止。

  • osur是输出结构,哪个描述了surrogateopt计算导致解决方案。

GlobalSearch

解决优化问题,使用GlobalSearch解算器,输入:

rf2 = @ (x) rastriginsfcn (x / 10);% objective x0 = [20,30];% start point away from the minimum problem = createOptimProblem('fmincon','objective',rf2,…x0, x0);gs = GlobalSearch;[xg, fg,焦距,噩]=运行(gs、问题)

问题是一个优化问题结构。问题指定了fmincon解算器,rf2目标函数,x0 =(20、30).有关使用的更多信息createOptimProblem,请参阅创建问题结构

请注意

您必须指定fmincon作为求解器GlobalSearch,即使是不受约束的问题。

gs是默认值GlobalSearch对象。对象包含用于解决问题的选项。调用运行(GS,问题)运行问题从多个起点开始。起点是随机的,所以下面的结果也是随机的。

在这种情况下,运行返回:

GlobalSearch停止了搜索,因为它分析了所有的测试点。所有10个本地解算器运行汇聚为一个正的本地解算器退出标志。xg = 1.0e-07 * -0.1405 -0.1405 fg = 0 flg = 1 og = struct with fields: funcCount: 2350 localSolverTotal: 10 localSolverSuccess: 10 localSolverIncomplete: 0 localSolverNoSolution: 0↵↵所有10个本地求解器运行收敛与一个正的本地求解器退出标志。
  • xg是最小化点。

  • 成品是目标的价值,rf2,在xg

  • 焦距是退出标志。的退出标志1显示所有fmincon运行正常融合。

  • og.是输出结构,哪个描述了GlobalSearch计算导致解决方案。

比较语法和解决方案金宝搏官方网站

如果其目标函数值小于另一个解决方案,则一个解决方案优于另一个解决方案。下表总结了结果,准确到十进制。

结果 fminunc patternsearch 遗传算法 particleswarm surrogateopt GlobalSearch
解决方案 (19.9 - 29.9) (19.9 - -9.9) [0 0] (10 0) [0 0] [0 0]
客观的 12.9 5 0 1 0 0
#函数宏指令 15 174 9453 1140 200 2178

这些结果是典型的:

  • fminunc快速到达其起始盆地内的局部解决方案,但根本不探索这个盆地以外。fminunc具有简单的调用语法。

  • patternsearch需要更多的函数计算fminunc,并在多个盆地中搜索,得到比fminunc.的patternsearch调用语法与之相同fminunc

  • 遗传算法需要更多的函数计算patternsearch.它偶然找到了一个更好的解决方案。在这种情况下,遗传算法找到一个接近全局最优的点。遗传算法是随机的,所以它的结果随每次运行而变化。遗传算法有一个简单的调用语法,但是有额外的步骤使初始填充靠近(20、30)

  • particleswarm采用比遗传算法,但不止于patternsearch.在这种情况下,particleswarm找到目标函数值低于patternsearch,但高于遗传算法.因为particleswarm是随机的,其结果随每次运行而变化。particleswarm有一个简单的调用语法,但是有额外的步骤使初始填充靠近(20、30)

  • surrogateopt当达到函数求值极限时停止,对于双变量问题,默认值是200。surrogateopt具有简单的调用语法,但需要有限的边界。surrogateopt试图找到一个全球性的解决方案,在这种情况下成功了。每个函数在surrogateopt比其他解算器花的时间要长,因为surrogateopt作为其算法的一部分,执行许多辅助计算。

  • GlobalSearch运行取与函数计算相同的数量级遗传算法particleswarm,搜索了许多盆地,得出了一个很好的解决方案。在这种情况下,GlobalSearch找到了全局最优。设置GlobalSearch比设置其他解算器更复杂。如示例所示,在调用之前GlobalSearch,您必须创建一个GlobalSearch对象(gs在本例中),以及一个问题结构(问题).然后,你打电话运行方法gs问题.有关如何运行的详细信息GlobalSearch,请参阅工作流的全球搜索和多开始

相关话题