人工鱼群算法是指在一片水域中,鱼往往能自行或尾随其他鱼找到营养物质多的地方,因而鱼生存数目最多的地方一般就是本水域中营养物质最多的地方,人工鱼群算法就是根据这一特点,通过构造人工鱼来模仿鱼群的觅食、聚群及追尾行为,从而实现寻优。人工鱼群
鱼类通常具有以下行为:觅食行为:这是生物一种最基本的行为,也是趋向食物的一种活动;一般认为这种行为是通过视觉或味觉感知水中的食物量或浓度来选择趋向的。聚群行为:这是鱼类常见的一种现象,大量或少量的鱼都能聚集成群,这是它们在进化过程中形成的一种生存方式,可以进行集体觅食或躲避敌害。随机行为:鱼在水中悠闲自由游动,基本上是随机的,其实它们也是为了更大范围地寻找食物和伙伴。
以上活动是鱼的几个典型的行为,这些行为在不同时刻会相互转化,而这种转换通常是鱼通过对环境的感知来自主实现的,这些行为与鱼的觅食和生存都存在着密切的关系,并且与优化问题的解决也有着密切的关系。
详细代码和过程可以私聊笔者或评论
% 鱼群算法
clear
clc
figure(1)
hold on
% 参数设置及鱼群初始化
fishnum = 100;
maxgen = 50;
trynumber = 100;
visual = 2.5;
delta = 0.618;
step = 0.3;
lb_ub = [-10,10,2;];
x = afinit(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 = affood(x);
while gen < maxgenfor i &#61; fishnum[xi1,yi1] &#61; afswarm(x,i,visual,step,delta,trynumber,lbub,y); % 聚群行为[xi2,yi2] &#61; affollow(x,i,visual,step,delta,trynumber,lbub,y); % 追尾行为endif yi1 > yi2x(:,i) &#61; xi1;y(1,i) &#61; yi1;elsex(:,i) &#61; xi2;y(1,i) &#61; yi2;end[ymax,index] &#61; max(y);figure(1)hold onplot(x(1,index),x(2,index),&#39;.&#39;,&#39;color&#39;,[gen/maxgen,0,0])hold onif ymax > bestybesty &#61; ymax;bestx &#61; x(:,index);BestY(gen) &#61; ymax;[BestX(:,gen)] &#61; x(:,index);elseBestY(gen) &#61; BestY(gen-1);[BestX(:,gen)] &#61; BestX(:,gen-1);endgen &#61; gen &#43; 1;
end
plot(bestx(1),bestx(2),&#39;ro&#39;,&#39;MarkerSize&#39;,100)
ylabel(&#39;y&#39;)
title(&#39;鱼群算法在迭代过程中最优坐标的移动&#39;)
figure
plot(1:maxgen,BestY)
xlabel(&#39;迭代次数&#39;)
ylabel(&#39;优化值&#39;)
title(&#39;迭代过程&#39;)
disp([&#39;最优解X&#39;,num2str(bestx&#39;,&#39;%1.5f&#39;)])
disp([&#39;最优解Y&#39;,num2str(besty,&#39;%1.5f&#39;)])
xlabel(&#39;x&#39;)
详细代码和过程可以私聊笔者或评论
很感谢你能看到这里&#xff0c;向你比心哦。
关于此类问题&#xff0c;如果还有问题可以参看我的其他文章,如果能帮助到大家&#xff0c;是笔者的荣幸。
多种群遗传算法的函数寻优
遗传算法与非线性规划求解
GA在一般线性或非线性规划问题中的应用
浅谈使用遗传算法工具箱的优化实例