收藏 分销(赏)

人工鱼群算法matlab实现doc资料.doc

上传人:a199****6536 文档编号:1681898 上传时间:2024-05-07 格式:DOC 页数:7 大小:30.50KB
下载 相关 举报
人工鱼群算法matlab实现doc资料.doc_第1页
第1页 / 共7页
人工鱼群算法matlab实现doc资料.doc_第2页
第2页 / 共7页
人工鱼群算法matlab实现doc资料.doc_第3页
第3页 / 共7页
人工鱼群算法matlab实现doc资料.doc_第4页
第4页 / 共7页
人工鱼群算法matlab实现doc资料.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、人工鱼群算法matlab实现function lhl_AFclc;clear all; close all;format longVisual = 2.5; %人工鱼的感知距离Step = 0.3; %人工鱼的移动最大步长N = 10; %人工鱼的数量Try_number = 50;%迭代的最大次数delta=0.618; %拥挤度因子a1 = -10; b1 = 10; a2 = -10; b2 = 10; d = ;%存储50个状态下的目标函数值;k = 0; m = 50;%迭代次数X1 = rand(N,1)*(b1-a1)+a1; %在-1010之间,随机生成50个数;X2 = ra

2、nd(N,1)*(b2-a2)+a2;X = X1 X2; %X = ones(N,2);%for i = 1:N% X(i,1)=-10;% X(i,2)=10;%end% 人工鱼数量,两个状态变量X1和X2;%计算50个初始状态下的;for i = 1:N www = X(i,1),X(i,2); d(i) = maxf(www); end%公告牌用于记录人工鱼个体的历史最好状态w,i = max(d); % 求出初始状态下的最大值w和最大值的位置i;maxX = X(i,1),X(i,2); % 初始公告板记录,最大值位置;maxY = w; % 初始化公告板记录,最大值;figurex

3、 = ; figurey = ; figurez = ;figurex(numel(figurex)+1) = maxX(1); % 将maxX(1)放入figurex中,figurey(numel(figurey)+1) = maxX(2); % numel返回数组或者向量中所含元素的总数,matlab数组下标默认是从1开始的figurez(numel(figurez)+1) = maxY;while(km) for i = 1:N XX = X(i,1),X(i,2); %拿出其中一条鱼来看他的四种行为判断 %第一种行为:聚群行为:伙伴多且不挤,就向伙伴中心位置移动%群聚行为是伙伴的中心点

4、,凸规划下,中心点一定还在约束内%群聚行为不是一种maxf(Xc)的比较,就是看伙伴位置 nf1=0; Xc=0; label_swarm =0; %群聚行为发生标志 for j = 1:N XX_1 = X(j,1), X(j,2); if (norm(XX_1-XX) delta*maxf(XX) & (norm(Xc-XX)=0) XXR1=rand*Step*(Xc-XX)/norm(Xc-XX); XXnext1=XX+XXR1; if(XXnext1(1) b1) XXnext1(1) = b1; end if(XXnext1(1) b2) XXnext1(2) = b2; end

5、 if(XXnext1(2) a2) XXnext1(2) = a2; end label_swarm =1; temp_y_XXnext1=maxf(XXnext1); else label_swarm =0; temp_y_XXnext1=-inf; end %第二种行为:追尾行为 :周围伙伴有最大值且附近不挤,向其伙伴方向移动%追尾行为追寻伙伴行为,还是在约束内 temp_maxY = -inf; %按照理论来说这块应该初始化为-无穷小, label_follow =0;%追尾行为发生标记 for j = 1:N XX_2 = X(j,1),X(j,2); if(norm(XX_2-XX

6、)temp_maxY) temp_maxX = XX_2; temp_maxY = maxf(XX_2); end end nf2=0; for j = 1:N XX_2 = X(j,1),X(j,2); if(norm(XX_2-temp_maxX)delta*maxf(XX) & (norm(temp_maxX-XX)=0) %附近有Yj最大的伙伴,并且不太拥挤 XXR2=rand*Step*(temp_maxX-XX)/norm(temp_maxX-XX);%rand不是随机反向,是随机步长 XXnext2 = XX+XXR2; if(XXnext2(1) b1) XXnext2(1)

7、= b1; end if(XXnext2(1) b2) XXnext2(2) = b2; end if(XXnext2(2) b1) % 下面这四个是一套,如果超出约束条件,就选值为边界条件 XX_3(1) = b1; end if(XX_3(1) b2) XX_3(2) = b2; end if(XX_3(2) a2) XX_3(2) = a2; end if(maxf(XX) b1) % 下面这四个是一套,如果超出约束条件,就选值为边界条件 XXnext3(1) = b1; end if(XXnext3(1) b2) XXnext3(2) = b2; end if(XXnext3(2) b

8、1) % 下面这四个是一套,如果超出约束条件,就选值为边界条件 XX(1) = b1; end if(XX(1) b2) XX(2) = b2; end if(XX(2) temp_y_XXnext2) if(temp_y_XXnext1 temp_y_XXnext3) temp_XX = XXnext1; else temp_XX = XXnext3; end else if(temp_y_XXnext2 temp_y_XXnext3) temp_XX = XXnext2; else temp_XX = XXnext3; end end end XX=temp_XX; X(i,1) = XX

9、(1); X(i,2) = XX(2); % end %至此,所有人工鱼,完成一次行为判断和移动 %这块是更新公告牌信息 for i = 1:N XXX = X(i,1),X(i,2); if (maxf(XXX)maxY) maxY = maxf(XXX); maxX = XXX; figurex(numel(figurex)+1) = maxX(1); figurey(numel(figurey)+1) = maxX(2); figurez(numel(figurez)+1) = maxY; end end x=X(:,1); y=X(:,2); plot(x,y,*r); axis(-10 10 -10 10); k = k+1endmaxXmaxYplot3(figurex,figurey,figurez,-g.)function y = maxf(QQ)%目标函数y=(sinX1/X1)*(sinX2/X2),这块可以指定自己的目标函数%输入二维向量,输出一个值y = (sin(QQ(1)/QQ(1)*(sin(QQ(2)/QQ(2);

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服