1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
人工鱼群算法(Artificial Fish Swarm Algorithm,简称AFSA)是受鱼群行为的启发,由国内李晓磊博士于2002年提出的一种基于动物行为的群体智能优化算法,是行为主义人工智能的一个典型应用,这种算法源于鱼群的觅食行为。
在一片水域中,鱼往往能自行或尾随其它鱼,找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方。人工鱼群算法根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群、追尾及随机行为,从而实现寻优。
人工鱼(AF)是真实鱼的仿制品,用于分析和问题解释(Neshat、Sepidnam、Sargolzaei和Toosi(2012))。鱼类大多生活在食物充足的地区,它们通过跟随其他鱼类或单独寻找食物,向食物较多的地区移动。鱼类数量最多的地区通常是食物最多的。每条人工鱼的下一步行为取决于它目前的状态以及局部的环境状态,AF通过自身行为以及同伴的行为来影响环境。
(1)觅食行为(Prey)
(2)聚群行为(Swarm)
(3)追尾行为(Follow)
(4)随机行为
(5)行为选择
这是鱼类的生存习惯,反映出了鱼类的自主行为。在人工鱼群算法中,觅食行为奠定了算法的收敛基础,聚群行为增强了算法收敛的稳定性,追尾行为增强了算法收敛的快速性与全局性,行为选择策略则是为算法收敛的速度与稳定性提供了保障。
3.MATLAB核心程序
tic, yjzl=yjzl; dxzl=dxzl; Pi=Pi; [N,row]=size(Pi); %N为节点数 fish=40; %控制参数:人工鱼的条数 visual=7; %控制参数:视野 delta=0.35; %控制参数:拥挤度 step=5; %控制参数:人工鱼移动的步长 maxcalculation=100; %收敛条件:最大迭代次数 objectvalue=zeros(1,fish); %食物浓度矩阵(1×fish) [NN,row]=size(dxzl); %NN为待选线路的维数 status=rand(fish,NN); %人工鱼位置状态矩阵status for i=1:fish for j=1:NN if status(i,j)<=0.5 status(i,j)=0; else status(i,j)=1; end end end minvalue=inf; for fishnumber=1:fish x=status(fishnumber,:); [B1,B,BL,NEW,NL,L,nbl]=builtnet(x,dxzl,yjzl); [tong]=liantong(N,L,BL); if tong>1 objectvalue(fishnumber)=inf; else [operate,overflowvalue]=dcflow(N,L,BL,Pi,nbl); construction=0; for i=1:NEW construction=construction+25*B1(i,6); %计算建设费用每公里线路建设费用取25万元 end objectvalue(fishnumber)=construction+operate+overflowvalue; end if objectvalue(fishnumber)<minvalue minvalue=objectvalue(fishnumber); %minvalue记录最小的目标函数值 minfish=status(fishnumber,:); %minfish记录最小目标函数值所对应的人工鱼的位置 end end %进行行为策略 ............................................................................ [status,objectvalue]=prey(status,fishnumber,objectvalue,visual,fish,NN,N,delta,step,dxzl,yjzl,Pi); end end end for fishnumber=1:fish if objectvalue(fishnumber)<minvalue minvalue=objectvalue(fishnumber); minfish=status(fishnumber,:); end end min2(calculation)=minvalue; disp(calculation); disp(minvalue); %if minvalue<=5900 % break %end calculation=calculation+1; end toc plot(min2,'-*');
标签:仿真,人工,fish,算法,鱼群,matlab,行为,控制参数 From: https://www.cnblogs.com/51matlab/p/17319986.html