此示例示出了如何优化用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
是全球性解决方案。