- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
鉴于遗传算法的路径规划MATLAB实现
主程序:
clearall;
closeall;
t=23;%过程点个数=t-1
s=500;%种群规模
pc=0.90;%交错概率
pm=0.20;%变异概率
pop=zeros(s,t);
fori=1:s
pop(i,1:t-1)=randperm(t-1);
end
fork=1:1:2000%进化代次数k
ifmod(k,10)==1
k
end
pop=lujingdis(pop);
c=15;%选择淘汰个数
pop=lujingselect(pop,c);
p=rand;
ifp>=pc
pop=lujingcross(pop);
end
ifp>=pm
pop=lujingmutate(pop);
End
end
pop
min(pop(:,t))
J=pop(:,t);
fi=1./J;
[Oderfi,Indexfi]=sort(fi);%安排fi从小到大
BestS=pop(Indexfi(s),:);%使BestS=E(m),m即是属于
I=BestS;
max(fi)的
Indexfi
x=[23610141722202325302825212916181591165];y=[526142927242822263030171315413316227];%过程点坐标
x=[12346911108964];%12个过程点的坐标
y=[12348101195212];
fori=1:1:t-1
x1(i)=x(I(i));
y1(i)=y(I(i));
end
x(t)=x(I(1));
y(t)=y(I(1));
栅格
%a=[1111111111
1110011100
1010011111
0011110110
1111111111
1111111111
1001101111
1111111110
1111111111
0111110011];%11*11栅格
b=a;
b(end+1,end+1)=0;
colormap([000;111]),pcolor(b)
axisimagexy;%绘制栅格图
holdon;
figure(1);
plot(x,y,'-or');
适应度函数程序:lujingdis.m
function[pop]=qiujuli(pop)
[s,t]=size(pop);
fori=1:1:s
dd=0;
forj=1:1:t-2
dd=dd+lujingcalculate(pop(i,j),pop(i,j+1));
end
pop(i,t)=dd;
End
距离计算程序:lujingcalculate.m
function[d]=juli(m,n)
x=[23610141722202325302825212916181591165];y=[526142927242822263030171315413316227];%x=[12346911108964];
y=[12348101195212];d=sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);
选择算子程序:lujingselect.m
function[pop]=select(pop,k)
[s,t]=size(pop);
m11=(pop(:,t));
m11=m11';
mmax=zeros(1,k);
mmin=zeros(1,k);
num=1;
whilenum<k+1
[a,mmax(num)]=max(m11);
m11(mmax(num))=a;
num=num+1;
end
num=1;
whilenum<k+1
[b,mmin(num)]=min(m11);
m11(mmin(num))=a;
num=num+1;
end
fori=1:k
pop(mmax(i),:)=pop(mmin(i),:);
End
交错算子程序:lujingcross.m
function[pop]=cross(pop)
[s,t]=size(pop);
pop1=pop;
fori=1:2:s
m=randperm(t-3)+1;
crosspoint(1)=min(m(1),m(2));
crosspoint(2)=max(m(1),m(2));
forj=1:crosspoint(1)
whilefind(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j))zhi=find(pop(i,crosspoint(1)+1:crosspoint(2))==pop(i,j));y=pop(i+1,crosspoint(1)+zhi);
pop(i,j)=y;
end
end
forj=crosspoint(2)+1:
文档评论(0)