【优化求解】基于人工鱼群求解多目标优化问题【Matlab 480期】

一、简介

1.1 觅食行为
  指鱼循着食物多的方向游动的一种行为,人工鱼X i X_iXi在其视野内随机选择一个状态X j X_jXj,分别计算它们的目标函数值进行比较,如果发现Y j Y_jYj比Y i Y_iYi优(Y j Y_jYj和Y i Y_iYi分别为X j X_jXj和X i X_iXi的适应度值),则Xi向Xj的方向移动一步;否则,X i X_iXi继续在其视野内选择状态X j X_jXj,判断是否满足前进条件,反复尝试t r y n u m b e r trynumbertrynumber次后,仍没有满足前进条件,则随机移动一步使X i X_iXi到达一个新的状态。表达式如下:
X j = X i r a n d ( ) ∗ v i s u a l (1) X_j=X_i rand()*visual \tag{1}Xj=Xi rand()∗visual(1)                
X n e x t = X i r a n d ( ) ∗ s t e p ∗ X j − X i ∣ ∣ X j − X i ∣ ∣ (2) X_{next}=X_i rand()step\frac{X_j-X_i}{\left | \left | X_j-X_i \right | \right |}\tag{2}Xnext=Xi rand()∗step∗∣∣Xj−Xi∣∣Xj−Xi(2)
X n e x t = X i r a n d ( ) ∗ s t e p (3) X_{next}=X_i rand()*step \tag{3}Xnext=Xi rand()∗step(3)                
  其中rand()是介于0和1之间的随机数。

人 工 鱼 的 视 觉 描 述 人工鱼的视觉描述人工鱼的视觉描述
  框架图如下所示:

伪代码段如下:

for i = 1:Nfor j = 1:Try_number        Xj=x(i) Visual.*rand();%人工鱼Xi按式(1)在其视野内随机选择一个状态Xj        if f(Xj)<f(x(i))   %比较Xj和Xi的适应度            X_next= x(i) rand()*step*(Xj-x(i))/norm(Xj-x(i)); %人工鱼Xi按式(2)朝着Xj方向移动一步,norm()函数表示二范数             break;        else        X_next=x(i) step*rand();        end    endend

1.2 聚群行为

鱼在游动过程中为了保证自身的生存和躲避危害会自然地聚集成群 。人工鱼X i X_iXi搜索其视野内(d i j < v i s u a l d_{ij}<visualdij<visual)的伙伴数目n f n_fnf及中心位置X c X_cXc,若Y c / n f < δ Y i Y_c/n_f< δY_iYc/nf<δYi(求极小值时使用小于号,在求极大值时则相反;Y c Y_cYc和Y i Y_iYi分别为X c X_cXc和X i X_iXi的适应度值),表明伙伴中心位置状态较优且不太拥挤,则X i X_iXi朝伙伴的中心位置移动一步,否则执行觅食行为;
  框架图如下所示:

伪代码段如下:

nf=0;X_inside=0;for i = 1:N    for j = 1:N           if norm(x(j)-x(i))<Visual % 求人工鱼Xi与其他人工鱼之间的距离            nf = nf 1;                  %统计在视野范围内的鱼数量               X_inside= X_inside x(j);    %将视野范围内的鱼进行累加        end         X_inside=X_inside-x(i);  %需要去除Xi本身;因为在 一开始计算时,i=j,把中心的鱼也进行了一次计算         nf=nf-1;            Xc = X_inside/nf; %此时Xc表示Xi感知范围其他伙伴的中心位置;          if  f(Xc)/nf < δ*f(x(i))            x_next=x(i) rand*Step*(Xc-x(i))/norm(Xc-x(i));          else             进行觅食行动         end    endend

1.3 追尾行为

指鱼向其视野区域内的最优方向移动的一种行为。人工鱼X i X_iXi搜索其视野内(d i j < v i s u a l d_{ij}<visualdij<visual)适应度最高的个体X j X_jXj,其适应度值为Y j Y_jYj,并探索人工鱼X j X_jXj视野内的伙伴数目n f n_fnf,若Y j / n f < δ Y i Y_j/n_f< δY_iYj/nf<δYi,表明X j X_jXj状态较优且不太拥挤,则X i X_iXi朝X j X_jXj位置移动一步,否则执行觅食行为;
  框架图如下所示:

伪代码段如下:

Y_max=inf;nf=0;for i = 1:N        %搜索人工鱼Xi视野范围内的最高适应度个体Xj    for j = 1:N             if norm(x(j)-x(i))<Visual && f(x(j))<Y_max% 求人工鱼Xi与其他人工鱼之间的距离            X_max=x(j);                    Y_max=f(x(j));        end    end    %搜索人工鱼Xj视野范围内的伙伴数量    for j = 1:N                if(norm(x(j)-X_max)<Visual)                   nf=nf 1;        end    end    nf=nf-1;%去掉他本身    if Y_max/nf<delta*f(x(i))        x_next= x(i,:) rand*Step.*(temp_maxX-x(i,:))./norm(temp_maxX-x(i,:));    else        进行觅食行为;    endend

