主要内容

六种求解器的比较

函数优化

这个例子展示了如何用六个解算器最小化拉斯特里金函数。每个求解器都有自己的特点。这些特性导致不同的解决方案和运行时间。万博 尤文图斯结果,在检查比较语法和解决方案万博 尤文图斯,可以帮助您为自己的问题选择一个合适的解决方案。

Rastrigin函数有许多局部极小值,全局极小值为(0,0):

Ras ( xgydF4y2Ba ) = 20 + xgydF4y2Ba 1. 2. + xgydF4y2Ba 2. 2. 10 ( 因为 2. π xgydF4y2Ba 1. + 因为 2. π xgydF4y2Ba 2. )

通常你不知道目标函数的全局最小值的位置。为了显示解算器如何查找全局解,此示例将围绕点启动所有解算器[20,30]这个数字远低于全球最低水平。

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

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

生成图形的代码

这个例子最小化rf2使用的默认设置fminunc(一个优化工具箱™求解器),patternsearch,全球研究. 该示例还使用ga粒子热使用非默认选项,以点附近的初始填充开始[20,30]因为surrogateopt需要有限的边界,示例使用surrogateopt下界为-70和上界130在每个变量中。

六种解法

fminunc

用。求解最优化问题fminunc优化工具箱解算器,输入:

rf2=@(x)rastriginsfcn(x/10);%的目标x0=[20,30];离最小值%的起点(xf, ff, flf] = fminunc (x0 rf2)

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 firstderopt: 5.9907e-09 algorithm: '拟牛顿' message: 'Local minimum found....'
  • xf这是最小化点。

  • ff是目标的价值,rf2xf

  • flf是退出标志。的退出标志1.表明xf这是当地的最低标准。

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

patternsearch

用。求解最优化问题patternsearch全局优化工具箱求解器,输入:

rf2=@(x)rastriginsfcn(x/10);%的目标x0=[20,30];离最小值%的起点[xp,fp,flp,op]=patternsearch(rf2,x0)

patternsearch返回

优化终止:网格大小小于options.MeshTolerance。xp=19.8991-9.9496 fp=4.9748 flp=1 op=struct带字段:function:@(x)rastriginsfcn(x/10)problemtype:“unconstrated”pollmethod:“gpspositivebasis2n”maxconstraint:[]searchmethod:[]迭代次数:48次函数计数:174网格大小:9.5367e-07 rngstate:[1x1结构]消息:“优化终止:网格大小小于选项。MeshTolerance。”
  • xp这是最小化点。

  • 计划生育是目标的价值,rf2xp

  • flp是退出标志。的退出标志1.表明xp这是当地的最低标准。

  • 人事处输出结构描述了patternsearch计算导致解决方案。

ga

用。求解最优化问题ga全局优化工具箱求解器,输入:

rng违约%为了再现性rf2=@(x)rastriginsfcn(x/10);%的目标x0=[20,30];离最小值%的起点Initpop = 10*randn(20,2) + repmat(x0,20,1);opts=options(“遗传算法”,“初始填充矩阵”, initpop);(xga fga、flga简称oga] = ga (rf2 2 ,[],[],[],[],[],[],[], 选择)

initpop是一个20乘2的矩阵。每行initpop也意味着[20,30],且各元素均为标准差正态分布10.的行initpop的初始总体矩阵ga解算器。

选择设置的选项是否正确initpop作为初始总体。

最后一行是电话ga,使用选项。

ga使用随机数,并产生一个随机结果。在这种情况下ga返回:

优化终止:超过了最大代数。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是目标的价值,rf2xga

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

  • 简称oga输出结构描述了ga计算导致解决方案。

粒子热

就像ga,粒子热是一个基于群体的算法。因此,为了公平比较求解器,将粒子群初始化为与ga

