主要内容

粒子群输出功能

此示例显示如何使用输出功能partminleswarm.。输出函数绘制粒子在每个维度中占据的范围。

输出函数在每个迭代后运行求解器。对于语法详细信息,并且对于输出函数可用的数据,请参阅partminleswarm.选项参考页面。

自定义绘图功能

该输出函数绘制每个维度一行的绘图。每根线表示该尺寸中群中粒子的范围。绘图是对数缩放以适应宽范围。如果群体会聚到单点,则每个维度的范围都会变为零。但如果群体不收敛到单一,则该范围在某些尺寸中远离零。

将以下代码复制到名为的文件中pswplotranges.m.在您的Matlab®路径上。代码设置了nplot.子图,其中nplot.是问题的尺寸数。

功能stop = pswplotranges(优化值,状态)stop = false;%此功能不会停止求解器转变状态案件'在里面'nplot = size(OptimValues.swarm,2);%尺寸数为了我= 1:nplot%设置轴的轴子图(nplot,1,i);tag = sprintf('psoplotrange_var_%g',一世);%为子图设置标记半径(OptimValues.Iltation,0,'-k''标签',标签);%log-scaled plotylabel(num2str(i))结尾Xlabel('迭代''interp''没有任何');底部的%迭代号子图(nplot,1,1)顶部的%标题标题('按组件的粒子记录范围')SetAppData(GCF,'t0',tic);%仅在需要时设置计时器以绘制案件'iter'nplot = size(OptimValues.swarm,2);%尺寸数为了i = 1:nplot子图(nplot,1,i);%计算尺寸I的粒子的范围Irange = Max(OptimValues.swarm(:,i)) -  min(OptimValues.swarm(:,i));tag = sprintf('psoplotrange_var_%g',一世);plothandle = findobj(get(gca,'孩子们'),'标签',标签);%得到子图xdata = plothandle.xdata;%从图中获取x数据newx = [xdata aloptvalues.jertation];%添加新的迭代plothandle.xdata = newx;%将X数据放入绘图中ydata = plothandle.ydata;%从绘图中获取Y数据纽约= [YDATA IRANGE];%添加新值plothandle.ydata =纽约;%将y数据放入绘图中结尾如果toc(getAppData(GCF,'t0'))> 1/30如果1/30秒通过了%drawn%显示剧情SetAppData(GCF,'t0',tic);%重置计时器结尾案件'完毕'%没有清理必要结尾

目标职能

MultiorosenBrock.功能是Rosenbrock的函数的概括到任何偶数尺寸。它具有全球最低限度0.当时[1,1,1,1,......]

功能f = multiorosenbrock(x)%此功能是RosenBrock的多维概括% 功能。它以矢量化方式运行,假设X是矩阵%行是个人的。Mathworks,Inc。的%2014年度版权所有n =尺寸(x,2);%假设X是行矢量或2-D矩阵如果mod(n,2)%如果n是奇数错误(“输入行必须具有偶数元素”结尾赔率= 1:2:n-1;evens = 2:2:n;f = zeros(尺寸(x));f(:,赔率)= 1-x(:,赔率);f(:,viens)= 10 *(x(:,evens)-x(:,赔率)。^ 2);f = sum(f. ^ 2,2);

设置并运行问题

设定MultiorosenBrock.用作目标函数。用户四个变量。设置一个下限-10和一个上限10.在每个变量上。

有趣= @multirosenbrock;nvar = 4;%一个4-D问题lb = -10 *那些(nvar,1);%界限帮助求解器融合UB = -LB;

设置选项以使用输出功能。

选项= Optimoptions(@ParticlyWarm,'outputfcn',@ pswplotranges);

设置随机数生成器以获得可重复的输出。然后打电话给求解器。

RNG.默认重复性的%[x,fval,eflag] = particleswarm(fun,nvar,lb,Ub,选项)
优化结束:最后一个options的目标值中的相对变化.maxstallerations迭代率小于options.functionTolectance。X = 0.9964 0.9930 0.9835 0.9681 FVAL = 3.4935E-04 EFLAG = 1

结果

求解器返回一个接近最佳的点[1,1,1,1]。但是群体的跨度没有收敛到零。

相关话题