打字猴:1.70101161e+09
1701011610 (1)觅食行为:一般情况下鱼在水中随机地自由游动,当发现食物时,则会向食物逐渐增多的方向快速游去。
1701011611
1701011612 (2)聚群行为:鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成群,鱼聚群时所遵守的规则有以下三条。
1701011613
1701011614  
1701011615
1701011616 分隔规则:尽量避免与临近伙伴过于拥挤; 对准规则:尽量与临近伙伴的平均方向一致; 内聚规则:尽量朝临近伙伴的中心移动。 (3)追尾行为:当鱼群中的一条或几条鱼发现食物时,其临近的伙伴会尾随其快速到达食物点。
1701011617
1701011618 (4)随机行为:单独的鱼在水中通常都是随机游动的,这是为了更大范围地寻找食物点或身边的伙伴。
1701011619
1701011620 人工鱼群算法特点:
1701011621
1701011622  
1701011623
1701011624 具有较快的收敛速度,可以用于解决有实时性要求的问题; 对于一些精度要求不高的场合,可以用它快速的得到一个可行解; 不需要问题的严格机理模型,甚至不需要问题的精确描述,这使得它的应用范围得以延伸。 现实中的鱼群如图10-9所示,鱼群表现聚群行为和觅食行为,当然在水中游动,位置是随机的,其他的鱼都是尾随前面的鱼,表现一种群体行为。
1701011625
1701011626
1701011627
1701011628   图10-9 现实鱼群     图10-10 人工鱼群算法   人工鱼群算法则将鱼觅食行为进行简化,如图10-10所示,鱼群的中心鱼Si为鱼群的优化点,具体的人工鱼群算法流程如下:
1701011629
1701011630 (1)确定种群规模fishnum,在变量可行域内随机生成fishnum个个体,迭代次数gen,设定人工鱼的可视域Visual,半径为rij(鱼si到鱼sj的距离),步长step,拥挤度因子δ,尝试次数try_number。
1701011631
1701011632 (2)计算初始鱼群各个体适应值,取最优人工鱼状态及其值赋给公告板。
1701011633
1701011634 (3)个体通过觅食、聚群和追尾行为更新自己,生成新鱼群。
1701011635
1701011636 (4)评价所有个体。若某个体优于公告板,则将公告板更新为该个体。
1701011637
1701011638 (5)当公告板上最优解达到满意误差界内,算法结束,否则转(3)。
1701011639
1701011640 应用人工鱼群算法进行函数寻优分析,待分析函数编程如下:
1701011641
1701011642     clc,clear,close all                              %清屏和清除变量    warning off                                      %消除警告    tic                                              %开始计时    figure(‘color’,[1,1,1])    [X1,X2] = meshgrid(-10:0.1:10,-10:0.1:10);       %平面栅格化    Y=sin(X1)./X1.*sin(X2)./X2;                      %对应的Z值    mesh(X1,X2,Y)                                    %曲面绘制    toc                                              %结束计时
1701011643
1701011644 运行程序输出图形如图10-11所示。
1701011645
1701011646
1701011647
1701011648
1701011649 图10-11 待寻优函数
1701011650
1701011651 该函数存在一个极大值点,因此,采用人工鱼群算法进行函数寻优,应该找到该极大值点,人工鱼群算法程序如下:
1701011652
1701011653     clc,clear,close all                 %清屏和清除变量    warning off                         %消除警告    tic                                 %开始计时    figure(1);hold on                   %新建图形窗口,并设置图形保持句柄    %%参数设置    fishnum=100;                        %生成100只人工鱼    MAXGEN=50;                          %最多迭代次数    try_number=100;                     %最多试探次数    visual=1;                           %感知距离    delta=0.618;                        %拥挤度因子    step=0.1;                           %步长        %%初始化鱼群    lb_ub=[-10,10,2;];    X=AF_init(fishnum,lb_ub);           %初始化    LBUB=[];    for i=1:size(lb_ub,1)        LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)];     end    gen=1;    BestY=-1*ones(1,MAXGEN);            %每步中最优的函数值    BestX=-1*ones(2,MAXGEN);            %每步中最优的自变量    besty=-100;                         %最优函数值    Y=AF_foodconsistence(X);            %待优化目标函数    while gen<=MAXGEN        disp([‘迭代步数:  ‘,num2str(gen)])          %显示迭代步数                for i=1:fishnum            %聚群行为            [Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y);             %追尾行为            [Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y);            if Yi1>Yi2                X(:,i)=Xi1;                Y(1,i)=Yi1;            else                X(:,i)=Xi2;                Y(1,i)=Yi2;            end        end                [Ymax,index]=max(Y);        figure(1);                                                  %图形窗口(1)        plot(X(1,index),X(2,index),’.’,‘color’,[gen/MAXGEN,0,0])    %画图        if Ymax>besty          %更新最优个体            besty=Ymax;            bestx=X(:,index);            BestY(gen)=Ymax;            [BestX(:,gen)]=X(:,index);        else            BestY(gen)=BestY(gen-1);            [BestX(:,gen)]=BestX(:,gen-1);        end        gen=gen+1;    end    plot(bestx(1),bestx(2),‘ro’,‘MarkerSize’,100)               %绘制最优个体图形    xlabel(‘x’)                                                 %x轴标记    ylabel(‘y’)                                                 %y轴标记    title(‘鱼群算法迭代过程中最优坐标移动’)        %%优化过程图    figure    plot(1:MAXGEN,BestY)    xlabel(‘迭代次数’)    ylabel(‘优化值’)    title(‘鱼群算法迭代过程’)    disp([‘最优解X: ‘,num2str(bestx’,’%1.5f   ‘)])    disp([‘最优解Y: ‘,num2str(besty,’%1.5f\n’)])    toc                                        %结束计时
1701011654
1701011655 相应的待优化函数即适应度函数如下:
1701011656
1701011657     function [Y]=AF_foodconsistence(X)    fishnum=size(X,2);    for i=1:fishnum        Y(1,i)=sin(X(1,i))/X(1,i)*sin(X(2,i))/X(2,i);    %目标函数    end
1701011658
1701011659 考虑鱼群的聚群行为如图10-12所示。
[ 上一页 ]  [ :1.70101161e+09 ]  [ 下一页 ]