`
lunan
  • 浏览: 77973 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

蚁群算法在最短路中的matlab代码

 
阅读更多

下面的程序是蚁群算法在最短路中的应用,稍加扩展即可应用于机器人路径规划
function [ROUTES,PL,Tau]=ACASP(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q)
%% ---------------------------------------------------------------
% ACASP.m
% 蚁群算法动态寻路算法
% ChengAihua,PLA Information Engineering University,ZhengZhou,China
% Email:aihuacheng@gmail.com
% All rights reserved
%% ---------------------------------------------------------------
% 输入参数列表
% G 地形图为01矩阵,如果为1表示障碍物
% Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)
% K 迭代次数(指蚂蚁出动多少波)
% M 蚂蚁个数(每一波蚂蚁有多少个)
% S 起始点(最短路径的起始点)
% E 终止点(最短路径的目的点)
% Alpha 表征信息素重要程度的参数
% Beta 表征启发式因子重要程度的参数
% Rho 信息素蒸发系数
% Q 信息素增加强度系数
%
% 输出参数列表
% ROUTES 每一代的每一只蚂蚁的爬行路线
% PL 每一代的每一只蚂蚁的爬行路线长度
% Tau 输出动态修正过的信息素

%% --------------------变量初始化----------------------------------
%load
D=G2D(G);
N=size(D,1);%N表示问题的规模(象素个数)
MM=size(G,1);
a=1;%小方格象素的边长
Ex=a*(mod(E,MM)-0.5);%终止点横坐标
if Ex==-0.5
Ex=MM-0.5;
end
Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标
Eta=zeros(1,N);%启发式信息,取为至目标点的直线距离的倒数
%下面构造启发式信息矩阵
for i=1:N
if ix==-0.5
ix=MM-0.5;
end
iy=a*(MM+0.5-ceil(i/MM)); 
if i~=E
Eta(1,i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;
else
Eta(1,i)=100;
end
end
ROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线
PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度
%% -----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁--------------------
for k=1:K
disp(k);
for m=1:M
%% 第一步:状态初始化
W=S;%当前节点初始化为起始点
Path=S;%爬行路线初始化
PLkm=0;%爬行路线长度初始化
TABUkm=ones(1,N);%禁忌表初始化
TABUkm(S)=0;%已经在初始点了,因此要排除
DD=D;%邻接矩阵初始化
%% 第二步:下一步可以前往的节点
DW=DD(W,:);
DW1=find(DW
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=inf;
end
end
LJD=find(DW
Len_LJD=length(LJD);%可选节点的个数
%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同
while W~=E&&Len_LJD>=1
%% 第三步:转轮赌法选择下一步怎么走
PP=zeros(1,Len_LJD);
for i=1:Len_LJD
PP(i)=(Tau(W,LJD(i))^Alpha)*(Eta(LJD(i))^Beta);
end
PP=PP/(sum(PP));%建立概率分布
Pcum=cumsum(PP);
Select=find(Pcum>=rand);
%% 第四步:状态更新和记录
Path=[Path,to_visit];%路径增加
PLkm=PLkm+DD(W,to_visit);%路径长度增加
W=to_visit;%蚂蚁移到下一个节点
for kk=1:N
if TABUkm(kk)==0
DD(W,kk)=inf;
DD(kk,W)=inf;
end
end
TABUkm(W)=0;%已访问过的节点从禁忌表中删除
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=inf;
end
end
LJD=find(DW
Len_LJD=length(LJD);%可选节点的个数
end
%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度
ROUTES{k,m}=Path;
if Path(end)==E
PL(k,m)=PLkm;
else
PL(k,m)=inf;
end
end
%% 第六步:更新信息素
Delta_Tau=zeros(N,N);%更新量初始化
for m=1:M
if PL(k,m) ROUT=ROUTES{k,m};
TS=length(ROUT)-1;%跳数
PL_km=PL(k,m);
for s=1:TS
x=ROUT(s);
Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;
end
end
end
Tau=(1-Rho).*Tau+Delta_Tau;%信息素挥发一部分,新增加一部分
end
%% ---------------------------绘图--------------------------------
plotif=1;%是否绘图的控制参数
if plotif==1
%绘收敛曲线
meanPL=zeros(1,K);
minPL=zeros(1,K);
for i=1:K
PLK=PL(i,:);
Nonzero=find(PLK
PLKPLK=PLK(Nonzero);
meanPL(i)=mean(PLKPLK);
minPL(i)=min(PLKPLK);
end
figure(1)
plot(minPL);
hold on
plot(meanPL);
grid on
title('收敛曲线(平均路径长度和最小路径长度)');
xlabel('迭代次数');
ylabel('路径长度');
%绘爬行图
figure(2)
axis([0,MM,0,MM])
for i=1:MM
for j=1:MM
if G(i,j)==1
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
hold on
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
if Rx(ii)==-0.5
Rx(ii)=MM-0.5;
end
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
end
plot(Rx,Ry)
end
plotif2=1;%绘各代蚂蚁爬行图
if plotif2==1
figure(3)
axis([0,MM,0,MM])
for i=1:MM
for j=1:MM
if G(i,j)==1
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
for k=1:K
PLK=PL(k,:);
minPLK=min(PLK);
pos=find(PLK==minPLK);
m=pos(1);
ROUT=ROUTES{k,m};
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
if Rx(ii)==-0.5
Rx(ii)=MM-0.5;
end
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
end
plot(Rx,Ry)
hold on
end
end
 
分享到:
评论

相关推荐

    蚁群算法的最短路径MATLAB程序

    蚁群算法是一种模拟蚂蚁觅食行为的启发式算法,它主要通过群体协作来寻找问题的最优解。该算法由Marco Dorigo在1992年提出,最初应用于解决旅行商问题(TSP),后来逐渐发展和应用到各种优化问题中。蚁群算法属于蚁...

    蚁群算法最短路径通用Matlab程序

    本资源是关于蚁群算法在最短路中的应用,通过Matlab实现。蚁群算法是一种基于启发式搜索的优化算法,通过模拟蚂蚁觅食行为来寻找最短路径。该算法可以应用于机器人路径规划等领域。 1. 蚁群算法的基础知识 蚁群...

    蚁群算法在最短路中的应用

    蚁群算法在最短路中的应用,蚁群算法在最短路中的应用,蚁群算法在最短路中的应用,蚁群算法在最短路中的应用,蚁群算法在最短路中的应用,

    蚁群算法求解最短路,详细,可用于路径规划

    在最短路问题中,目标是找到在给定网络中两个节点之间的最短路径。这种问题广泛存在于物流、交通、网络设计等领域。蚁群算法通过迭代过程,每只“虚拟蚂蚁”在图上随机行走,并根据信息素浓度和距离因子选择下一步的...

    蚁群算法求解最短路径问题MATLAB代码

    在本MATLAB实现的蚁群算法中,其核心目标是寻找图中两点间的最短路径。 在最短路径问题中,我们通常面临一个网络图,其中每个节点代表一个位置,每条边代表两个位置之间的距离。我们的任务是找到从起始节点到终止...

    蚂蚁算法基于蚁群算法的二维路径规划附matlab代码

    在自然界中各种生物群体显现出来的智能近几十年来得到了学者们的广泛关注,学者们通过对简单生物体的群体行为进行模拟,进而提出了群智能算法。其中, 模拟蚁群觅食过程的蚁群优化算法(Ant Colony Optimization, A ...

    蚁群算法程序,解决蚁群算法在最短路中的应用问题

    在上述代码中,`ACASP`函数实现了一个基于蚁群算法的最短路径搜索程序,其主要步骤如下: 1. **变量初始化**:首先,函数接收输入参数,包括地形图`G`、初始信息素矩阵`Tau`、迭代次数`K`、蚂蚁个数`M`、起始点`S`...

    数学建模方法:蚁群算法

    多线程蚁群算法及其在最短路问题上的应用研究 改进的蚁群算法在2D HP模型中的应用 制造系统通用作业计划与蚁群算法优化 基于混合行为蚁群算法的研究 火力优化分配问题的小生境遗传蚂蚁算法 基于蚁群算法的对等网...

    Dijkstra最短路算法Matlab实现

    Dijkstra最短路算法Matlab实现

    TSP用遗传算法做最短路环游中国的MATLAB代码

    【标题】"TSP用遗传算法做最短路环游中国的MATLAB代码"涉及的核心知识点是旅行商问题(Travelling Salesman Problem, TSP)的解决方案,它是一个经典的组合优化问题,旨在寻找访问每座城市一次并返回起始城市的最短...

    最短路算法 matlab

    函数m文件 函数的参数是链接矩阵 起始路点,终点 函数输出为最短路的长度和路径,自身为0 无路径为无穷大

    最短路问题及MATLAB代码

    通过阅读和运行这些代码,同学们可以更好地掌握如何在MATLAB中处理实际问题,提高数学建模的能力。 总的来说,最短路问题是图论中的核心概念,对于学习网络优化和算法设计至关重要。MATLAB作为工具,提供了直观且...

    最短路算法及其在matlab中的实现

    最短路算法及其在matlab中的实现,分享给建模中的同仁!

    最短路Dijkstra算法 Matlab代码Function

    最短路Dijkstra算法 Matlab代码Function部分,通用各种类型网络

    【老生谈算法】floyd最短路算法Dijkstra最短路算法Matlab程序.doc

    【老生谈算法】floyd最短路算法Dijkstra最短路算法Matlab程序.doc

    基于python实现蚁群算法求解K短路问题,用于轨道交通配流等

    【作品名称】:基于python实现蚁群算法求解K短路问题,用于轨道交通配流等 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目...

    图论Dijkstra最短路算法matlab程序

    根据给定的部分MATLAB代码,我们可以看到这段程序是用来实现Dijkstra算法的一个具体实例。下面将对这段代码进行详细解析: 1. **初始化图结构:** 首先,通过一个二维数组`a`来表示图的邻接矩阵。其中,`M = ...

    最短路Dijkstra算法 Matlab代码Input例子

    最短路Dijkstra算法 Matlab代码Input例子,一个小网络,用于测试Function

    轨道交通配流应用-基于蚁群算法求解K短路问题python源码(带项目说明和代码注释).zip

    轨道交通配流应用-基于蚁群算法求解K短路问题python源码(带项目说明和代码注释).zip 【资源介绍】 K短路求解算法: # 对于K短路的求解,本设计采用了比较简单的策略,即在蚂蚁搜索食物的过程中,对于返回的路径进行...

Global site tag (gtag.js) - Google Analytics