优化利用粒子群

此示例示出了如何优化用particleswarm求解。

在这个例子中的目标函数是德容的第五个功能,其中包括与全局优化工具箱软件。

dejong5fcn

这个函数有25局部极小。

试着找到函数的使用默认的最小particleswarm设置。

有趣= @ dejong5fcn;nvars = 2;RNG默认%用于重现[X,FVAL,exitflag] = particleswarm(乐趣,nvars)
优化结束:在过去的OPTIONS.MaxStallIterations迭代的客观价值相对变化小于OPTIONS.FunctionTolerance。
X =1×2-31.9521 -16.0176
FVAL = 5.9288
exitflag = 1

该如何解决X全球最佳?目前还不清楚在这一点上。纵观函数图显示,该函数在范围内的部件局部极小[-50,50]。因此,限制变量的范围[-50,50]帮助求解器找到全局最小。

磅= [-50 -50]。UB = -LB;[X,FVAL,exitflag] = particleswarm(乐趣,nvars,LB,UB)
优化结束:在过去的OPTIONS.MaxStallIterations迭代的客观价值相对变化小于OPTIONS.FunctionTolerance。
X =1×2-16.0079 -31.9697
FVAL = 1.9920
exitflag = 1

这看起来很有希望:新的解决方案具有较低FVAL比前一个。但是X真正的全球性解决方案?试着用更多的颗粒再次最小化,更好地搜索区域。

选项= optimoptions('particleswarm''SwarmSize',100);[X,FVAL,exitflag] = particleswarm(乐趣,nvars,LB,UB,选项)
优化结束:在过去的OPTIONS.MaxStallIterations迭代的客观价值相对变化小于OPTIONS.FunctionTolerance。
X =1×2-31.9781 -31.9784
FVAL = 0.9980
exitflag = 1

这看起来更有前途。但就是这个答案的全球解决方案,而在于如何准确呢?重新运行具有混合功能的解算器。particleswarm来电后的混合功能particleswarm完成它的迭代。

options.HybridFcn = @fmincon;[X,FVAL,exitflag] = particleswarm(乐趣,nvars,LB,UB,选项)
优化结束:在过去的OPTIONS.MaxStallIterations迭代的客观价值相对变化小于OPTIONS.FunctionTolerance。
X =1×2-31.9783 -31.9784
FVAL = 0.9980
exitflag = 1

particleswarm实际上发现和以前相同的解决方案。这给你一些信心,particleswarm报告当地最低和最终X是全球性解决方案。

相关话题