主要内容

粒子群输出函数

的输出函数particleswarm.输出函数绘制出粒子在每个维度中所占的范围。

在求解器的每次迭代之后运行一个输出函数。有关语法的详细信息以及输出函数可用的数据,请参见particleswarm参考页面的选项。

自定义绘制函数

这个输出函数绘制每个维度一条线的图形。每条线表示该维度中粒子群的范围。图是对数缩放的,以适应广泛的范围。如果群收敛到一个点,那么每个维度的范围都趋近于零。但如果蜂群不收敛到一个点,那么在某些维度上,范围就会远离零。

将以下代码复制到一个名为pswplotranges.m在您的MATLAB®路径。代码设置nplot次要情节,nplot是问题的维度数。

函数stop = pswplotrange (optimValues,state) stop = false;%此函数不停止求解器开关状态情况下“init”nplot =大小(optimValues.swarm, 2);%尺寸数我= 1:nplot%设置绘图轴次要情节(nplot 1我);标签= sprintf (“psoplotrange_var_ % g”,我);为子图设置一个标记semilogy (optimValues.iteration 0“- k”“标签”、标签);%对数图ylabel (num2str(我))结束包含(“迭代”的插值函数“没有”);%迭代数在底部次要情节(nplot 1 1)%标题在顶部标题(“按分量计算的粒子范围的对数”) setappdata (gcf“t0”、抽搐);%设置计时器,只在需要时绘图情况下“通路”nplot =大小(optimValues.swarm, 2);%尺寸数I = 1:nplot subplot(nplot,1, I);%计算粒子在i维的范围irange = max(optimValues.swarm(:,i)) - min(optimValues.swarm(:,i));标签= sprintf (“psoplotrange_var_ % g”,我);plotHandle = findobj (get (gca),“孩子”),“标签”、标签);%得到子图xdata = plotHandle.XData;%从图中获取X数据newX = [xdata optimValues.iteration];%添加新的迭代plotHandle。XData = newX;%将X数据放入图中ydata = plotHandle.YData;%从图中获取Y数据newY = [ydata irange];%添加新值plotHandle。YData = newY;%将Y数据放入图中结束如果toc (getappdata (gcf,“t0”)) > 1/30%如果1/30秒已通过drawnow%显示图表setappdata (gcf“t0”、抽搐);重置计时器结束情况下“完成”%不需要清除结束

目标函数

multirosenbrock函数是Rosenbrock函数的推广到任何偶数维。它的全局最小值是0在点(1, 1, 1, 1,…]

函数F = multirosenbrock (x)%该函数是Rosenbrock的多维泛化%的功能。假设x是一个矩阵,它以向量化的方式运行%,其中的行是个体。版权所有:The MathWorks, Inc.N =大小(x, 2);%假设x是一个行向量或二维矩阵如果国防部(N, 2)如果N是奇数,则为%错误(“输入行必须有偶数个元素”结束优势= 1:2:n - 1;均等的= 2:2:N;F = 0(大小(x));F(:,几率)= 1 - x(:,几率);F(:,均等的)= 10 * (x(:,均等的)- x(:,几率)。^ 2);F = (F . ^ 2, 2)总和;

设置和运行问题

设置multirosenbrock函数作为目标函数。用户四个变量。设的下界-10和的上界10在每个变量。

有趣= @multirosenbrock;据nvar = 4;一个4-D问题磅= -10 *的(据nvar, 1);帮助求解器收敛乌兰巴托=磅;

设置选项以使用输出函数。

选择= optimoptions (@particleswarm,“OutputFcn”, @pswplotranges);

设置随机数生成器以获得可重复的输出。然后调用求解器。

rng默认的%的再现性[x, fval eflag] = particleswarm(乐趣,据nvar磅、乌兰巴托、期权)
优化结束:相对于上一个选项的目标值的变化。MaxStallIterations迭代小于options . functional tolerance。X = 0.9964 0.9930 0.9835 0.9681 fval = 3.4935e-04 eflag = 1

结果

求解器返回一个接近最优值的点(1, 1, 1, 1).但是蜂群的范围并没有收敛到零。

相关的话题