MATLAB遗传算法规划机器人路径(栅格)源码
#网上路径规划的代码很多,但是简单栅格路径的规划问题,各位大佬都懒得写,小弟为你奉上,敬请食用(此代码是根据大佬的源码改写而成,由于不知大佬链接,所以就不放了,但是大佬是开源的)
主要包括以下几个部分
text1.m主函数
chack.m边界检测函数
calfitvalue.m适用度函数
crossover.m交叉函数
mutation.m变异函数
poppinit.m初始化族群
select.m
best.m
运行结果如图
链接: link.
图片:
带尺寸的图片:
代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%函数名称:主函数text1.m
%%入口参数:无
%%出口参数:无
%%说明:无
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear
pc=0.7; %交叉概率
pm=0.006; %变异概率
[x,y]=popinit(500,10); %产生初始种群
D=calfitvalue(x,y); %计算种群适应度
for i=1:1:200 %设置进化代数
[newx,newy]=selection(x,y,D); %选择
[newx,newy]=crossover(newx,newy,pc); %交叉
[newx,newy]=mutation(newx,newy,pm); %变异
D=calfitvalue(newx,newy); %重新计算适应度
[newx,newy]=selection(newx,newy,D); %选择 保证交叉变异后的种群都不经过障碍物
D=calfitvalue(newx,newy); %重新计算适应度 选择之后的种群适应度也已经发生变化。所以必须重新计算
[bestx,besty,bestfit]=best(newx,newy,D); %选择最佳个体
bbestx(i,:)=bestx; %保存最佳个体
bbesty(i,:)=besty;
bbestfit(i)=bestfit;
x=newx;
y=newy;
end
[bbbestfit,I]=max(bbestfit) %计算选择出来的最佳个体中 适应度最大的个体,作为最优值输出
bbbestx=bbestx(I,:);
bbbesty=bbesty(I,:);
%根据适应度函数中建立的环境模型,填充障碍物
% fill([8,12,12,8,8],[8,8,12,12,8],[0,0,0])
% hold on
% fill([2,6,6],[2,2,4],[0,0,0])
% hold on
% fill([4,7,2],[6,15,15],[0,0,0])
% hold on
% fill([9,16,16],[16,10,18],[0,0,0])
% hold on
% fill([18,7,12],[1,6,2],[0,0,0])
% hold on
fill([2,4,4,2,2],[0,0,2,2,0],[0,0,0])
hold on
fill([0,2,2,4,4,0,0],[6,6,4,4,8,8,6],[0,