MATLAB课程设计               
题    目
人工鱼算法
系 (院)
计算机科学技术系
专    业
通信工程
班    级
09级一班
学生姓名
栾亚婷 赵西西 贾强强
荣东盟 熊喆
学    号
  2009010924  2009010938 
  2009010946  2009010921 
        2009010955       
                2012年 5月18日
人工鱼算法
一、前言
  智能优化算法作为新兴的搜索算法,一般是指利用自然界的生物系统与优化过程的某些相似性而逐步发展起来的优化算法,如遗传算法、粒子算法、蚁算法等,它们通过对搜索空间中的一组解按概率规则操作得到下一组解。
  人工鱼算法源于对鱼运动行为的研究,是一种新型的智能仿生优化算法。它具有较强的鲁棒性、优良的分布式计算机制、易于和其它方法结合等优点。目前对该算法的研究、应用已经渗透到多个应用领域,并由解决一维静态优化问题发展到解决多维动态组合优化问题。
二、人工鱼算法描述
  在一片水域中,鱼存在的数目最多的地方就是本水域中富含营养物质最多的地方,一句这一特点来模仿鱼的觅食,聚,追尾等行为,从而实现全局最优,这就是鱼算法的基本思想。鱼类的活动中,觅食行为,聚行为,追尾行为和随机行为与寻优命题的解决有
较密切的关系,如何利用简单有效的方式来构造实现这些行为将是算法实现的主要问题。
三、人工鱼行为描述
(1)随机行为(AF-Random):指人工鱼在视野内随机移动,当发现食物时,会向食物逐渐增多的方向快速的移动。
(2)觅食行为(AF-prey):指鱼循着食物多的方向游动的一种行为,人工鱼Xi在其视野内随机选择一个状态Xj,分别计算它们的目标函数值进行比较,如果发现Yj比Yi优,则Xi向Xj的方向移动一步;否则,Xi继续在其视野内选择状态Xj,判断是否满足前进条件,反复尝试trynumber次后,仍没有满足前进条件,则随机移动一步使Xi到达一个新的状态。
(3)聚行为(AF-swarm):鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成 。鱼聚时所遵守的规则有三条:分隔规则:尽量避免与临近伙伴过于拥挤;对准规则:尽量与临近伙伴的平均方向一致;内聚规则:尽量朝临近伙伴的中心移动。 人工鱼Xi搜索其视野内的伙伴数目nf及中心位置Xc,若Yc/ nf  > δYi,表明伙伴中心位置状态较优且不太拥挤,则Xi朝伙伴的中心位置移动一步,否则执行觅食行为。
(4)追尾行为(AF-follow)指鱼向其可视区域内的最优方向移动的一种行为。人工鱼Xi搜索其视野内所有伙伴中的函数最优伙伴Xj,如果Yj/nf> δYi,表明最优伙伴的周围不太拥挤,则Xi朝吃货版移动一步,否则执行觅食行为
(5)公告板:是记录最优人工鱼个体状态的地方。每条人工鱼在执行完一次迭代后将自身当前状态与公告板中记录的状态进行比较,如果优于公告板中的状态则用自身状态更新公告板中的状态,否则公告板的状态不变。当整个算法的迭代结束后,输出公告板的值,就是我们所求的最优值。
四、程序设计步骤
1确定种规模N,在变量可行域内随机生成N个个体,设定人工鱼的可视域Visual,步长step,拥挤度因子δ,尝试次数trynumber。
2计算初始鱼各个体适应值,取最优人工鱼状态及其值赋给公告板。
3个体通过觅食,聚,追尾行为更新自己,生成新鱼。
4评价所有个体。若某个体优于公告板,则将公告板更新为该个体。
5当公告板上最优解达到满意误差界内,算法结束,否则转step3。
图1 AFSA初始位置
图2 AFSA迭代5次
图3 AFSA迭代20次
图4 AFSA迭代100次
Matlab程序如下:
%人工鱼算法
format long %设置输出格式显示15位双精度,7位单精度
%%初始化参数设置
Visual=2.5;%感知距离
Step=0.3;%步长
N=50;%生成50只人工鱼
Try_number=50;%人工鱼每次觅食最大试探次数
%设置边界参数
a1=-10;
b1=10;
a2=-10;
b2=10;
d=[];%设置一个空矩阵存放人工鱼个体间距离
h=1e-1;
Friend_number=50;
k=0;%迭代次数
m=50;
%%初始化鱼
X1=rand(N,1)*(b1-a1)+a1;
X2=rand(N,1)*(b2-a2)+a2;
X=[X1 X2];%人工鱼数量
%保存初始的人工鱼个体间的距离
for i=1:N
wwww=[X(i,1),X(i,2)];
d(i)=maxf(wwww);
end
%公告板初始化
[w,i]=max(d);
maxX=[X(i,1),X(i,2)];%初始公告板记录
maxY=w;%初始公告板记录
figurex=[];qq人工客服
figurey=[];
figurez=[];
figurex(numel(figurex)+1)=maxX(1);
figurey(numel(figurey)+1)=maxX(2);
figurez(numel(figurez)+1)=maxY;
kkk=0;
while(k<m)
%开始循环
    for i=1:N   
    XX=[X(i,1),X(i,2)];%人工鱼当前状态Xi
    nf=0;
    Xc=0;
    for j=1:N  %聚行为开始
      XXX=[X(j,1),X(j,2)];
      %判断以Xi为中心,visual距离领域内的伙伴总数
      if(norm(XXX-XX)<Visual)
      nf=nf+1;
      Xc=Xc+XXX;%Xi附近所有nf伙伴的中心位置
      end
    end
Xc=Xc/nf;
%判断伙伴中心状态位置是否较优且不太拥挤,若是,则Xi朝伙伴的中心位置移动一步,否则执行觅食行为
  if((maxf(Xc))>maxf(XX))
        XXnext1=XX+rand*Step*(Xc-XX)/norm(Xc-XX); 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。