主要内容

比较六解决者

函数优化

这个例子展示了如何最小化Rastrigin与六个解决的功能。每个解决者都有自己的特点。导致不同的解决方案和运行时的特征。万博 尤文图斯结果,检查,可以帮助你选择一个适当的解决自己的问题。

Rastrigin的功能有很多局部最小值,与全球最低(0,0)。函数被定义为 R 一个 年代 ( xgydF4y2Ba ) :

R 一个 年代 ( xgydF4y2Ba ) = 2 0 + xgydF4y2Ba 1 2 + xgydF4y2Ba 2 2 - - - - - - 1 0 ( 因为 2 π xgydF4y2Ba 1 + 因为 2 π xgydF4y2Ba 2 )

rastriginsfcn.mRastrigin文件,该计算值的函数,当您运行这个示例。这个例子使用一个按比例缩小的版本Rastrigin函数与大盆地的吸引力。信息,请参阅盆地的吸引力。创建一个扩展函数的曲面图。

rf2 = @ (x) rastriginsfcn (x / 10);rf3 = @ (x, y)重塑(rastriginsfcn ([x (:) / 10, y(:) / 10]),大小(x));fsurf (rf3 30 [-30],“ShowContours”,“上”)标题(“rastriginsfcn ([10 x / y / 10])”)包含(“x”)ylabel (“y”)

图包含一个坐标轴对象。与标题rastriginsfcn坐标轴对象([10 x / y / 10]),包含x, y ylabel包含functionsurface类型的一个对象。

通常,你不知道全球最低的位置你的目标函数。展示如何解决寻找全球性的解决方案,解决这个例子开始所有的点(20、30),这是全球最低。

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

六个解决方法

fminunc

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

rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 = (20、30);%起点距离最小(xf, ff, flf] = fminunc (x0 rf2)
局部最小值。优化完成因为梯度的大小小于最优值的宽容。
xf =1×219.8991 - 29.8486
ff = 12.9344
flf = 1
的=结构体字段:迭代:3 funcCount: 15 stepsize: 1.7776 e-06 lssteplength: 1 firstorderopt: 5.9907 e-09算法:“拟牛顿”的信息:“局部最小值发现....”
  • xf是减少一点。

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

  • flf出口标志。退出旗1表示xf是一个局部最小值。

  • 是输出结构,描述了吗fminunc计算解决方案。

patternsearch

解决优化问题使用patternsearch全局优化工具箱求解程序,输入:

rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 = (20、30);%起点距离最小(xp、fp、隔爆、op) = patternsearch (x0 rf2)
优化终止:网格大小小于options.MeshTolerance。
xp =1×219.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是一个局部最小值。

  • 人事处是输出结构,描述了吗patternsearch计算解决方案。

遗传算法

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

rng默认的%的再现性rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 = (20、30);%起点距离最小initpop = 10 * randn (20, 2) + repmat (x0, 20日1);选择= optimoptions (“遗传算法”,“InitialPopulationMatrix”,initpop);
  • initpop是一个20-by-2矩阵。每一行的initpop也意味着(20、30),每个元素是正态分布与标准偏差10。initpop形成一个初始种群矩阵的行为遗传算法解算器。

  • 选择设置的选项吗initpop初始种群。

  • 遗传算法使用随机数,并产生一个随机的结果。

  • 下一行调用遗传算法使用选项。

(xga fga、flga简称oga] = ga (rf2 2[]、[][],[],[],[],[],选择)
优化终止:超过了一代又一代的最大数目。
xga =1×2-0.0042 - -0.0024
fga = 4.7054 e-05
flga = 0
简称oga =结构体字段:problemtype:无约束的rngstate: [1 x1 struct]代:200 funccount: 9453信息:优化终止:超过了一代又一代的最大数目。“maxconstraint: [] hybridflag: []
  • xga是减少一点。

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

  • flga出口标志。退出旗(0)表示遗传算法达到一个函数迭代评估限制或限制。在这种情况下,遗传算法迭代达到极限。

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

particleswarm

就像遗传算法,particleswarm以人群为基础的算法。所以对于解决一个公平的比较,初始化粒子群相同的人口遗传算法

