一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【优化算法】人工鱼群优化算法(AFSA)【含Matlab源码 1078期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得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_numberXj=x(i)+Visual.*rand();%人工鱼Xi按式(1)在其视野内随机选择一个状态Xjif 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;elseX_next=x(i)+step*rand();endend
end

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:Nfor j = 1:N   if norm(x(j)-x(i))<Visual         % 求人工鱼Xi与其他人工鱼之间的距离nf = nf+1;                  %统计在视野范围内的鱼数量   X_inside= X_inside+x(j);    %将视野范围内的鱼进行累加endX_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进行觅食行动endend
end

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视野范围内的最高适应度个体Xjfor 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));endend%搜索人工鱼Xj视野范围内的伙伴数量for j = 1:N        if(norm(x(j)-X_max)<Visual)       nf=nf+1;endendnf=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进行觅食行为;end
end

4 算法总述

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

2 分析拥挤度因子δ δδ
2.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]δ=αnmax​1​,α∈(0,1]
  其中α αα为极值接近水平,n m a x n_{max}nmax​为期望在该邻域内聚集的最大人工鱼数目。

2.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}}δ=αnmax​1​
δ n f = n f α n m a x ≤ 1 δn_f =\frac{n_f}{αn_{max}}\leq 1δnf​=αnmax​nf​​≤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 }δnf​Yj​​的等浓度食物圈,则C2与C1间的人工鱼af1、af2、af3执行追尾行动,向af0游动,人工鱼af4、af5执行觅食行为。此时δnf 越大执行追尾行动的人工鱼越少,反之越多。

2.3 拥挤度因子的影响

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

三、部分源代码

clc
clear all
close all
tic
figure(1);
hold on
%%参数设置
fishnum=100;
MAXGEN=50;%最大迭代次数
try_number=100;
visual=2.5;
step=0.3;
delta=0.618;
%初始化鱼群
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(1,MAXGEN);%每步中最优的自变量
besty=-100;%最优函数值
Y=AF_foodconsistence(X);
while gen<=MAXGENfprintf(1,'%d\n',gen)for i=1:fishnum[Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y);%追尾[Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y);%聚群if Yi1>Yi2X(:,i)=Xi1;Y(1,i)=Yi1;elseX(:,i)=Xi2;Y(1,i)=Yi2;endend[Ymax,index]=max(Y);figure(1);plot(X(1,index),X(2,index),'.','color',[gen/MAXGEN,0,0])if Ymax>bestybesty=Ymax;bestx=X(:,index);BestY(gen)=Ymax;[BestX(1,gen)]=X(1,index);[BestX(2,gen)]=X(2,index);elseBestY(gen)=BestY(gen-1);[BestX(:,gen)]=BestX(:,gen-1);endgen=gen+1;end
function [ Xnext,Ynext ] = AF_prey( Xi,ii,visual,step,try_number,LBUB,lastY )
%   input
%Xi 当前人工鱼的位置
%ii当前人工鱼的序号
%step最大移动步长
%try_number最大尝试次数
%LBUB各个数的上下限
%lastY上次的各人工鱼位置的食物浓度%output
%
Xnext=[];
Yi=lastY(ii);
for i=1:try_numberXj=Xi+(2*rand(length(Xi),1)-1)*visual;Yj=AF_foodconsistence(Xj);if Yi<YjXnext=Xi+rand*step*(Xj-Xi)/norm(Xj-Xi);for i=1:length(Xnext)if Xnext(i,1)>LBUB(i,2)Xnext(i,1)=LBUB(i,2);endif Xnext(i,1)<LBUB(i,1)Xnext(i,1)=LBUB(i,1);endendXi=Xnext;break;end
end%随机行为
if isempty(Xnext)Xj=Xi+(2*rand(length(Xi),1)-1)*visual;Xnext=Xj;for i=1:length(Xnext)if Xnext(i,1)>LBUB(i,2)Xnext(i,1)=LBUB(i,2);endif Xnext(i,1)<LBUB(i,1)Xnext(i,1)=LBUB(i,1);endend
end
Ynext=AF_foodconsistence(Xnext);

四、运行结果



五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

