蚁群算法最短路径规划多出口情况及问题答疑

最近好多人问我蚁群算法最短路径规划如何设置多出口情况,原来2019年美赛D题“拯救卢浮宫”需要用到。本人没有看过美赛的题目,下面给出一些不成熟的代码。
蚁群算法简介:蚁群算法最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。

单出口情况:
http://www.omegaxyz.com/2018/01/27/aco_routes/
针对大家问过的问题下面给出解答:
在这里插入图片描述
问题1:如何修改目的地(出现minPL(i)=min(PLKPLK);错误)

出口只需要修改E,其他都不需要改,E是一维,下面的程序会自动解析为横纵坐标(即Ex和Ey不需要修改)
例如E = MMMM说明是最后一个格子,MMMM-j代表右下角的格子向左平移j个单位,MMMM-iMM,代表右下角的格子向上平移i个单位。
大家可以试试下面的这些出口
MMMM, MMMM-19MM-5, MMMM-7MM, MMMM-15MM, MMMM-17
问题2:如何处理非正方形矩阵

首先MM作为边长要修改,下面的出口横纵坐标Ex,Ey需要重新解析,相关的画图部分要改,信息素矩阵Tau要修改。
问题3:G2D函数无法运行的问题

这里可能是matlab版本问题,为了方便,我将G2D函数直接放在代码的最下面,如果不能运行建议将G2D函数重新新建一个文件,并把main函数中的G2D删去。
G2D.m

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矩阵,里面存储所有的目标点

Earchive = [MM*MM, MM*MM-19*MM-5, MM*MM-7*MM, MM*MM-15*MM, MM*MM-17];

来个大循环,每次重新运行蚁群算法,最终画图画到一个图上(使用matlab hold on语句)
声明:以上给出的程序与2019年美赛建模D题具体思路无关。
更多内容访问 omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值