⛄一、 TSP简介

旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
TSP的数学模型

⛄二、人工鱼群算法简介

1 AFSA的基本思想
人工鱼群算法(artificial fish-swarm algorithm,AFSA)是由李晓磊博士在2002年提出的一种群体智能优化算法。其基本思想是仿照鱼群在一片水域当中寻找最优解的觅食、聚群和追尾等行为,水域中的每一条鱼都对应其中的一个优化解,该水域即为被优化问题的解空间。通过分析人工鱼群的优化理念,可得其人工鱼环境模型如图4所示。假设水域中一条鱼现时状态是X,其可见范围为Visual(公式中用Zvisual表示),在某一时间点对应的视点位置为X k,如果该方位较此时状态更优,则可往该地点处向前一步,即抵达X next;若该方位无此时状态更优,则一直在可见视线内找寻其他较优地点。

2 AFSA路径规划中的具体步骤
1)初始化设置。对鱼群中的各个参数进行初始设置,包括:该人工鱼群的群体规模、视野、最大迭代次数、每一条鱼的最大移动步长Step(公式中用Lstep)等参数。
2)此时迭代的次数是0,由N条鱼组成初始鱼群,每个鱼表示从初始位置到目标位置的一条路径。
3)对每一条人工鱼都进行行为模拟:觅食、追尾、聚群与随机移动行为,选取其中最优的一种行为来操作。
2.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.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

2.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

2.4 算法总述
综上所述,算法在运算过程中,会同时进行聚群和追尾行为。而觅食行为属于这两种行为中发现聚群对象或者追尾对象附近拥挤度过大时,人工鱼选择的行为方式,若在觅食过程中,未发现比自身适应度高的人工鱼,则按步长step随机移动。最后对聚群行为和追尾行为得到的适应度值进行比较,选择优秀的人工鱼作为下一代的个体。其总框架图如下:

3 分析拥挤度因子δ
3.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​为期望在该邻域内聚集的最大人工鱼数目。

3.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 越大执行追尾行动的人工鱼越少,反之越多。

3.2 拥挤度因子的影响
以极大值为例(极小值的情况正好和极大值相反), δ δδ越大,表明允许的拥挤程度越小,人工鱼摆脱局部最优的能力越强;但是收敛的速度会有所减缓,这主要因为人工鱼在逼近极值的同时,会因避免过分拥挤而随机走开或者受其它人工鱼的排斥作用,不能精确逼近极值点。可见,δ δδ的引入避免了人工鱼过度拥挤而陷入局部极值,另一方面,该参数会使得位于极值点附近的人工鱼之间存在相互排斥的影响,而难以向极值点精确逼近,所以,对于某些局部极值不是很严重的具体问题,可以忽略拥挤的因素,从而在简化算法的同时也加快了算法的收敛速度和提高结果的精确程度。

⛄三、部分源代码

clear
tic
afNum=50; %人工鱼个数
iterativeTime=100; %迭代次数
try_number=100; %随机试探次数
crowd=0.618; %拥挤度因子
sim_model=48;
cityPosition=AFTSP_cityPosition(sim_model);
cityNum=length(cityPosition); %城市个数
pcross=0.15; %引入交换因子
crossNum=ceil(pcrosscityNum); %交换位数
for i=1:cityNum %任意两城市间距离
Distance(i,i)=inf;
for j=i+1:cityNum
Distance(i,j)=norm(cityPosition(i,:)-cityPosition(j,:));
Distance(j,i)=Distance(i,j);
end
end
for i=1:afNum %初始化
X(i,:)=AFTSP_init(cityNum);
Ytemp(i)=AFTSP_foodconsistence(X(i,:),Distance);
end
[a b]=min(Ytemp);
YBest=a;
XBest=X(b,:);
k=1;
Ybest=zeros(1,iterativeTime);
while(k<=iterativeTime)
visual=ceil((4/5-k/(2
iterativeTime))cityNum);
for i=1:afNum
[Xi,flag1]=AFTSP_follow(X,afNum,cityNum,visual,crowd,i,Distance,crossNum); %尝试追尾行为
if(flag10)
[Xi,flag2]=AFTSP_swarm(X,afNum,cityNum,visual,crowd,i,Distance,crossNum); %尝试聚群行为
if(flag20)
Xi=AFTSP_prey(X,cityNum,i,visual,try_number,Distance,crossNum); %再尝试觅食行为
end
end
%下面为考虑公告板的吸引力
Xii=Xi;
diff1=find(Xii~=XBest); %求出Xi和XBest中对应元素不一样的位置
if(length(diff1)>0)
a=randperm(length(diff1));%在随机的floor(length(diff1)/2)个不一样的位置赋XBest的值
for ii=1:floor(length(diff1)/2)
Xii(a(ii))=XBest(a(ii));
end
diff2=find(Xii~=XBest);
iii=1;
temp1=[];
for ii=1:cityNum %找出赋值后没有出现的城市号
if(sum(ii==Xii)0)
temp1(iii)=ii;
iii=iii+1;
end
end
iii=1;
temp2=[];
for ii=1:cityNum %找出赋值后出现两次的城市号
if(sum(iiXii)==2)
temp2(iii)=ii;
iii=iii+1;
end
end
iii=1;
temp3=[];
for ii=1:length(diff2) %出现两次的城市在赋值后不同位置的位置
if(sum(Xii(diff2(ii))==temp2)==1)
temp3(iii)=ii;
iii=iii+1;
end
end
for ii=1:length(temp1) %把没出现的城市的位置赋到出现两次的城市在赋值后不同位置的位置上
Xii(diff2(temp3(ii)))=temp1(ii);
end
end
if(AFTSP_foodconsistence((Xii),Distance)<AFTSP_foodconsistence((Xi),Distance))
Xi=Xii;
end
if(AFTSP_foodconsistence((Xi),Distance)<YBest)
XBest=Xi;
YBest=AFTSP_foodconsistence((Xi),Distance);
end
X(ceil(rand
cityNum),:)=XBest;
end
disp([‘第’,num2str(k),‘次迭代,得出的最优值:’,num2str(YBest)]);
k=k+1;
end
s=num2str(XBest(1));
for i=2:cityNum
s=strcat(s,‘->’);
s=strcat(s,num2str(XBest(i)));
end
s=strcat(s,‘->’);
s=strcat(s,num2str(XBest(1)));
disp([‘得出的最优路径:’,s,‘,最优值:’,num2str(YBest)]);
toc
% plot(Ybest);
% title(‘最优值随迭代次数变化曲线’);
% xlabel(‘迭代次数’);
% ylabel(‘最优值’);
% figure(2);
% for i=1:cityNum-1
% plot([cityPosition(XBest(i),1),cityPosition(XBest(i+1),1)],[cityPosition(XBest(i),2),cityPosition(XBest(i+1),2)]);
% hold on;
% end
% plot([cityPosition(XBest(cityNum),1),cityPosition(XBest(1),1)],[cityPosition(XBest(cityNum),2),cityPosition(XBest(1),2)]);

