主要内容

粒子群优化

这个例子展示了如何优化使用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是全球性的解决方案。

相关的话题