,PL,Tau
=ACASP函数, 该函数的参数有G、Tau、K、M、S、E、Alpha、Beta、Rho、Q , %% --------------------------------------------------------------- %这里是ACASP.m文件, 它是蚁群算法动态寻路算法 , PLA 在China , Email是@ , 全部内容 %% --------------------------------------------------------------- %输入参数列表 % G是地形图, 它是一个01矩阵, 若值为1则表示存在障碍物 % Tau是初始信息素矩阵, 其代表着前面的觅食活动中残留的信息素 % K是迭代次数, 也就是蚂蚁出动的波数那么多 % M是蚂蚁个数, 即指代每一波蚂蚁包含的数量这么多 % S是起始点, 乃是最短路径的起始位置 % E是终止点, 是最短路径的目的地点位 % Alpha是个表征信息素重要程度的参数 % Beta是个表征启发式因子重要程度的参数 % Rho是信息素蒸发系数 % Q是信息素增加强度系数 % % 输出参数列表 % 包含每一代的每一只蚂蚁的爬行路线 % PL是每一代的每一只蚂蚁的爬行路线长度 % Tau是输出动态修正 后的信息素%% --------------------变量初始化---------------------------------- %load , D等于G2D(G) , N是取G大小的第一个值再取其个数 , 这里N表示问题的规模, 也就是像素个数量 % MM是取G大小的第一个值, a等于1,这是小方格像素的边长, 由余数等操作得到 修正后的点 的相关坐标% Ex经过一定计算得到终止点横坐标 , 如果计算结果为 -0.5 , 则将Ex修正为MM - 0.5 , Ey通过类似计算得到终止点纵坐标 % Eta是一个全0的向量 它的元素个数等于N也就是问题规模 , 这里的Eta 是启发式信息 取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 , 对于i从1计数到N , 有一系列坐标计算和条件判断, 进而得到启发式信息矩阵中i位置的值 , 如果i不等于E , 通过一定计算得到Eta向量中i位置的值 , 否则Eta向量中i位置的值为100 , =cell结构 它有两个下标的含义分别是K、 M即由之用来储存每一代的每一只蚂蚁的爬行路线 , PL是一个全0的矩阵 它有两个下标的含义分别是K、 M即由之用来存储每一代的每一只蚂蚁的爬行路线长度 %% -----------启动K轮蚂蚁觅食活动, 每轮派出M只蚂蚁-------------------- , 当k从1计数到K , 显示k的值 , 当m从1计数到M , %% 第一步: 状态初始化 , W被初始化为S , 即当前节点变为起始点 , Path也被初始化为S , 这是爬行路线的初始化 , PLkm被初始化为0 , 这是爬行路线长度的初始化 , =全1的向量 它的元素个数等于N , 这是禁忌表初始化。因为已经在初始点了, 所以要排除 前面的初始化是针对起始点进行的 , DD的初始化是邻接矩阵初始化 , %% 第二步: 下一步可以前往的节点用DW表示 , DW基于DD和W的索引来获取 , DW1是通过查找DW中不等于0的值得到的索引 , 对于j循环从1计数到DW1的元素个数 , 如果DW1中j位置的值等于0 , 则将DW中j位置的值设为无穷大 , LJD基于DW查找得到 , 取其索引作为下一步可选节点的个数 %% 觅食停止条件: 蚂蚁未遇到食物或者陷入死胡同 , 当W不等于E而且LJD的长度大于等于1时 , %% 第三步: 转轮赌法选择下一步怎么走 , PP是一个全0的向量 它的元素个数为LJD的长度 , 对于i循环从1计数到LJD长度范围内的值计数的个数范围内即根据前文对LJD的处理进行的范围内循环 , PP中i位置的数据是前面相乘算式的值 ;这里算式里含Tau、Eta及相关的系数 , PP通过sum得到其向量和后再进行除法操作 , 这样PP就是一个概率分布 , 而P是查找一个元素大于等于 随机数的第一个 值的索引 , 这个rand是随机数, 它是在前面获得新个体操作中在指定范围内产生出来的随机数;这个范围定义在选择个体操作中;选择个体操作内部用到 分布函数;分布形成涉及 rand;rand;是一种随机数;通过 rand产生这样的随机数 , 这个随机数用于在概率分布表中查找合适的索引;通过上述条件通过复杂原理查找;查找呀就是这里用的find, 通过find查找;查找根据前面PP的概率分布;基于PP的概率分布通过find查找, 这个find, 查找, 基于PP, 等于, 大于等于, rand, 这样查找呀来确定索引信息从而确定下一步, 这样, 通过这样的转轮赌法, 通过这样的转轮赌法, 通过这样的运算步骤, 通过这样的转轮赌法, 确定下一步呀所以叫选择下一步怎么走嘛 , %% 第四步: 一个是状态更新和记录 , Path等于 这里后面还有内容没写完呢 , 有标点符号。
Path,
%;路径增添 PLkm 等于 PLkm 加上 DD(W,);%路径长度增长 W 等于;%蚂蚁挪动到下一个节点 针对 kk 从 1 行进至 N 而言 要是 (kk) 等于 0 那么 DD(W,kk) 等于无穷大; DD(kk,W) 等于无穷大; 终止 针对末尾未被访问过的节点从已访问行列之中铲除 针对 j 从 1 持续至(DW1) 要是 (DW1(j)) 等于 0 那么 DW(j) 等于无穷大 终止 LJD 等于找到 DW 等于(LJD);%可选节点的数量终止 %% 第五步: 记录下每一代每只蚂蚁的觅食线路以及线路长度 {k,m} 等于 Path 要是 Path 的末尾等于 E 那么 PL(k,m) 等于 PLkm; 不然的话 PL(k,m) 等于无穷大 终止 %% 第六步: 革新信息素 等于全零的(N,N);%更新量开展初始设定 针对 m 从 1 遍历至 M 要是 PL(k,m) ROUT 等于{k,m}; TS 等于(ROUT)减 1;%跳数 PL_km 等于 PL(k,m); 针对 s 从 1 直至 TS x 等于 ROUT(s); (y,x) 等于(y,x)加上 Q 除以 PL_km; 终结 终结 Tau 等于(1 减去 Rho)乘以 Tau 加上;%信息素挥发掉一部分, 新添一部分 终止 %% ---------------------------绘图-------------------------------- 等于 1;%是否绘图的控制参量 要是 等于 1 %绘制收敛曲线 等于全零的(1,K); minPL 等于全零的(1,K); 针对 i 从 1 到 K PLK 等于 PL(i,:); 等于找到 PLK 等于 PLK(); (i) 等于均值(); minPL(i) 等于最小值(); 终结 (1) 绘制 minPL; 维持现状 绘制(); 在上面绘制网格 标题为('收敛曲线(平均路径长度和最小路径长度)'); ('迭代次数'); ('路径长度'); %绘制爬行图 (2) 坐标轴范围(axis({}))。
0,MM,0,MM
x1,x2,x3,x4
y1,y2,y3,y4
0.2,0.2,0.2
); 要是不这样, 那就让x1等于j减1, y1等于MM减i, x2等于j, y2等于MM减i, x3等于j, y3等于MM减i加1, x4等于j减1, y4等于MM减i加1, 然后涂上(。
x1,x2,x3,x4
y1,y2,y3,y4

);坚持住, 结束, 结束, 结束, 坚持住等于(路线);接收方等于路线;发送方等于路线;对于变量ii从1开始:接收方(ii)等于a乘以(路线(ii)对MM取模再减去0.5);如果接收方(ii)等于-0.5, 接收方(ii)等于MM减去0.5; 发送方(ii)等于a乘以(MM加上0.5减去向上取整(路线(ii)除以MM));结束, 绘制(接收方,发送方)结束等于1;%绘制各代蚂蚁爬行图, 如果等于1, 操作 (3)坐标轴。
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
看起来这段代码存在一些格式和语法错误, 不太能完全按照要求准确改写。不过大致可以这样初步尝试改写: 对于k等于1到K的情况进行循环 取值相应的PLK等于PL的第k行 找出PLK中的最小值 记下最小值所在位置m 形成ROUT为k和m 对ROUT进行某种操作 得到Rx和Ry 对于ii从1开始 给Rx的第ii个元素赋值为a乘以ROUT第ii个元素对MM取模再减0.5 若此结果等于 -0.5则令其等于MM - 0.5 给Ry的第ii个元素赋值为a乘以MM加0.5减去ROUT的第ii行除以MM向上取整的结果 绘制Rx和Ry 继续保持绘制状态。但原内容确实问题很多, 难以非常精准改写。


被折叠的 条评论
为什么被折叠?



