资源简介

这是找到的开源的很不错的matlba蚁群算法的仿真代码。经验证,可以很不错的实现蚁群算法的路径规划和避障的仿真实验,可借鉴并运用在机器人上。感谢开源作者。分享给大家,一起学习。

资源截图

代码片段和文件信息

function main()
map=[0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     
     0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 1 1 1 0 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0;
     0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;
     0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;
     
     0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0;
     0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0;
     0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0;
     0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0;
     1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0;
     
     1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0;
     0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 0;
     0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0;
     0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0;
     0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0;];
Map_Size=size(map1);                      % map 地形图为01矩阵,如果为1表示障碍物
Phe_Mat =ones(Map_Size*Map_SizeMap_Size*Map_Size);             % Phe_Mat 初始信息素矩阵
Phe_Mat=8.*Phe_Mat;
%..........................
diedai_num=100;                           %迭代次数(指蚂蚁出动多少波)
ant_num=50;                            %蚂蚁个数
min_start=1 ;                             %最短路径的起始点
Map_Size_pow2=Map_Size*Map_Size;                        %最短路径的目的点
Alpha_infoimpor=1;                          % Alpha_infoimpor 表征信息素重要程度的参数
Alpha_qifa=7;                           % Alpha_qifa 表征启发式因子重要程度的参数
Alpha_zhenfa=0.3 ;                          % Alpha_zhenfa 信息素蒸发系数
Alpha_add=1;                               % Alpha_add 信息素增加强度系数
%...................................
minkl=inf;  %正无穷
mink=0;
minl=0;
queMap=G2D(map);
queMap_size=size(queMap1);              %queMap_size表示问题的规模(象素个数)
a=1;                     %小方格象素的边长


End_x=a*(mod(Map_Size_pow2Map_Size)-0.5);    %终止点横坐标

if End_x==-0.5
    End_x=Map_Size-0.5;
end
%....................
End_y=a*(Map_Size+0.5-ceil(Map_Size_pow2/Map_Size)); %终止点纵坐标

%..........................................
qifa_info=zeros(queMap_size);             %启发式信息,取为至目标点的直线距离的倒数
%以下启发式信息矩阵
for i=1:queMap_size
    ix=a*(mod(iMap_Size)-0.5);
    if ix==-0.5
        ix=Map_Size-0.5;
    end
    iy=a*(Map_Size+0.5-ceil(i/Map_Size));
    if i~=Map_Size_pow2
        qifa_info(i)=1/((ix-End_x)^2+(iy-End_y)^2)^0.5;
    else
        qifa_info(i)=100;
    end    
end

%................................
per_g_ant_path=cell(diedai_numant_num);     %用细胞结构存储每一代的每一只蚂蚁的爬行路线
per_g_perant_pathlong=zeros(diedai_numant_num);         %用矩阵存储每一代的每一只蚂蚁的爬行路线长度
%启动diedai_num轮蚂蚁觅食活动,每轮派出ant_num只蚂蚁
for diedai_item=1:diedai_num
    for ant_item=1:ant_num
        %状态初始化
        W=min_start;                  %当前节点初始化为起始点
        Path=min_start;               %爬行路线初始化
        PLkm=0;               %爬行路线长度初始化
        TABUkm=ones(queMap_size);       %禁忌表初始化
        TABUkm(min_start)=0

评论

共有 条评论