rng默认的%的再现性rf2 = @ (x) rastriginsfcn (x / 10);%的目标选择= optimoptions (“particleswarm”,“InitialSwarmMatrix”,initpop);[xpso,单点、flgpso opso] = particleswarm (rf2 2[][],选择)
优化结束:相对客观价值的变化在过去的选择。小于OPTIONS.FunctionTolerance MaxStallIterations迭代。
xpso =1×29.9496 - 0.0000
单点= 0.9950
flgpso = 1
opso =结构体字段:rngstate:(1 x1 struct)迭代:56 funccount: 1140信息:优化结束:相对客观价值的变化…“hybridflag: []

surrogateopt

surrogateopt不需要一个起点,但确实需要有限的范围。设置范围-70到130年的每个组件。有同样的输出作为另一解决,禁用默认的绘制函数。

rng默认的%的再现性磅= (-70、-70);乌兰巴托= [130130];rf2 = @ (x) rastriginsfcn (x / 10);%的目标选择= optimoptions (“surrogateopt”,“PlotFcn”[]);[xsur, fsur flgsur osur] = surrogateopt (rf2、磅、乌兰巴托、选择)
surrogateopt停止,因为它超过了设定的评价函数极限“options.MaxFunctionEvaluations”。
xsur =1×2-1.3383 - -0.3022
fsur = 3.5305
flgsur = 0
osur =结构体字段:elapsedtime: 8.1641 funccount: 200 constrviolation: 0 ineq: [1 x0双]rngstate: [1 x1 struct]信息:“surrogateopt停止,因为它超过了设定的评价函数极限……”
  • xsur是减少一点。

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

  • flgsur出口标志。退出旗(0)表示surrogateopt停止,因为它跑出函数评估或时间。

  • osur是输出结构,描述了吗surrogateopt计算解决方案。

GlobalSearch

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

rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 = (20、30);%起点距离最小问题= createOptimProblem (“fmincon”,“目标”rf2,“x0”,x0);gs = GlobalSearch;

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

请注意:你必须指定fmincon的解算器GlobalSearch,即使对无约束问题。

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

[xg, fg,焦距,噩]=运行(gs、问题)
GlobalSearch停止,因为所有审判点分析。当地所有6解算器运行聚合与当地一个积极解决退出旗。
xg =1×2107×-0.1405 - -0.1405
fg = 0
flg = 1
og =结构体字段:funcCount: 2157 localSolverTotal: 6 localSolverSuccess: 6 localSolverIncomplete: 0 localSolverNoSolution: 0消息:“GlobalSearch停止,因为它分析所有审判点....”
  • xg是减少一点。

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

  • 焦距出口标志。1表示所有的出口标志fmincon正常运行聚合。

  • 是输出结构,描述了吗GlobalSearch计算解决方案。

比较语法和解决方案万博 尤文图斯

一个解决方案是比另一个如果其目标函数值小于另一个。下表总结了结果。

溶胶= [xf;xp;xga;xpso;xsur;xg];fvals = [ff;《外交政策》;fga;单点; fsur; fg]; fevals = [of.funcCount; op.funccount; oga.funccount; opso.funccount; osur.funccount; og.funcCount]; stats = table(sols,fvals,fevals); stats.Properties.RowNames = [“fminunc”“patternsearch”“遗传算法”“particleswarm”“surrogateopt”“GlobalSearch”];stats.Properties。VariableNames = [“解决方案”“客观”“#函数宏指令”];disp(统计)
解决方案目标#函数宏指令__________________________ __________ ________ fminunc ga patternsearch 19.899 -9.9496 4.9748 19.899 29.849 12.934 174 -0.0042178 -0.0024347 4.7054 9453年e-05 particleswarm e-07 6.75 9.9496 0.99496 1140 surrogateopt -1.3383 -1.4046 -1.4046 -0.30217 3.5305 200 GlobalSearch e-08 e-08 0 2157

这些结果是典型的:

  • 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,请参阅工作流GlobalSearch和MultiStart

另请参阅

|||||

相关的话题