使用粒子群优化
这个例子展示了如何优化使用particleswarm
解算器。
目标函数在这个例子中是德容第五函数,可以当您运行这个例子。
dejong5fcn
这个函数有25个局部最小值。
试图找到最低的函数使用默认particleswarm
设置。
有趣= @dejong5fcn;据nvar = 2;rng默认的%的再现性[x, fval exitflag] = particleswarm(有趣,据nvar)
优化结束:相对客观价值的变化在过去的选择。小于OPTIONS.FunctionTolerance MaxStallIterations迭代。
x =1×2-31.9521 - -16.0176
fval = 5.9288
exitflag = 1
解决方案是x
全球最佳?目前尚不清楚。看函数图显示组件的函数局部最小值的范围(-50年,50)
。所以限制变量的范围(-50年,50)
帮助解决定位全球最低。
磅= (-50;-50);乌兰巴托=磅;[x, fval exitflag] = particleswarm(磅,有趣,据nvar乌兰巴托)
优化结束:相对客观价值的变化在过去的选择。小于OPTIONS.FunctionTolerance MaxStallIterations迭代。
x =1×2-16.0079 - -31.9697
fval = 1.9920
exitflag = 1
这看起来有前途的:新解决方案低fval
比前一个。但x
一个真正的全球解决方案吗?再次尝试减少更多的粒子,更好的搜索区域。
选择= optimoptions (“particleswarm”,“SwarmSize”,100);[x, fval exitflag] = particleswarm(乐趣,据nvar磅、乌兰巴托、期权)
优化结束:相对客观价值的变化在过去的选择。小于OPTIONS.FunctionTolerance MaxStallIterations迭代。
x =1×2-31.9781 - -31.9784
fval = 0.9980
exitflag = 1
这看起来更有前途。但这是回答一个全球性的解决方案,以及如何准确是吗?重新运行混合函数的解算器。particleswarm
调用后的混合函数particleswarm
完成它的迭代。
选项。HybridFcn = @fmincon;[x, fval exitflag] = particleswarm(乐趣,据nvar磅、乌兰巴托、期权)
优化结束:相对客观价值的变化在过去的选择。小于OPTIONS.FunctionTolerance MaxStallIterations迭代。
x =1×2-31.9783 - -31.9784
fval = 0.9980
exitflag = 1
particleswarm
发现基本相同的解决方案。这给了你一些信心particleswarm
一个局部最小值,最后报告x
是全球解决方案。