目录
人工鱼群优化算法(Artificial Fish Swarm Algorithm, AFSO)是一种受到鱼类社会行为启发的群体智能优化方法,由Li Yuhong等人于2002年提出。该算法模拟了鱼类在自然环境中的觅食、聚群、追尾、避障等行为,将这些行为映射为搜索空间中的优化策略,从而解决各类优化问题。AFSO因其简单易行、计算效率高和较好的全局搜索能力,在工程优化、模式识别、机器学习等领域得到了广泛应用。
1.人工鱼群优化基本算法原理
人工鱼群优化算法的核心在于通过模拟鱼类的四种典型行为来指导搜索过程:
- 觅食行为:模拟鱼类寻找食物源的过程,驱使鱼群向目标函数值更优的方向移动。
- 聚群行为:模拟鱼类的群集本能,促进鱼群在搜索空间中形成局部密集区域,有助于探索可能的最优解。
- 追尾行为:模仿鱼类间的追逐行为,使得部分鱼跟随领头鱼游动,加速优化进程。
- 避障行为:反映鱼类避免危险区域的能力,帮助算法跳出局部最优。
2.人工鱼群优化基本算法的数学公式
2.1 鱼的位置与速度更新
其中,w为惯性权重,c1和c2分别为追尾和觅食行为的加速度系数,r1和r2为[0,1]之间的随机数,si为第i条鱼的追尾目标位置,g为当前全局最优解。
3.2 行为决策
-
觅食行为: 鱼类倾向于向食物更丰富(即目标函数值更低)的区域移动,因此g作为全局最优解,引导鱼群向更优解方向探索。
-
聚群行为: 每条鱼都有一个感知范围R,若其他鱼位于此范围内,则该鱼会调整其位置向这些鱼的中心位置靠近,以模拟聚群现象。聚群行为的数学表达式较为复杂,通常涉及对周围鱼的位置进行加权平均。
-
追尾行为: 选择距离最近且目标函数值更优的鱼作为追尾目标,即si,通过上述速度更新公式中的第二项实现。
-
避障行为: 在某些应用场景中,可以设定障碍区域,当鱼接近障碍时,通过特定规则调整其速度,避免进入不利区域。
3.3 参数设置与算法流程
- 初始化:随机生成鱼群的初始位置和速度,确定算法参数如w,c1,c2,R等。
- 评估:计算每条鱼当前位置的目标函数值。
- 更新:依据上述行为规则更新每条鱼的位置和速度。
- 决策:根据聚群和追尾行为调整鱼的位置。
- 检查终止条件:达到最大迭代次数或找到满意解时停止算法。
4.MATLAB程序
..................................................................
fishnum=50;% 设置人工鱼数量为50条
MAXGEN=50; % 设置最大迭代次数为50次
try_number=100;% 设置每条人工鱼的最大试探次数为100次
visual=1; % 设置人工鱼的感知距离为1
delta=0.618; % 设置拥挤度因子为黄金分割比例0.618
step=0.1; % 设置步长为0.1
% 设置问题的搜索空间界限
lb_ub=[-1,2,1];% 三维向量,分别表示左边界、右边界和维数
X=func_init(fishnum,lb_ub);% 通过func_init函数生成初始的人工鱼群位置矩阵X
LBUB=[];% 初始化边界矩阵LBUB
for i=1:size(lb_ub,1)
LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)];% 将每个维度的边界复制lb_ub(i,3)次,组成完整的边界矩阵
end
gen=1;% 初始化迭代代数
BestY=-1*ones(1,MAXGEN); % 初始化存储最优函数值的历史记录向量
BestX=-1*ones(1,MAXGEN);% 初始化存储最优自变量历史记录矩阵
besty=-100; % 初始化全局最优函数值为负无穷小
Y=func_fitness(X);% 计算初始状态下人工鱼群的所有个体适应度值
while gen<=MAXGEN% 开始迭代过程
fprintf(1,'%d\n',gen)
for i=1:fishnum
% 聚群行为阶段
[Xi1,Yi1]=func_swarm(X,i,visual,step,delta,try_number,LBUB,Y);
% 追尾行为阶段
[Xi2,Yi2]=func_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),Ymax,'.','color',[gen/MAXGEN,0,0])% 在图形窗口1中绘制当前迭代中最佳个体的位置
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),besty,'bs','MarkerSize',36)
xlabel('x')
ylabel('y')
title('鱼群算法迭代过程中最优坐标移动')
figure
plot(1:MAXGEN,BestY)
xlabel('迭代次数')
ylabel('优化值')
title('鱼群算法迭代过程')
up4081
5.MATLAB仿真结果
人工鱼群算法适用于各种优化问题,如参数优化、功能优化、调度问题等,特别是在搜索空间大且问题复杂时,其优势更为明显。它通过简单的行为规则和群体协作机制,能够有效地避免局部最优,寻找全局最优解。