1.4 算法总述

综上所述,算法在运算过程中,会同时进行聚群和追尾行为。而觅食行为属于这两种行为中发现聚群对象或者追尾对象附近拥挤度过大时,人工鱼选择的行为方式,若在觅食过程中,未发现比自身适应度高的人工鱼,则按步长step随机移动。最后对聚群行为和追尾行为得到的适应度值进行比较,选择优秀的人工鱼作为下一代的个体。其总框架图如下:

3 分析拥挤度因子δ δδ
3.1 拥挤度因子的取值

在求极小值问题中:δ = α n m a x , α ∈ ( 0 , 1 ] δ=αn_{max}, α∈(0,1]δ=αnmax,α∈(0,1]
  在求极大值问题中:δ = 1 α n m a x , α ∈ ( 0 , 1 ] δ=\frac{1}{αn_{max}},α∈(0,1]δ=αnmax1,α∈(0,1]
  其中α αα为极值接近水平,n m a x n_{max}nmax为期望在该邻域内聚集的最大人工鱼数目。

3.2 拥挤度因子的作用机理

对追尾行为的描述

图中af0为人工鱼af1-5在各自视野内的最优人工鱼,其实物浓度为Y j Y_jYj,C1为以af0为圆心,以视野范围为半径的圆,即能探知af0的最远距离,人工鱼越靠近af0,状态越优。
  求极大值情况下:当δ n f ≤ 1 δn_f\leq 1δnf≤1时,所有人工鱼af1-5都执行追尾行为,向af0游动;
δ = 1 α n m a x δ=\frac{1}{αn_{max}}δ=αnmax1
δ n f = n f α n m a x ≤ 1 δn_f =\frac{n_f}{αn_{max}}\leq 1δnf=αnmaxnf≤1
  当α αα=1的时候,可以明显看出来n f ≤ n m a x n_f \leq n_{max}nf≤nmax,即说明人工鱼视野范围内不拥挤。

当δ n f > 1 δn_f >1δnf>1时,若C2的食物浓度为Y j δ n f \frac{Y_j}{δn_f }δnfYj的等浓度食物圈,则C2与C1间的人工鱼af1、af2、af3执行追尾行动,向af0游动,人工鱼af4、af5执行觅食行为。此时δnf 越大执行追尾行动的人工鱼越少,反之越多。

3.2 拥挤度因子的影响

以极大值为例(极小值的情况正好和极大值相反), δ δδ越大,表明允许的拥挤程度越小,人工鱼摆脱局部最优的能力越强;但是收敛的速度会有所减缓,这主要因为人工鱼在逼近极值的同时,会因避免过分拥挤而随机走开或者受其它人工鱼的排斥作用,不能精确逼近极值点。可见,δ δδ的引入避免了人工鱼过度拥挤而陷入局部极值,另一方面,该参数会使得位于极值点附近的人工鱼之间存在相互排斥的影响,而难以向极值点精确逼近,所以,对于某些局部极值不是很严重的具体问题,可以忽略拥挤的因素,从而在简化算法的同时也加快了算法的收敛速度和提高结果的精确程度。

二、源代码

