教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

matlab - 蚁群算法 - 机器人路径优化问题(2)

来源:网络收集 时间:2026-07-16
导读: function m_main() G=[0 0 0 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 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1

function m_main()

G=[0 0 0 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 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 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 0 1 1 1 1 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 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; 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 1 1 0 0 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 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 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;];

MM=size(G,1); % G 地形图为01矩阵,如果为1表示障碍物

Tau=ones(MM*MM,MM*MM);% Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)

Tau=8.*Tau;

K=100; % K 迭代次数(指蚂蚁出动多少波) M=50; % M 蚂蚁个数(每一波蚂蚁有多少个) S=1 ; % S 起始点(最短路径的起始点)

E=MM*MM; % E 终止点(最短路径的目的点) Alpha=1; % Alpha 表征信息素重要程度的参数 Beta=7; % Beta 表征启发式因子重要程度的参数 Rho=0.3 ; % Rho 信息素蒸发系数 Q=1; % Q 信息素增加强度系数 minkl=inf; mink=0; minl=0;

D=G2D(G);

N=size(D,1);%N表示问题的规模(象素个数) 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(N);%启发式信息,取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 for i=1:N

ix=a*(mod(i,MM)-0.5); if ix==-0.5 ix=MM-0.5; end

iy=a*(MM+0.5-ceil(i/MM)); if i~=E

Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5; else

Eta(i)=100; end end

ROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线 PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度

%% -----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁-------------------- for k=1:K for m=1:M

%% 第一步:状态初始化

W=S;%当前节点初始化为起始点 Path=S;%爬行路线初始化

PLkm=0;%爬行路线长度初始化

TABUkm=ones(N);%禁忌表初始化

TABUkm(S)=0;%已经在初始点了,因此要排除 DD=D;%邻接矩阵初始化

%% 第二步:下一步可以前往的节点 DW=DD(W,:); DW1=find(DW); for j=1:length(DW1)

if TABUkm(DW1(j))==0 DW(DW1(j))=0; end end

LJD=find(DW);

Len_LJD=length(LJD);%可选节点的个数

%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同 while W~=E&&Len_LJD>=1

%% 第三步:转轮赌法选择下一步怎么走 PP=zeros(Len_LJD); for i=1:Len_LJD

PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta); end

sumpp=sum(PP);

PP=PP/sumpp;%建立概率分布 Pcum(1)=PP(1); for i=2:Len_LJD

Pcum(i)=Pcum(i-1)+PP(i); end

Select=find(Pcum>=rand); to_visit=LJD(Select(1));

%% 第四步:状态更新和记录 Path=[Path,to_visit];%路径增加

PLkm=PLkm+DD(W,to_visit);%路径长度增加 W=to_visit;%蚂蚁移到下一个节点 for kk=1:N

if TABUkm(kk)==0 DD(W,kk)=0; DD(kk,W)=0; end end

TABUkm(W)=0;%已访问过的节点从禁忌表中删除 DW=DD(W,:); DW1=find(DW);

for j=1:length(DW1)

if TABUkm(DW1(j))==0

DW(j)=0; end end

LJD=find(DW);

Len_LJD=length(LJD);%可选节点的个数 end

%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度 ROUTES{k,m}=Path; if Path(end)==E PL(k,m)=PLkm; if PLkm

mink=k;minl=m;minkl=PLkm; end else

PL(k,m)=0; end end

%% 第六步:更新信息素

Delta_Tau=zeros(N,N);%更新量初始化 for m=1:M if PL(k,m)

ROUT=ROUTES{k,m}; …… 此处隐藏:893字,全部文档内容请下载后查看。喜欢就下载吧 ……

matlab - 蚁群算法 - 机器人路径优化问题(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/520308.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)