rng违约%为了再现性rf2=@(x)rastriginsfcn(x/10);%的目标opts=options(“particleswarm”,“InitialSwarmMatrix”,initpop);[xpso、fpso、flgpso、opso]=粒子温(rf2,2、[]、[]、opts)
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。xpso = 9.9496 0.0000 fpso = 0.9950 flgpso = 1 opso = struct with fields: rngstate: [1×1 struct] iterations: 56 funccount: 1140 message: 'Optimization ended: relative change in the objective value↵over the last OPTIONS. xpso = 9.9496 0.0000 fpso = 0.9950 flgpso = 1 opso = struct with fields:MaxStallIterations迭代小于options . functional tolerance。
  • xpso这是最小化点。

  • 浮式生产储油船是目标的价值,rf2xpso

  • flgpso是退出标志。的退出标志1.表明xpso这是当地的最低标准。

  • opso输出结构描述了粒子热计算导致解决方案。

surrogateopt

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

rng违约%为了再现性磅=(-70、-70);乌兰巴托= [130130];rf2=@(x)rastriginsfcn(x/10);%的目标opts=options(“surrogateopt”,“PlotFcn”,[]); [xsur、fsur、flgsur、osur]=替代选项(rf2、lb、ub、opts)
已停止代理选项,因为它超出了“options.MaxFunctionEvaluations”设置的函数计算限制。xsur=-0.0033 0.0005 fsur=2.2456e-05 flgsur=0 osur=struct,字段为:elapsedtime:2.3877 funccount:200 rngstate:[1×1 struct]消息:“已停止代理选项,因为它超出了由设置的函数计算限制。”↵'选项。MaxFunctionEvaluations''
  • xsur这是最小化点。

  • fsur是目标的价值,rf2xsur

  • flgsur是退出标志。的退出标志0表明surrogateopt由于函数求值或时间不足而暂停。

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

全球研究

用。求解最优化问题全球研究求解器,输入:

rf2=@(x)rastriginsfcn(x/10);%的目标x0=[20,30];离最小值%的起点problem=createoptim问题(“fmincon”,“目标”rf2,...“x0”, x0);gs = GlobalSearch;[xg, fg,焦距,噩]=运行(gs、问题)

问题是一个优化问题结构。问题指定铁铬镍铁合金解算器,rf2目标函数,x0=[20,30]。有关使用createOptimProblem看见创建问题结构

笔记

您必须指定铁铬镍铁合金作为求解器全球研究,即使对于无约束问题也是如此。

gs是一个默认全球研究对象。对象包含解决问题的选项。调用运行(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 message: 'GlobalSearch停止,因为它分析了所有试验点。↵↵所有10个本地求解器的运行都以一个正的本地求解器退出标志汇合。
  • xg这是最小化点。

  • 前景是目标的价值,rf2xg

  • flg是退出标志。的退出标志1.表示所有铁铬镍铁合金正常运行聚合。

  • 输出结构描述了全球研究计算导致解决方案。

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

如果一个解的目标函数值小于另一个解,则该解优于另一个解。下表总结了结果,精确到一个小数。

结果 fminunc patternsearch ga 粒子热 surrogateopt 全球研究
解决方案 (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

  • ga需要的函数求值比patternsearch.偶然地,它找到了一个更好的解决办法。在这种情况下,ga找到一个接近全局最优的点。ga是随机的,因此每次运行的结果都会发生变化。ga有一个简单的调用语法,但有额外的步骤有一个初始填充附近[20,30]

  • 粒子热进行的函数求值少于ga,但超过patternsearch.在这种情况下,粒子热找到目标函数值低于目标函数值的点patternsearch,但高于ga因为粒子热是随机的,其结果随每次运行而变化。粒子热有一个简单的调用语法,但有额外的步骤有一个初始填充附近[20,30]

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

  • 全球研究函数求值的数量级与ga粒子热,搜索了许多盆地,找到了一个很好的解决方案。在这种情况下,全球研究找到全局最优。设置全球研究比设置其他解算器更复杂。如示例所示,在调用之前全球研究,则必须同时创建全球研究反对(gs在本例中),以及问题结构(问题).然后,你打电话给方法gs问题. 有关如何运行的详细信息,请参阅全球研究看见GlobalSearch和MultiStart的工作流

相关的话题