clc,clear,close allwarning offticfigure(1);hold on%% 参数设置fishnum=100; % 生成100只人工鱼MAXGEN=50;   % 最多迭代次数try_number=100;  % 最多试探次数visual=1;    % 感知距离delta=0.618; % 拥挤度因子step=0.1;    % 步长%% 初始化鱼群lb_ub=[-3,3,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)]; endgen=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);    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;    endplot(bestx(1),bestx(2),'ro','MarkerSize',100)xlabel('x')ylabel('y')title('鱼群算法迭代过程中最优坐标移动')%% 优化过程图figureplot(1:MAXGEN,BestY)xlabel('迭代次数')ylabel('优化值')title('鱼群算法迭代过程')disp(['最优解X: ',num2str(bestx','%1.5f   ')])disp(['最优解Y: ',num2str(besty,'%1.5f\n')])tocfunction [Xnext,Ynext]=AF_follow(X,i,visual,step,deta,try_number,LBUB,lastY)% 追尾行为%输入:%X           所有人工鱼的位置%i           当前人工鱼的序号%visual      感知范围%step        最大移动步长�ta        拥挤度%try_number  最大尝试次数%LBUB        各个数的上下限%lastY       上次的各人工鱼位置的食物浓度%输出:%Xnext       Xi人工鱼的下一个位置%Ynext       Xi人工鱼的下一个位置的食物浓度Xi=X(:,i);D=AF_dist(Xi,X);index=find(D>0 & D<visual);nf=length(index);if nf>0    XX=X(:,index);    YY=lastY(index);    [Ymax,Max_index]=max(YY);    Xmax=XX(:,Max_index);    Yi=lastY(i);    if Ymax/nf>deta*Yi;        Xnext=Xi rand*step*(Xmax-Xi)/norm(Xmax-Xi);        for i=1:length(Xnext)            if  Xnext(i)>LBUB(i,2)                Xnext(i)=LBUB(i,2);            end            if  Xnext(i)<LBUB(i,1)                Xnext(i)=LBUB(i,1);            end        end

三、运行结果

四、备注

完整代码或者代写添加QQ912100926

来源:https://www.icode9.com/content-4-896151.html

(0)

相关推荐

  • 点在多边形内部判断

    引用https://blog.csdn.net/hjh2005/article/details/9246967 添加位于顶点和多边形边线上的判断 # 点在多边形内部判断 def pointInPoly ...

  • 快来估分!2020CSP-J2题解和自测

    快来估分啦! 今天上午进行了J组的第二轮认证,小编程家的老师们马不停蹄的完成了考题解题. 为选手们提供第二轮认证线上自测. 请关注[小编程家信奥赛]公众号,点击中间菜单领取课程短码后,到电脑上进行自测 ...

  • 那些可以连读的汉字

    不正是歪,不好是孬,小土是尘,合手是拿,四方木是楞,人工石是砼-- 歪(wāi):不正的合文,可以引申为不正派.斜靠等义. 甭(béng):不用二字的合文,最初为北方方言. 孬(nāo):不好的合文, ...

  • 鲞(xiǎng),是指剖开晒干的鱼,风味...

    鲞(xiǎng),是指剖开晒干的鱼,风味醇厚鲜美,可以长期贮藏,也便于运送.在我国东南沿海,吃鲞有着悠久的历史,晒鲞的场景在渔村也随处可见.鲞,味鲜美且百搭.在沿海各地,人们用不同的食物与之搭配,成就 ...

  • 基于多工况多目标的车身拓扑优化技术研究

    拓扑优化(topology optimization)是一种根据给定的负载情况.约束条件和性能指标,在给定的区域内对材料分布进行优化的数学方法,是结构优化的一种.在现在的汽车或其他行业中,拓扑优化技术 ...

  • 基于动态调度优先级的主动配电网多目标优化调度

    摘要 华北电力大学电气与电子工程学院.蒙东通辽供电公司的研究人员黄伟.熊伟鹏等,在2018年第15期<电工技术学报>上撰文指出,供需互动的主动配电网调度技术为应对可再生能源的高比例接入提供 ...

  • 优化问题的量子加速求解研究

    <中国科学:物理学 力学 天文学>英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA) 2021年第10期出版了清华大学 ...

  • 【优秀作业】人工鱼群优化算法

    人工鱼群优化算法 一.概述 人工鱼群算法(Artificial Fish Swarm Algorithm,简称AFSA)是受鱼群行为的启发,由国内李晓磊博士于2002年提出的一种基于动物行为的群体智能 ...

  • 基于LBP的红外弱小目标检测系统设计

    蒋怡亮,孙宁,翟尚礼 (中国电子科技集团公司 第二十八研究所,南京 210007) 摘要:分析了一种基于局部二元模式(LBP)算子的红外弱小目标检测方法,并根据实际应用背景设计实现了一种红外弱小目标检 ...

  • 基于形态学梯度的红外目标检测

    基于形态学梯度的红外目标检测 基于形态学梯度的红外目标检测 毋亚北,王卫华,吴巨红,陈曾平 (国防科学技术大学 ATR国防重点实验室,长沙 410073) 摘要:对于红外跟踪系统中的低空非合作运动目标 ...

  • 极市直播回放丨第79期-陈鑫:CVPR 2021-​TransT: 基于Transformer的高性能单目标跟踪算法

    相关运算在视觉目标跟踪算法中发挥了重要作用.在跟踪过程中,相关运算通过简单的相似性比较,来完成模板和搜索区域特征的交互,输出一张相似度图来确定目标的位置.然而,相关运算本身是一个局部的线性匹配,导致了 ...

  • 基于人工神经网络的深度学习技术

    人工智能领域的基础技术仍然一直行驶在快车道上,实际用例也如雨后春笋一般涌现,不仅对全球经济产生了巨大影响,也渗透到了人们日常生活的各个方面.那么基于人工神经网络的深度学习技术有哪些形式? 基于人工神经 ...

  • 极市直播丨陈鑫:CVPR 2021-​TransT: 基于Transformer的高性能单目标跟踪算法

    一直以来,为让大家更好地了解学界业界优秀的论文和工作,极市已邀请了超过90位技术大咖嘉宾,并完成了78期极市线上直播分享.往期分享请前往bbs.cvmart.net/topics/149或直接阅读原文 ...