在pso应用于离散优化例如tsp时,由于其算法本身是针对连续区间的,因此需要对其进行改造。本文针对pso中更新粒子所用到的基本交换子的构造进行简单记录。
在连续区间的pso中在更新位置时,会有一个向此时最优位置靠拢的操作。但需要注意的是针对连续区间的靠拢操作对于离散的tsp并不适用,故采取BBS来代替。基本定义可参考本文
基本流程如下:
matlab实现(求解x_>pbest的BBS)
function [ bbs ] = bbs_solve(pbest,x)
len = length(pbest); %获取长度
bbs = ones((len-1)*2,1);
for i =1:len-1
index = find(x == pbest(i));
if i~=index %i与x对应下标相同与否
bbs(2*i-1) = i;
bbs(2*i) = index;
end
% 交换
tmp = x(index);
x(index) =x(i);
x(i) = tmp;
end
end