粒子群算法的matlab实现
% 当前进化代数:对于每个粒子进行更新和评价----->>>>>>>
for j=1:pop_size
v(j,:)
w.*v(j,:)+c1.*rand.*(pbest(j,1:part_size)-arr_present(j,1:part_size))... =
+c2.*rand.*(gbest(1:part_size)-arr_present(j,1:part_size)); % 粒子速度更新 (a)
% 判断v的大小,限制v的绝对值小于20———————————————————
for k=1:part_size
if abs(v(j,k))>20
rand('state',sum(100*clock));
v(j,k)=20*rand();
end
end
%前几列是位置信息
arr_present(j,1:part_size)
arr_present(j,1:part_size)+v(j,1:part_size);% 粒子位置更新 (b)
%最后一列是适应度
arr_present(j,end) = fitness(part_size,arr_present(j,1:part_size)); % 适应度更新 (保存至最后一列)
% 适应度评价与可行域限制
if (arr_present(j,end)>pbest(j,end))&(Region_in(arr_present(j,:),region)) % 根据条件更新pbest,如果是最小的值为小于号,相反则为大于号
pbest(j,:) = arr_present(j,:); % 更新个体的历史极值
end
end
=