这个例子展示了如何优化使用particleswarm
解算器。
这个例子中的目标函数是De Jong的第五个函数,它包含在全局优化工具箱软件中。
dejong5fcn
这个函数有25个局部极小值。
尝试使用默认值找到函数的最小值particleswarm
设置。
有趣= @dejong5fcn;据nvar = 2;rng默认的%的再现性[x, fval exitflag] = particleswarm(有趣,据nvar)
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。
x =1×2-31.9521 - -16.0176
fval = 5.9288
exitflag = 1
解决方案是x
全球最佳?目前还不清楚。观察函数图可以看出函数在这个范围内的分量有局部最小值(-50年,50)
.所以限制变量的范围(-50年,50)
帮助求解器找到全局最小值。
磅= (-50;-50);乌兰巴托=磅;[x, fval exitflag] = particleswarm(磅,有趣,据nvar乌兰巴托)
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。
x =1×2-16.0079 - -31.9697
fval = 1.9920
exitflag = 1
这看起来很有希望:新的解决方案降低了fval
比之前的那个要多。但x
真正的全球性解决方案?尝试用更多的粒子再次最小化,以更好地搜索区域。
选择= optimoptions (“particleswarm”,“SwarmSize”, 100);[x, fval exitflag] = particleswarm(乐趣,据nvar磅、乌兰巴托、期权)
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。
x =1×2-31.9781 - -31.9784
fval = 0.9980
exitflag = 1
这看起来更有希望。但这个答案是一个全球性的解决方案吗?它有多准确?用混合函数重新运行求解器。particleswarm
之后调用hybrid函数particleswarm
完成它的迭代。
选项。HybridFcn = @fmincon;[x, fval exitflag] = particleswarm(乐趣,据nvar磅、乌兰巴托、期权)
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。
x =1×2-31.9783 - -31.9784
fval = 0.9980
exitflag = 1
particleswarm
找到了和之前基本相同的解。这给了你一些信心particleswarm
报告一个局部极小值和最后的x
是全球性的解决方案。