1 简介
人工鱼群算法是一种基于自然界鱼群的生活行为而提出的一种智能优化算法。人工鱼群算法由于其诸多优点自从提出来后就得到了广泛的应用,这是群体智能算法的一个典型应用,是人们在群体智能研究的方面的又一个重要成就。人工鱼群算法可以简单的描述为:在自然界的一片水域中,鱼类一般是通过随机自由游动来寻找食物的,在寻找食物的过程中,鱼类往往聚集成群,这是鱼类长期自然选择形成的生活习性。一般情况下,鱼个数较多的地方往往是食物也较多的地方。人工鱼群算法就是通过模 仿自然鱼的觅食、聚群、追尾、随机游动的行为而形成的一种优化算法。
2 部分代码
function [C_AF,bestp]=AF_main(I,Ptot)
global K h N deltaf n m mm
%%%%%%%%初始化%%%%%%%%%
fishnum=300;%生成3条人工鱼
visual=1;%感知范围
try_number=100;%最大尝试次数
step=0.1;%移动步长
delta=0.618;%拥挤度因子
MAXGEN=100;%最大迭代次数
p=rand(12,fishnum);
p1=p./(ones(12,1)*sum(p))*Ptot;
for i=1:fishnum
while(find((transpose(p1(:,i))*K>I))>0)
p1(:,i)=p1(:,i)*0.5;
p1(find(p1<0))=0;
end
end %初始化人工鱼及其参数 是的每个参数满足L+1个约束
C1=sum(log2(1+transpose(h)*ones(1,fishnum).*p1));% 根据初始化参数 得到的初始化每条对应的容量
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gen=1;
BestC=zeros(1,MAXGEN);%每步中最优的容量值
BestP=zeros(N,MAXGEN);%每步中最优的自变量
bestC=0;
while gen<=MAXGEN
for i=1:fishnum
[p2,C2]=AF_swarm(p1,i,visual,step,try_number,C1(i),delta);%%%%%%觅食行为%%%%%%%%%%%
[p3,C3]=AF_follow(p1,i,visual,step,try_number,C1(i),delta);%%%%%%聚群行为%%%%%%%%%%%
if C2>C3
p1(:,i)=p2;
C1(i)=C2;
else
p1(:,i)=p3;
C1(i)=C3;
end
end
[Cmax,index]=max(C1);
if n==1&&m==1&&mm==1
figure(1);
hold on
plot( p1(1,index),p1(2,index),p1(3,index),p1(4,index),p1(5,index),...
p1(6,index),p1(7,index),p1(8,index),p1(9,index),p1(10,index),...
p1(11,index),p1(12,index),'.','color',[gen/MAXGEN,0,0]);
end
if Cmax>bestC
bestC=Cmax;
bestp=p1(:,index);
BestC(gen)=Cmax;
[BestP(:,gen)]=p1(:,index);
else
BestC(gen)=BestC(gen-1);
[BestP(:,gen)]=BestP(:,gen-1);
end
gen=gen+1;
end
C_AF=bestC;
if n==1&&m==1&&mm==1
plot( bestp(1),bestp(2),bestp(3),bestp(4),bestp(5),...
bestp(6),bestp(7),bestp(8),bestp(9),bestp(10),...
bestp(11),bestp(12),'ro','MarkerSize',30);
xlabel('p')
ylabel('C')
title('鱼群算法迭代过程中最优坐标移动')
figure(2)
plot(1:MAXGEN,BestC*deltaf)
end
3 仿真结果
4 参考文献
[1]田琳. 基于人工鱼群的K中心组合优化聚类算法研究. (Doctoral dissertation, 沈阳大学).
完整代码或者代做添加QQ1575304183
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。