比较六解决者
函数优化
这个例子展示了如何最小化Rastrigin与六个解决的功能。每个解决者都有自己的特点。导致不同的解决方案和运行时的特征。金宝搏官方网站结果,检查,可以帮助你选择一个适当的解决自己的问题。
Rastrigin的功能有很多局部最小值,与全球最低(0,0)。函数被定义为 :
的rastriginsfcn.m
Rastrigin文件,该计算值的函数,当您运行这个示例。这个例子使用一个按比例缩小的版本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”)
通常,你不知道全球最低的位置你的目标函数。展示如何解决寻找全球性的解决方案,解决这个例子开始所有的点(20、30),这是全球最低。
这个例子最小化rf2
使用默认设置fminunc
(优化工具箱™解算器),patternsearch
,GlobalSearch
。这个示例还使用遗传算法
和particleswarm
非默认选项来从一个初始种群开始点(20、30)
。因为surrogateopt
需要有限的界限,示例使用surrogateopt
130年与-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。
另请参阅
GlobalSearch
|patternsearch
|遗传算法
|surrogateopt
|particleswarm
|fminunc