最近好多人问我蚁群算法最短路径规划如何设置多出口情况,原来2019年美赛D题“拯救卢浮宫”需要用到。本人没有看过美赛的题目,下面给出一些不成熟的代码。
蚁群算法简介:蚁群算法最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。
单出口情况:
针对大家问过的问题下面给出解答:
问题1:如何修改目的地(出现minPL(i)=min(PLKPLK);错误)
出口只需要修改E,其他都不需要改,E是一维,下面的程序会自动解析为横纵坐标(即Ex和Ey不需要修改)
例如E = MM*MM说明是最后一个格子,MM*MM-j代表右下角的格子向左平移j个单位,MM*MM-i*MM,代表右下角的格子向上平移i个单位。
大家可以试试下面的这些出口
MM*MM, MM*MM-19*MM-5, MM*MM-7*MM, MM*MM-15*MM, MM*MM-17
问题2:如何处理非正方形矩阵
首先MM作为边长要修改,下面的出口横纵坐标Ex,Ey需要重新解析,相关的画图部分要改,信息素矩阵Tau要修改。
问题3:G2D函数无法运行的问题
这里可能是matlab版本问题,为了方便,我将G2D函数直接放在代码的最下面,如果不能运行建议将G2D函数重新新建一个文件,并把main函数中的G2D删去。
G2D.m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function D=G2D(G) l=size(G,1); D=zeros(l*l,l*l); for i=1:l for j=1:l if G(i,j)==0 for m=1:l for n=1:l if G(m,n)==0 im=abs(i-m);jn=abs(j-n); if im+jn==1||(im==1&&jn==1) D((i-1)*l+j,(m-1)*l+n)=(im+jn)^0.5; end end end end end end end end |
问题4:对于多出口的情况
此问题代码需要重构,或者来个简便方法,多线程每个线程一个出口最后一起画图。
设立一个archive矩阵,里面存储所有的目标点
1 |
Earchive = [MM*MM, MM*MM-19*MM-5, MM*MM-7*MM, MM*MM-15*MM, MM*MM-17]; |
来个大循环,每次重新运行蚁群算法,最终画图画到一个图上(使用matlab hold on语句)
声明:以上给出的程序与2019年美赛建模D题具体思路无关。
还是不太清楚怎么改为非方阵,大佬可以说的详细点吗?或者有没有非方阵的源码?
你好,您的代码中第113-117行里的DW(j)=0这一句是否有错误?是否1应该改成DW(DW1(j))
=0?
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=0;
end
end
如果设置多个目标协同进行呀
请问,如果改为m*n的矩阵,这么设置进出口
请问楼主:
在修改了矩阵G以后出现的
在赋值 A(:) = B 中,A 和 B 中的元素数目必须相同。
出错 teat_ant_main (line 136)
minPL(i)=min(PLKPLK);
问题应该如何解决
这个可以改成50*50的地图吗、
可以啊
请问具体如何操作啊?
请问解决有障碍旅行商问题,就是形成一个路径回路,在您的基础上怎么改进呢
可以参考这篇文章 https://www.omegaxyz.com/2018/07/10/aco-tsp/
请问如何设置机器人的起止点?就是想将起点设置在左下角,怎么操作呀?
矩阵相对于原点的绝对位置,比如3*4的矩阵,可以先看成1*12的矩阵。
您好,有一个小问题,更改S的值只能改变路径起点的横坐标,那么纵坐标值如何改变呢?
你可以考虑把矩阵按行拉成一条向量,起点+一定的距离就更改了起始位置
十分感谢 问题已解决
您好,我是小白,请问您是怎么解决的呀?
根据程序,该地图矩阵为MM行MM列的方阵
那么:
如果起点为第i行第j列,S=(i-1)*MM+j
如果终点为第m行第n列,E=MM*m*n,也可写成E=MM*[MM-(MM-m)]*[MM-(MM-n)]
请问你是怎么解决的?
根据程序,该地图矩阵为MM行MM列的方阵
那么:
如果起点为第i行第j列,S=(i-1)*MM+j
如果终点为第m行第n列,E=MM*m*n,也可写成E=MM*[MM-(MM-m)]*[MM-(MM-n)]
您好,请问具体怎么改呀?
请问如何设置多机器人不同起止点的路径规划
这个文章里面都说了哦,举一反三看看。
请问多个机器人一起移动也是按照问题四的解决思路来吗?
对,是这样的。
请问如果机器人间产生碰撞如何调整路径呢?
这个还没研究哈,麻烦您帮忙看看怎么解决。
第四个问题代码能不能详细些,小白表示看不懂啊,最好多谢代码
抱歉哈,这个已经很久没有看了。
你好,我是今年刚读研的研一新生~我们老师没有具体给定方向~就说数学好的学机器学习,数学好的学大数据,想要继续读博的选演化计算~我想以后继续读博,可是演化计算我之前一点都没接触过~~能请教一下该如何入门么~~~哈哈哈啊哈~~~另外就是楼主的博客简直就是一个宝藏~!!!!赞~
你好,演化计算其实前景并不是特别好,因为它的可解释下比较差,到处都是trick。
请问17*19的矩阵怎么改能做一个对比吗?尤其是信息素那块
出现minPL(i)=min(PLKPLK);错误
请问
请问循环多出口加上hold on之后仍无法显示在同一张图上怎么解决,能把这篇文章的第一张图的源码发一下吗?谢谢了
不好意思,代码找不到了,可以先把每次的不同路径保存下来,最后再处理图像。
请问循环多出口加上hold on之后仍无法显示在同一张图上怎么解决,能把这篇文章的第一张图的源码发一下吗?谢谢了
你好,请问G2D函数的作用是什么,我没看明白,希望作者能给予帮助,谢谢了
想请问下,这个路径每次执行后可能都不同,我想把这个变为可控的,就是多次执行结果给出的路径都一样,该怎么办呢?
这是演化计算的方法呀,都是随机策略,结果一般不会相同,除非你把迭代次数调大一点,这样可能会收敛到一个较好的值。
楼主联系方式有吗,我的邮箱335693739@qq.com,有问题指教您,谢谢
本网站页脚有联系方式哦。
请问多出口参考程序如何添加