1 简介
采用栅格法表示机器人工作环境模型,用序号编码,直角坐标与序号混合应用,采用遗传算法产生初始路径种群,并对其优化找出最短路径,然后增加删除、插入算子达到路径规划中避障的要求.用MATLAB语言进行仿真研究,仿真结果表明遗传算法进行避障和路径规划的有效性和可行性.
2 部分代码
clc;clear;
%初始化参数?
%注:popsize=200,MaxGeneration=100,约跑2分钟。若不要求太精确,可减少循环次数。
pointnumber=11; ? ? ? ? ? ? ? ? ? ? ? ? ? ?%节点个数
Popsize=200; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??%种群规模,只能取偶数(因67行的循环)
MaxGeneration=100; ? ? ? ? ? ? ? ? ? ? ? ??%最大代数
Pc=0.8;Pm=0.3; ? ? ? ? ? ? ? ? ? ? ? ? ? ??%交叉概率和变异概率
A=[0?2?8?1?50?50?50?50?50?50?50
? ?2?0?6?50?1?50?50?50?50?50?50
? ?8?6?0?7?50?1?50?50?50?50?50
? ?1?50?7?0?50?50?9?50?50?50?50
? ?50?1?50?50?0?3?50?2?50?50?50
? ?50?50?1?50?3?0?4?50?6?50?50
? ?50?50?50?9?50?4?0?50?50?1?50
? ?50?50?50?50?2?50?50?0?7?50?9
? ?50?50?50?50?50?6?50?7?0?1?2
? ?50?50?50?50?50?50?1?50?1?0?4
? ?50?50?50?50?50?50?50?9?2?4?0]; ? ? ? ??%带权邻接矩阵。
A(A==50)=500; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%取值50过小而修正为500;
? ?%************ Step 4: 变异操作 **************
? ?for?i=1:Popsize
? ? ? ?tempPm=rand(1);
? ? ? ?if(tempPm<Pm)
? ? ? ? ? ?temPm6=fix((rand(1)+0.2)*10);
? ? ? ? ? ?temPm7=fix((rand(1)+0.2)*10); ? ? ? ??%产生两个用于交换的随机数
? ? ? ? ? ?tempvessel=path(i,temPm6); ? ? ? ? ? ?%交换前用一临时容器存放数据
? ? ? ? ? ?path(i,temPm6)=path(i,temPm7);
? ? ? ? ? ?path(i,temPm7)=tempvessel; ? ? ? ? ? ??%变异交换
? ? ? ?end?
? ?end
? ?path(Popsize,:)=BestS;
end
[aa?bb]=find(BestS==b); ? ? ? ? ? ? ? ? ? ? ? ? ?%找出终点
Bestpath=BestS(1:bb); ? ? ? ? ? ? ? ? ? ? ? ? ? ?%剔除后面无用的点,留下实际路线
outdistance(a,b)=Bestindividual(k); ? ? ? ? ? ? ?%将最短距离写入矩阵
outpath{a,b}=Bestpath; ? ? ? ? ? ? ? ? ? ? ? ? ??%写入路径,因数据类型为矩阵,所以采用元胞数组储存
end
end
for?i=1:pointnumber
? ?for?j=1:i
? ? ? ?outdistance(i,j)=outdistance(j,i); ? ? ??%实现距离的对称
? ? ? ?outpath{i,j}=fliplr(outpath{j,i}); ? ? ??%实现路径的对称与翻转
? ?end
end
? ?%*************** 结果输出 *****************
outdistance
celldisp(outpath)
xlswrite('tempdata.xls',?outpath) ? ? ? ? ? ? ??%存入excel中进行操作
3 仿真结果
4 参考文献
[1]张颖, 吴成东, and 于谦. "基于遗传算法的机器人路径规划." 沈阳建筑工程学院学报(自然科学版) (2002).
|