【优化求解】人工鱼群算法AF matlab源码

一、简介

1.1 觅食行为\   指鱼循着食物多的方向游动的一种行为,人工鱼X i XiXi​在其视野内随机选择一个状态X j XjXj​,分别计算它们的目标函数值进行比较,如果发现Y j YjYj​比Y i YiYi​优(Y j YjYj​和Y i YiYi​分别为X j XjXj​和X i XiXi​的适应度值),则Xi向Xj的方向移动一步;否则,X i XiXi​继续在其视野内选择状态X j XjXj​,判断是否满足前进条件,反复尝试t r y n u m b e r trynumbertrynumber次后,仍没有满足前进条件,则随机移动一步使X i XiXi​到达一个新的状态。表达式如下:\ X j = X i + r a n d ( ) ∗ v i s u a l (1) Xj=Xi+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}=Xi+rand()step\frac{Xj-Xi}{\left | \left | Xj-Xi \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:N

for j = 1:Try_number

Xj=x(i)+Visual.*rand();%人工鱼Xi按式(1)在其视野内随机选择一个状态Xj

if f(Xj)

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

end

end ```

1.2 聚群行为

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

在这里插入图片描述\ 伪代码段如下:

```

nf=0;X_inside=0;

for i = 1:N

for j = 1:N

if norm(x(j)-x(i))

nf = nf+1; %统计在视野范围内的鱼数量

Xinside= Xinside+x(j); %将视野范围内的鱼进行累加

end

Xinside=Xinside-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)+randStep(Xc-x(i))/norm(Xc-x(i));

else

进行觅食行动

end

end

end ```

1.3 追尾行为

指鱼向其视野区域内的最优方向移动的一种行为。人工鱼X i XiXi​搜索其视野内(d i j < v i s u a l d_{ij}\jXj​,其适应度值为Y j YjYj​,并探索人工鱼X j XjXj​视野内的伙伴数目n f nfnf​,若Y j / n f < δ Y i Yj/nf< δYiYj​/nf​<δYi​,表明X j XjXj​状态较优且不太拥挤,则X i XiXi​朝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))

X_max=x(j);

Y_max=f(x(j));

end

end

%搜索人工鱼Xj视野范围内的伙伴数量

for j = 1:N

if(norm(x(j)-X_max)

nf=nf+1;

end

end

nf=nf-1;%去掉他本身

if Y_max/nf

xnext= x(i,:)+rand*Step.*(tempmaxX-x(i,:))./norm(temp_maxX-x(i,:));

else

进行觅食行为;

end

end ```

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

3.2 拥挤度因子的作用机理

对追尾行为的描述\ 在这里插入图片描述\ 图中af0为人工鱼af1-5在各自视野内的最优人工鱼,其实物浓度为Y j YjYj​,C1为以af0为圆心,以视野范围为半径的圆,即能探知af0的最远距离,人工鱼越靠近af0,状态越优。\   求极大值情况下:当δ n f ≤ 1 δnf\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 δnf =\frac{nf}{α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 δnf >1δnf​>1时,若C2的食物浓度为Y j δ n f \frac{Yj}{δn_f }δnf​Yj​​的等浓度食物圈,则C2与C1间的人工鱼af1、af2、af3执行追尾行动,向af0游动,人工鱼af4、af5执行觅食行为。此时δnf 越大执行追尾行动的人工鱼越少,反之越多。

3.2 拥挤度因子的影响

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

二、源代码

``` 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=[-3,3,2;];

X=AFinit(fishnum,lbub); % 初始化

LBUB=[];

for i=1:size(lb_ub,1)

LBUB=[LBUB;repmat(lbub(i,1:2),lbub(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]=AFswarm(X,i,visual,step,delta,trynumber,LBUB,Y);

% 追尾行为

[Xi2,Yi2]=AFfollow(X,i,visual,step,delta,trynumber,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;

end ```

三、运行结果

在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述

🎈 部分理论引用网络文献,若有侵权联系博主删除
👇 关注我领取海量matlab电子书和数学建模资料

🎁 私信完整代码和数据获取及论文数模仿真定制

🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌈图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌈 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
🌈 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
🌈 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌈 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌈电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
🌈 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌈 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌈 车间调度
零等待流水车间调度问题NWFSP置换流水车间调度问题PFSP混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP

​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值