PSO速度边界处理问题:
一维:
对于一维单目标优化,边界速度处理是非常简单的, 刚开始先定义一个-1到1的速度区间:vlimit=[-1,1];
用函数,其实也并不是什么函数,只是修改一下原来的赋值后的变量v,也就是修改速度的意思,例如:
v(v > vlimit(2)) = vlimit(2);
v(v < vlimit(1)) = vlimit(1);
还有比较容易理解的算法:
% for k=1:N
% if v(k,:)>vlimit(2)
% v(k,:)=vlimit(2);
% elseif v(k,:)<vlimit(1);
% v(k,:)=vlimit(1);
% end
% end
总的来说,只要把可能超过边界的速度值用边界值代替就行了。代替的方法就是赋值。怎么赋值,你自己看着办,方法有很多。
二维:
对于二维单目标优化,边界处理也是能够做到的,只是从一个数,变成了一个二维向量而已,有什么困难的呢?
for j=1:sizepop
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
有find函数,find函数返回的是个数,你用find(V(j,:)>Vmax)返回的是“:”这个数,也就是需要的列数。很简单不是吗?