⛄四、运行结果

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 程春英,李海峰,包春花.求解TSP问题的人工鱼群算法[J].电脑知识与技术. 2014,10(19)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【AFSA TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】相关推荐

  1. 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  2. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

  3. 【Matlab语音分析】语音信号分析【含GUI源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...

  4. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  5. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  6. 【Matlab水果识别】自助水果超市【含GUI源码 594期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]自助水果超市[含GUI源码 594期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]倪云峰,叶健,樊娇娇 ...

  7. 【路径规划-TSP问题】基于粒子群结合蚁群算法求解旅行商问题附matlab代码

    1 内容介绍 一种基于粒子群优化的蚁群算法求解TSP问题的方法.该方法在求解TSP问题时,利用粒子群优化的思想,对蚁群算法的参数取值进行优化并选择.在粒子群算法中,将蚁群算法的5个参数(q,α,β,ρ ...

  8. 【ACO TSP】基于matlab改进的蚁群算法求解旅行商问题【含Matlab源码 242期】

    ⛄一.TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  9. 改进的人工鱼群算法求解TSP问题的研究(Matlab代码实现)

最新文章

  1. 创业丨中国人工智能领域投资机构10强榜单
  2. Cookie的简单实用
  3. Webpack-IE低版本兼容指南
  4. table T371A field IBTYP的search help
  5. SQL求一个表中非重复数据及其出现的次数
  6. oracle--索引--
  7. PAT (Basic Level) Practice1005 继续(3n+1)猜想
  8. 创意书签名字_给书签作品起名字-给书签起名字
  9. 计算机桌面声音图标,win7桌面右下角的小喇叭音量图标不见了怎么办?
  10. 在VMware上搭建iPhone开发环境(转)
  11. 绝了,项目内部源码资源被爆出!网友:请收下我的膝盖!
  12. 精玉PC技术GHOSTXP_SP3纯净版V10_祥和版
  13. miui怎么用第三方图标包_不打广告的小米APP,比起MIUI桌面还要更好用
  14. 互动直播之WebRTC服务器Kurento实战
  15. 【Python图像处理】SciPy库
  16. 翻翻git之---不靠画全靠“演”,好看的自定义TextView translucent-android
  17. The long goodbye 漫长的告别 | 经济学人中英双语对照精读笔记
  18. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语
  19. 【JeecgBoot】Mac M1 微服务启动JeecgBoot + 启动JeecgBoot-vue3版本
  20. 使用BC进行RSA加密与解密

热门文章

  1. 实现自己的首字母索引导航列表(二)——拼音首字母分类列表
  2. 32寸android触摸一体机,32寸红外触摸一体机(图文)
  3. 笔试题————网络安全、web安全、渗透测试之笔试总结(二)
  4. Nature子刊:稻田甲烷氧化的微生物机制
  5. 非甲烷总烃废气处理方法
  6. 【解决方案】AI+视频监控, EasyCVR如何赋能智慧平安社区建设?
  7. 车牌识别助力鸣笛抓拍,快准狠
  8. 2018第三届中国青年健康论坛——生理、心理与教育(CYHF 2018)
  9. 学习区块链的十大理由 1
  10. openjudge Mondriaan's Dream