一、人工鱼群算法简介

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
clear all
Ts=4e-6;
global N deltaf Ji hiss Ptot K h I n m mm
N=12;
L=3;
deltaf=0.3125e+6;
B1=1e+6;
B2=2e+6;
B3=5e+6;
sigma2=1e-8;
h1sp=10^(-0.5);
h2sp=10^(-7/10);
h3sp=10^(-10/10);
Ith1=1e-6;
Ith2=[0.02 0.03 0.04 0.05 0.06 0.08 0.1 0.2 0.3 0.5 0.7 1]*10^-5;
Ith3=5e-6;
Ptot=5e-4;
hlsp=[h1sp h2sp h3sp];
K=Kil(Ts,N,L,deltaf,B1,B2,B3);
MM=2;
C_o=zeros(MM,length(Ith2));
C_s=zeros(MM,length(Ith2));
C_u=zeros(MM,length(Ith2));
C_w=zeros(MM,length(Ith2));
C_o1=zeros(MM,length(Ith2));
C_s1=zeros(MM,length(Ith2));
C_u1=zeros(MM,length(Ith2));
C_w1=zeros(MM,length(Ith2));
for mm=1:MM
Ji=random('norm',1e-6,1e-8,12,3);
hiss=random('rayleigh',0.1/1.253,1,N);
h=hiss./(sigma2+sum(transpose(Ji)));
M=2;
CC=zeros(M,length(Ith2));
C_sub=zeros(1,length(Ith2));
C_uniform=zeros(1,length(Ith2));
C_water=zeros(1,length(Ith2));
%***********固定Ptot,比较Ith(2)***************
for n=1:length(Ith2)
Ith=[Ith1 Ith2(n) Ith3];
I=Ith./hlsp;
for m=1:2
[C,p_AF]=AF_main(I,Ptot);
CC(m,n)=C;
end
[C_sub(n),p_sub]=sub(I,Ptot);
[C_uniform(n),p_uniform]=uniform(I,Ptot);%平均功率分配算法
[C_water(n),p_water]=water_filling(I,Ptot);%注水算法
end
C_AF=sum(CC)/M*deltaf;
C_o(mm,:)=C_AF;
C_s(mm,:)=C_sub;
C_u(mm,:)=C_uniform;
C_w(mm,:)=C_water;
%***********固定Ith(2),比较Ptot***************
Pt=[0.0125 0.025 0.03 0.05 0.065 0.075 0.1 0.2 0.3 0.5 0.8 1]*10^-3;
Ith=[Ith1 Ith2(6) Ith3];
I=Ith./hlsp;
for nn=1:length(Pt)
Ptot=Pt(nn);
for m=1:M
[C,p_AF]=AF_main(I,Ptot);
CC(m,nn)=C;
end
[C_sub(nn),p_sub]=sub(I,Ptot);
[C_uniform(nn),p_uniform]=uniform(I,Ptot);%平均功率分配算法
[C_water(nn),p_water]=water_filling(I,Ptot);%注水算法
end
C_AF=sum(CC)/M*deltaf;
C_o1(mm,:)=C_AF;
C_s1(mm,:)=C_sub;
C_u1(mm,:)=C_uniform;
C_w1(mm,:)=C_water;
end
C_AF=sum(C_o)/MM;
C_sub=sum(C_s)/MM;
C_water=sum(C_w)/MM;
C_uniform=sum(C_u)/MM;
figure(3)
plot(Ith2,C_AF,'-rv',Ith2,C_sub,'-x',Ith2,C_water,'-ko',Ith2,C_uniform,'-gs');
grid on
xlabel('Interference introduced to 2th PU band(in watts)');
ylabel('Transmission date rate of CR user(in bps)');
legend('AF','Sub','Water-filling','Uniform',0);C_AF=sum(C_o1)/MM;
C_sub=sum(C_s1)/MM;
C_water=sum(C_w1)/MM;
C_uniform=sum(C_u1)/MM;
figure(4)
plot(Pt,C_AF,'-rv',Pt,C_sub,'-x',Pt,C_water,'-ko',Pt,C_uniform,'-gs');
grid on
xlabel('Power budget(in watts)');
ylabel('Transmission date rate of CR user(in bps)');
legend('AF','Sub','Water-filling','Uniform',0);function K=Kil(Ts,N,L,deltaf,B1,B2,B3)
d=[3.5*deltaf+B1 7.5*deltaf+B1+B2 11.5*deltaf+B1+B2+B3;2.5*deltaf+B1 6.5*deltaf+B1+B2 10.5*deltaf+B1+B2+B3;1.5*deltaf+B1 5.5*deltaf+B1+B2 9.5*deltaf+B1+B2+B3;0.5*deltaf+B1 4.5*deltaf+B1+B2 8.5*deltaf+B1+B2+B3;0.5*deltaf+B1 3.5*deltaf+B2 7.5*deltaf+B2+B3;1.5*deltaf+B1 2.5*deltaf+B2 6.5*deltaf+B2+B3;2.5*deltaf+B1 1.5*deltaf+B2 5.5*deltaf+B2+B3;3.5*deltaf+B1 0.5*deltaf+B2 4.5*deltaf+B2+B3;4.5*deltaf+B1+B2 0.5*deltaf+B2 3.5*deltaf+B3;5.5*deltaf+B1+B2 1.5*deltaf+B2 2.5*deltaf+B3;6.5*deltaf+B1+B2 2.5*deltaf+B2 1.5*deltaf+B3;7.5*deltaf+B1+B2 3.5*deltaf+B2 0.5*deltaf+B3];%积分上限
xiaxian=[B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3;B1 B2 B3];
d1=d-xiaxian;%积分下限
I=zeros(N,L);K(i,j)=quadl(IF,d1(i,j),d(i,j));
end
end

