这个例子展示了如何用六个解算器最小化拉斯特里金函数。每个求解器都有自己的特点。这些特性导致不同的解决方案和运行时间。金宝搏官方网站结果,在检查比较语法和解决方案金宝搏官方网站,可以帮助您为自己的问题选择一个合适的解决方案。
Rastrigin函数有许多局部极小值,在(0,0)处有一个全局极小值:
通常你不知道目标函数的全局最小值的位置。为了展示求解器是如何寻找全局解的,本示例将所有求解器围绕这一点启动(20、30)
这个数字远低于全球最低水平。
的rastriginsfcn.m
文件实现了Rastrigin的功能。这个文件全局优化工具箱软件这个例子使用了拉斯特里金函数的一个缩放版本,带有更大的吸引池。信息,请参阅盆地的吸引力.
rf2 = @ (x) rastriginsfcn (x / 10);
这个例子最小化rf2
使用的默认设置fminunc
(一个优化工具箱™求解器),patternsearch
,GlobalSearch
.这个例子还使用了遗传算法
和particleswarm
使用非默认选项,以点附近的初始填充开始(20、30)
.因为surrogateopt
需要有限的边界,这个例子使用surrogateopt
下界为-70年
的上界130
在每一个变量。
用。求解最优化问题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
是目标的价值,rf2
,在xf
.
flf
是退出标志。的退出标志1
表明xf
为局部最小值。
的
输出结构描述了fminunc
计算导致解决方案。
用。求解最优化问题patternsearch
全局优化工具箱解算器,输入:
rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 =(20、30);离最小值%的起点(xp、fp、隔爆、op) = patternsearch (x0 rf2)
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
为局部最小值。
人事处
输出结构描述了patternsearch
计算导致解决方案。
用。求解最优化问题遗传算法
全局优化工具箱解算器,输入:
rng默认的%的再现性rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 =(20、30);离最小值%的起点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
是一个基于群体的算法。因此,为了公平比较求解器,将粒子群初始化为与遗传算法
.
rng默认的%的再现性rf2 = @ (x) rastriginsfcn (x / 10);%的目标选择= optimoptions (“particleswarm”,“InitialSwarmMatrix”, initpop);[xpso,单点、flgpso opso] = particleswarm (rf2 2[][],选择)
优化结束:相对于上一个选项的目标值的变化。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
是最小值点。
单点
是目标的价值,rf2
,在xpso
.
flgpso
是退出标志。的退出标志1
表明xpso
为局部最小值。
opso
输出结构描述了particleswarm
计算导致解决方案。
surrogateopt
不需要起点,但需要有限的边界。在每个组件中设置-70到130的边界。要获得与其他求解器相同的输出类型,请禁用默认的plot函数。
rng默认的%的再现性磅=(-70、-70);乌兰巴托= [130130];rf2 = @ (x) rastriginsfcn (x / 10);%的目标选择= optimoptions (“surrogateopt”,“PlotFcn”[]);[xsur, fsur flgsur osur] = surrogateopt (rf2、磅、乌兰巴托、选择)
Surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。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 limit set by↵'
xsur
是最小值点。
fsur
是目标的价值,rf2
,在xsur
.
flgsur
是退出标志。的退出标志0
表明surrogateopt
停止,因为它耗尽了函数计算或时间。
osur
输出结构描述了surrogateopt
计算导致解决方案。
用。求解最优化问题GlobalSearch
解算器,输入:
rf2 = @ (x) rastriginsfcn (x / 10);%的目标x0 =(20、30);离最小值%的起点问题= createOptimProblem (“fmincon”,“目标”rf2,...“x0”, x0);gs = GlobalSearch;[xg, fg,焦距,噩]=运行(gs、问题)
问题
是一个优化问题结构。问题
指定了fmincon
解算器,rf2
目标函数,x0 =(20、30)
.,以获取更多使用信息createOptimProblem
,请参阅创建问题结构.
请注意
您必须指定fmincon
作为求解器GlobalSearch
,甚至对于无约束问题。
gs
是一个默认GlobalSearch
对象。对象包含解决问题的选项。调用运行(gs、问题)
运行问题
从多个起点出发。起始点是随机的,所以下面的结果也是随机的。
在这种情况下,run返回:
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
是最小值点。
成品
是目标的价值,rf2
,在xg
.
焦距
是退出标志。的退出标志1
显示所有fmincon
正常运行聚合。
噩
输出结构描述了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
,请参阅GlobalSearch和MultiStart的工作流.