SOMA介绍
本文简要介绍了自组织迁移算法(Self-organizing Migrating Algorithm, SOMA)算法的原理和实现过程。SOMA作为一种新型群智能优化算法,自2000年由Zelinka和Lampinen提出后就收到广大研究者的高度认可。
SOMA流程
与蚁群算法和粒子群算法类似,SOMA属于集群智能范畴。首先初始化若干个体组成初始种群并根据所解决的具体问题求出每个粒子所对应的适应度值。通过一个迁移循环(Migration loops, ML)对种群中除领导者(Leader)外的其它个体进行迁移更新,其中领导者为当前迁移循环中适应度值最优的个体。在每一次迁移循环中,每个粒子的都采用一定的步长step向领导者进行小幅度的跳跃。通过随机初始化一摄动向量PRTVrctor来引导个体如何朝向领导者进行移动,其中PRTVrctor通过设定系数prt进行调控,prt通常取值为[0,1]。个体的迁移方式按照如下公式进行:
其中,
X
i
,
s
t
a
t
e
M
L
X_{i,state}^{ML}
Xi,stateML代表待迁移粒子,
X
L
M
L
X_{L}^{ML}
XLML代表在第ML代迁移循环中的领导者,
X
t
e
m
p
M
L
X_{temp}^{ML}
XtempML为粒子迁移得到的新位置。t以步长step的间隔长度。
SOMA算法步骤
- 初始化NP(种群大小)个粒子作为第一代迁移群体。
- 计算每一个粒子的适应度函数值,并选出最优粒子作为领导者(Leader)来引导其它粒子进行迁移。
- 将除领导者以外的个体按照上式进行迁移,并更新PRTVector的值。
- 当满足算法停止条件时,迁移停止并返回最优粒子的值。
以下给出SOMA在Matlab中的代码实现
for i = 1:N
if i==lead_pos
continue;
end
strt_pop=x(i,:);
leader = x(lead_pos,:);%将种群的第lead_pos个个体作为领导者
for t=0:step:pathLength
%% 生成prtvector摄动向量
prtntzero= true;
while(prtntzero)
for j=1:D
if rand<prt
prt_vector(j) = 1;
prtntzero = false;
else
prt_vector(j) = 0;
end
end
end
for j=1:D
v(i,j) = strt_pop(j) + ( leader(j) - strt_pop(j) ) * t * prt_vector(j);
end
%% 边界处理
for j = 1:D
if v(i,j)>lu(2,j)
v(i,j)=max(lu(1,j),2*lu(2,j)-v(i,j));%超出上界处理
end
if v(i,j)<lu(1,j)
v(i,j)=min(lu(2,j),2*lu(1,j)-v(i,j));%超出下界处理
end
end
fnew(i)=benchmark_func(v(i,:),problem);%计算生成的试验向量newx(i,:)的目标函数值
if fnew(i) < fitness(i)
fitness(i) = fnew(i);
x(i,:) = v(i,:);
end
end
end
引用
SOMA原文链接:link.
SOMA相关改进: