1 简介

2001年李晓磊[1]通过模仿鱼类觅食行为将动物自治体概念引入到群体优化方法中,提出了人工鱼 群 算 法(ArtificialFishSwarm Algorithm)思想。



【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法

【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_02


【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_03

【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_04

2 部分代码

clc
clear all
close all
tic
figure(1);hold on
%% 参数设置
fishnum=100; %生成100只人工鱼
MAXGEN=50; %最多迭代次数
try_number=100;%最多试探次数
visual=1; %感知距离
delta=0.618; %拥挤度因子
step=0.1; %步长
%% 初始化鱼群
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(2,MAXGEN); %每步中最优的自变量
besty=-100; %最优函数值
Y=AF_foodconsistence(X);
while gen<=MAXGEN
fprintf(1,'%d\n',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;
end
plot(bestx(1),bestx(2),'ro','MarkerSize',100)
xlabel('x')
ylabel('y')
title('鱼群算法迭代过程中最优坐标移动')

%% 优化过程图
figure
plot(1:MAXGEN,BestY)
xlabel('迭代次数')
ylabel('优化值')
title('鱼群算法迭代过程')
disp(['最优解X:',num2str(bestx','%1.5f')])
disp(['最优解Y:',num2str(besty,'%1.5f')])
toc
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './运行结果.png') %即可得到对应格式和期望dpi的图像


3 仿真结果

【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_05【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_06

【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_07【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_08

4 参考文献

[1]李晓磊, 邵之江, and 钱积新. "一种基于动物自治体的寻优模式:鱼群算法." 系统工程理论与实践 22.11(2002):32-38.



【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_09

【优化求解】基于鱼群算法求解最优目标matlab源码_人工鱼群算法_10