【优化算法】人工鱼群优化算法(AFSA)【含Matlab源码 1078期】相关推荐

  1. 【单目标优化求解】基于matlab黑猩猩算法求解单目标问题【含Matlab源码 1413期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab黑猩猩算法求解单目标问题[含Matlab源码 1413期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  2. 【风电功率预测】基于matlab帝国殖民竞争算法优化BP神经网络风电功率预测【含Matlab源码 1314期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [风电功率预测]基于matlab帝国殖民竞争算法优化BP神经网络风电功率预测[含Matlab源码 1314期] ⛄二.帝国殖民竞争算法简 ...

  3. 【APF三维路径规划】基于matlab人工势场算法无人机三维路径规划【含Matlab源码 168期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab人工势场算法无人机三维 ...

  4. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 155期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT算法无人机三维 ...

  5. 【RRT三维路径规划】基于matlab RRT算法无人机三维路径规划【含Matlab源码 1363期】

    一.获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码. 获取代码方式2: 完整代码已上传我的资源:[三维路径规划]基于matlab RRT算法无人机三维 ...

  6. 【物流选址】基于matlab免疫算法求解物流选址问题【含Matlab源码 020期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物流选址]基于matlab免疫算法求解物流选址问题[含Matlab源码 020期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  7. 【A_star三维路径规划】基于matlab A_star算法无人机三维路径规划【含Matlab源码 446期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[三维路径规划]基于matlab A_star算法无人机三维路径规划[含Matlab源码 446期] 获取代码方式2: 付费专栏Matla ...

  8. 【ACO TSP】基于matlab蚁群算法求解31城市旅行商问题【含Matlab源码 1147期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab蚁群算法求解31城市旅行商问题[含Matlab源码 1147期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  9. 【LSSVM回归预测】基于matlab人工蜂群算法优化最小二乘支持向量机LSSVM数据回归预测【含Matlab源码 2213期】

    ⛄一.人工蜂群算法优化最小二乘支持向量机LSSVM简介 1 最小二乘支持向量机 最小二乘支持向量机是支持向量机的一种改进算法[9,10],它将SVM算法中的不等式约束转化为等式约束,采用最小二乘线性系 ...

  10. 【定位问题】RSSI和模拟退火优化粒子群算法求解无线传感器网络定位问题【含Matlab源码 1766期】

    ⛄一.简介 1 引言 随着物联网技术的发展,传感器之间通过通信方式连接在一起,构成了极为庞大的无线传感器网络,这使得传感器在各行各业的应用相当广泛[.然而,因为大规模抛撒的传感器节点无法全部配备价格昂 ...

最新文章

  1. JavaEE路径陷阱之getRealPath
  2. asp按钮跳转页面代码_PHP header常用URL地址跳转的几种方法
  3. Linux LED驱动源码简析
  4. python办公代码_[Python] 自动化办公 docx操作Word基础代码
  5. python比较两个数的和_Python中的is和==比较两个对象的两种方法
  6. Android 内存溢出解决方案(OOM)
  7. Hadoop入门(十四)Mapreduce的数据去重程序
  8. odoo10 继承(扩展)、模块数据
  9. SharePoint 2013 本地开发解决方案以及程调试
  10. layui 传递前端请求_前端请求后端,后端查询完毕传到前端 ,用layui 将 数据分页...
  11. 用html把图片整体往左挪动,网页制作如何让图片从左到右循环移动
  12. 微软商店打不开,闪退,或者根本没反应
  13. oracle 列转行字符串,oracle 字符串列转行
  14. matlab热应力计算,不同温度下热应力的计算 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  15. ContentProvider--共享文件(.jepg文件)
  16. 职场中职员如何向上管理?
  17. eis电子防抖好还是光学防抖好_EIS和OIS有啥差别?一文搞懂手机防抖的那些事儿...
  18. 2021-9-30 背景噪声的研究
  19. 用Python爬虫做一个短视频+评论下载小工具
  20. 虚拟机安装Linux系统

热门文章

  1. 百度文库、豆丁免费下载对应的下载券资源文件
  2. Json类型的转化 及 JsonArray,JsonObject详解
  3. jenkins com.jcraft.jsch.JSchException: Auth cancel
  4. Linux centosVMware mysql用户管理、常用sql语句、mysql数据库备份恢复
  5. NHibernate Issues之1898:命名查询
  6. python之scipy
  7. 190112每日一句
  8. unity远程协同共享leap手势
  9. 扇贝有道180927每日一句
  10. Atitit php db mysql api<?php$mysql_conf = array( ‘host‘ => ‘localhost‘, ‘db‘ => ‘mysql