三、运行结果



四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【优化分配】基于matlab鱼群算法求解无线电功率分配优化问题【含Matlab源码 1523期】相关推荐

  1. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  2. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  3. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  5. 【Matlab通信】DTMF双音多频电话拨号仿真【含GUI源码 805期】

    一.代码运行视频(哔哩哔哩) [Matlab通信]DTMF双音多频电话拨号仿真[含GUI源码 805期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  6. 【Matlab心音信号】EMD心音信号特征提取【含GUI源码 1735期】

    一.代码运行视频(哔哩哔哩) [Matlab心音信号]EMD心音信号特征提取[含GUI源码 1735期] 二.matlab版本及参考文献 1 matlab版本 2014a *2 参考文献 [1] 沈再 ...

  7. 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码

    1 简介 基于粒子群算法求解配电网抢修选址优化问题​. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)​plot(model.trou ...

  8. 【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  9. 【Matlab优化覆盖】虚拟力算法求解无线网络传感覆盖优化问题【含源码 1187期】

    一.代码运行视频(哔哩哔哩) [Matlab优化覆盖]虚拟力算法求解无线网络传感覆盖优化问题[含源码 1187期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  10. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

最新文章

  1. FPGA的设计艺术(2)FPGA开发流程
  2. 15家大数据公司被调查,数据行业面临大清洗?
  3. spark代码连接hive_Spark SQL入门到实战之(7)spark连接hive(spark-shell和eclipse两种方式)...
  4. 10以内数的组成分解图_大班数学教案《10以内数的组成》
  5. java的标识符可以以数字开头_标识符可以以数字开头,但不能是Java中的关键字...
  6. mtk 驱动(55)---mtk指纹移植
  7. Jmeter中的几种协议
  8. abb变频器正反转切换参数_变频器自动节能功能与电动机正反转图解
  9. windows中的过滤绑定如何动态卸载
  10. MYSQL当前时间与数据库里数据时间做比较
  11. 分表用到的一些函数/php mysql 前面补0
  12. c# 盖尔-沙普利算法的改进
  13. 斐讯盒子t1 刷Android,斐讯盒子T1/N1刷机流水账
  14. 迅雷手机版苹果版_迅雷IOS版恢复下载,又能用苹果手机下载电影愉快追剧了
  15. 中学生读以奋斗者为本有感3500字
  16. 如何备份你的 QQ 空间相册
  17. Edge浏览器安装插件报错:显示出现错误 Download interrupted
  18. Sentry For React 完整接入详解(2021 Sentry v21.8.x)前方高能预警!三万字,慎入!
  19. YouTube 十岁了,这十年里视频网站改变了什么?
  20. 网络基础12--工程师向

热门文章

  1. Git-第N篇碰见的一些问题
  2. java学习--基础知识阶段性总结--多线程
  3. python3之urllib代理池
  4. 查找本库包括某字段的全部表
  5. mongodb简单安装
  6. 好风凭借力,送我上青云!
  7. RCNN数字识别时训练数据集制作
  8. 20191117每日一句 EVERYBODY DIES, BUT NOT EVERYBODY LIVES
  9. 181112每日一句
  10. Atitit 架构师之道 attilax著 1.1. 认和评估系统需求, 2 1.2. 给出开发规范 2 1.3. ,搭建系统实现的核心构架, 2 1.4. 扫清主要难点的技术人员 2 1.5. 核