11基于遗传算法的机器人路径规划MATLAB源代码【精品毕业设计】(完整版)

合集下载

基于遗传算法的机器人路径规划研究

基于遗传算法的机器人路径规划研究

基于遗传算法的机器人路径规划研究机器人技术的发展越来越成熟,机器人已经广泛应用于生产、医疗、军事等领域,成为现代社会的一大利器。

在机器人的应用领域中,机器人的路径规划是一个非常关键的环节。

基于遗传算法的机器人路径规划,是近几年来机器人路径规划领域的研究热点之一。

本文将从以下几个方面来探讨基于遗传算法的机器人路径规划的研究现状。

一、机器人路径规划的背景机器人路径规划在机器人技术中占据着非常重要的地位。

机器人路径规划的主要任务是规划机器人从起点到达终点的路线,并且在此过程中尽量减小机器人的代价。

机器人路径规划的过程涉及到许多技术领域,如图像处理、人工智能、计算机视觉等。

早在20世纪50年代,机器人就已经出现在人们的视野中。

但当时的机器人主要是应用于工业制造领域。

另外,这些机器人多数是只能进行简单的重复性工作。

随着计算机技术的不断发展,机器人技术也得到了大力的推广,为机器人技术的发展提供了强有力的支持。

在未来的发展过程中,机器人技术将会在更广泛的领域得到应用。

二、遗传算法简介遗传算法是一种模拟自然界生物进化过程的优化算法。

它是建立在基因遗传和自然选择等生物进化规律上的一种算法。

遗传算法通过种群的遗传操作来寻找最优解,具有简单、易于理解、鲁棒性强等特点。

遗传算法(Genetic Algorithm,GA)是一种通过模拟自然选择和遗传机制进行优化的搜索算法。

它最早由 J. Holland 于 1975 年提出。

遗传算法是模拟自然选择的一种适应性优化搜索技术,借鉴了生物界的遗传、进化和自然选择等思想,能够在搜索过程中不断寻找最优解。

遗传算法的基本操作包括选择、交叉、变异。

个体适应度越高,其在选择过程中被选中的概率就越大,从而被保留到下一代。

三、遗传算法在机器人路径规划中的应用机器人的路径规划过程一般是一个优化问题,需要根据机器人的特殊任务和环境,采用合适的方法来进行规划。

当前,有一些常用的路径规划方法,如A*算法、Dijkstra算法、拉普拉斯最小曲率算法等。

11基于遗传算法的机器人路径规划MATLAB源代码

11基于遗传算法的机器人路径规划MATLAB源代码

基于遗传算法的机器人路径规划MATLAB源代码基本思路是:取各障碍物顶点连线的中点为路径点,相互连接各路径点,将机器人移动的起点和终点限制在各路径点上,利用最短路径算法来求网络图的最短路径,找到从起点P1到终点Pn的最短路径。

上述算法使用了连接线中点的条件,因此不是整个规划空间的最优路径,然后利用遗传算法对找到的最短路径各个路径点Pi (i=1,2,…n)调整,让各路径点在相应障碍物端点连线上滑动,利用Pi= Pi1+ti×(Pi2-Pi1)(ti∈[0,1] i=1,2,…n)即可确定相应的Pi,即为新的路径点,连接此路径点为最优路径。

function [L1,XY1,L2,XY2]=JQRLJGH(XX,YY)%% 基于Dijkstra和遗传算法的机器人路径规划% GreenSim团队——专业级算法设计&代写程序% 欢迎访问GreenSim团队主页→/greensim%输入参数在函数体内部定义%输出参数为% L1 由Dijkstra算法得出的最短路径长度% XY1 由Dijkstra算法得出的最短路径经过节点的坐标% L2 由遗传算法得出的最短路径长度% XY2 由遗传算法得出的最短路径经过节点的坐标%程序输出的图片有% Fig1 环境地图(包括:边界、障碍物、障碍物顶点之间的连线、Dijkstra的网络图结构)% Fig2 由Dijkstra算法得到的最短路径% Fig3 由遗传算法得到的最短路径% Fig4 遗传算法的收敛曲线(迄今为止找到的最优解、种群平均适应值)%% 画Fig1figure(1);PlotGraph;title('地形图及网络拓扑结构')PD=inf*ones(26,26);for i=1:26for j=1:26if D(i,j)==1x1=XY(i,5);y1=XY(i,6);x2=XY(j,5);y2=XY(j,6);dist=((x1-x2)^2+(y1-y2)^2)^0.5;PD(i,j)=dist;endendend%% 调用最短路算法求最短路s=1;%出发点t=26;%目标点[L,R]=ZuiDuanLu(PD,s,t);L1=L(end);XY1=XY(R,5:6);%% 绘制由最短路算法得到的最短路径figure(2);PlotGraph;hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('由Dijkstra算法得到的初始路径')%% 使用遗传算法进一步寻找最短路%第一步:变量初始化M=50;%进化代数设置N=20;%种群规模设置Pm=0.3;%变异概率设置LC1=zeros(1,M);LC2=zeros(1,M);Yp=L1;%第二步:随机产生初始种群X1=XY(R,1);Y1=XY(R,2);X2=XY(R,3);Y2=XY(R,4);for i=1:Nfarm{i}=rand(1,aaa);end% 以下是进化迭代过程counter=0;%设置迭代计数器while counter<M%停止条件为达到最大迭代次数%% 第三步:交叉%交叉采用双亲双子单点交叉newfarm=cell(1,2*N);%用于存储子代的细胞结构Ser=randperm(N);%两两随机配对的配对表A=farm{Ser(1)};%取出父代AB=farm{Ser(2)};%取出父代BP0=unidrnd(aaa-1);%随机选择交叉点a=[A(:,1:P0),B(:,(P0+1):end)];%产生子代ab=[B(:,1:P0),A(:,(P0+1):end)];%产生子代bnewfarm{2*N-1}=a;%加入子代种群newfarm{2*N}=b;for i=1:(N-1)A=farm{Ser(i)};B=farm{Ser(i+1)};newfarm{2*i}=b;endFARM=[farm,newfarm];%新旧种群合并%% 第四步:选择复制SER=randperm(2*N);FITNESS=zeros(1,2*N);fitness=zeros(1,N);for i=1:(2*N)PP=FARM{i};FITNESS(i)=MinFun(PP,X1,X2,Y1,Y2);%调用目标函数endfor i=1:Nf1=FITNESS(SER(2*i-1));f2=FITNESS(SER(2*i));if f1<=f2elsefarm{i}=FARM{SER(2*i)};fitness(i)=FITNESS(SER(2*i));endend%记录最佳个体和收敛曲线minfitness=min(fitness);meanfitness=mean(fitness);if minfitness<Yppos=find(fitness==minfitness);Xp=farm{pos(1)};Yp=minfitness;endif counter==10PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(3)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第10代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==20PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(4)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第20代')hold onx1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==30PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(5)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第30代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==40PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(6)PlotGraph;hold onx1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第40代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendif counter==50PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];figure(7)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法第50代')hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendendLC2(counter+1)=Yp;LC1(counter+1)=meanfitness;%% 第五步:变异for i=1:Nif Pm>rand&&pos(1)~=iAA=farm{i};AA(POS)=rand;farm{i}=AA;endendcounter=counter+1;disp(counter);end%% 输出遗传算法的优化结果PPP=[0.5,Xp,0.5]';PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=[X,Y];L2=Yp;%% 绘制Fig3figure(8)PlotGraph;hold onhold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k');hold onendtitle('遗传算法最终结果')figure(9)PlotGraph;hold onfor i=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',1);hold onendhold onfor i=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot([x1,x2],[y1,y2],'k','LineWidth',2);hold onendtitle('遗传算法优化前后结果比较')%% 绘制Fig4figure(10);plot(LC1);hold onplot(LC2);xlabel('迭代次数');title('收敛曲线');源代码运行结果展示。

基于遗传算法的机器人路径规划

基于遗传算法的机器人路径规划

4.3 基于遗传算法的机器人路径规划4.3.1 遗传算法简介[50] [51]在1975年前后,美国Michigan大学John H Holland教授根据达尔文的适者生存的进化理论研究出一种人工智能的方法——遗传算法,这种算法以生物进化、遗传原理来设计算法的原理,在算法里面还添加了统计理论学随机过程等数学方法,最终形成了该算法一种独特的理论。

遗传算法在求解时,先从一个初始群体的变量开始,依次求解出最佳解,最后得出满足预设的算法要求的迭代次数为最后结果。

这种算法是迭代算法的一种。

遗传算法是模拟大自然中生物生存的理念而产生的一种自然选择和群体遗传理论的查找式算法。

在这个算法里面把每一个需要求解决的问题尽量编码设计成“染色体”,多个染色体接着可以形成种群,在这个过程会出现选择、变异、交叉、复制等遗传操作。

遗传算法初始设定时,首先随机产生一个初值即一个种群,然后依照算法的函数对种群内的个体进行处理评估,并产生相应的对环境适应度数值。

接着算法会根据这些适应度值选择优秀的个体进行下一代衍生,然后把选出来的优秀进行变异、交叉处理。

目前在机器人的路径设计里面遗传算法得到广泛的应用,而且应用范围不仅在单个机器人的行进里面,而是在多个机器人的合作里面也有广泛应用,并且都取得不错的效果。

遗传算法是一种鲁棒性的应用于复杂系统优化的查询式算法,遗传算法与其他只能优化算法相比时,他有以下特点:(1)把决策变量编码化,以一编码做算法处理的对象。

(2)在算法里面以计算出的适应值为查询其他数据的信息。

(3)遗传算法的查询过程从一个种群开始查询,而不从一个一个体开始。

(4)遗传算法的查询是一种依据概率查询,而非确定值查询。

遗传算法的基本流程如下图4.10所示:图4.10 基本遗传算法的流程图4.3.2利用遗传算法进行路径规划4.3.2.1 规划空间的栅格法建模假设机器人工作空间为二维结构化空间, 障碍物位置、大小已知, 且在机器人运动过程中, 障碍物的位置、大小均不发生变化。

遗传算法matlab程序代码

遗传算法matlab程序代码

遗传算法matlab程序代码遗传算法是一种优化算法,用于在给定的搜索空间中寻找最优解。

在Matlab中,可以通过以下代码编写一个基本的遗传算法:% 初始种群大小Npop = 100;% 搜索空间维度ndim = 2;% 最大迭代次数imax = 100;% 初始化种群pop = rand(Npop, ndim);% 最小化目标函数fun = @(x) sum(x.^2);for i = 1:imax% 计算适应度函数fit = 1./fun(pop);% 选择操作[fitSort, fitIndex] = sort(fit, 'descend');pop = pop(fitIndex(1:Npop), :);% 染色体交叉操作popNew = zeros(Npop, ndim);for j = 1:Npopparent1Index = randi([1, Npop]);parent2Index = randi([1, Npop]);parent1 = pop(parent1Index, :);parent2 = pop(parent2Index, :);crossIndex = randi([1, ndim-1]);popNew(j,:) = [parent1(1:crossIndex),parent2(crossIndex+1:end)];end% 染色体突变操作for j = 1:NpopmutIndex = randi([1, ndim]);mutScale = randn();popNew(j, mutIndex) = popNew(j, mutIndex) + mutScale;end% 更新种群pop = [pop; popNew];end% 返回最优解[resultFit, resultIndex] = max(fit);result = pop(resultIndex, :);以上代码实现了一个简单的遗传算法,用于最小化目标函数x1^2 + x2^2。

遗传算法及其MATLAB程序代码

遗传算法及其MATLAB程序代码

遗传算法及其MATLAB程序代码遗传算法及其MATLAB实现主要参考书:MATLAB 6.5 辅助优化计算与设计飞思科技产品研发中⼼编著电⼦⼯业出版社2003.1遗传算法及其应⽤陈国良等编著⼈民邮电出版社1996.6主要内容:遗传算法简介遗传算法的MATLAB实现应⽤举例在⼯业⼯程中,许多最优化问题性质⼗分复杂,很难⽤传统的优化⽅法来求解.⾃1960年以来,⼈们对求解这类难解问题⽇益增加.⼀种模仿⽣物⾃然进化过程的、被称为“进化算法(evolutionary algorithm)”的随机优化技术在解这类优化难题中显⽰了优于传统优化算法的性能。

⽬前,进化算法主要包括三个研究领域:遗传算法、进化规划和进化策略。

其中遗传算法是迄今为⽌进化算法中应⽤最多、⽐较成熟、⼴为⼈知的算法。

⼀、遗传算法简介遗传算法(Genetic Algorithm, GA)最先是由美国Mic-hgan⼤学的John Holland于1975年提出的。

遗传算法是模拟达尔⽂的遗传选择和⾃然淘汰的⽣物进化过程的计算模型。

它的思想源于⽣物遗传学和适者⽣存的⾃然规律,是具有“⽣存+检测”的迭代过程的搜索算法。

遗传算法以⼀种群体中的所有个体为对象,并利⽤随机化技术指导对⼀个被编码的参数空间进⾏⾼效搜索。

其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定等5个要素组成了遗传算法的核⼼内容。

遗传算法的基本步骤:遗传算法是⼀种基于⽣物⾃然选择与遗传机理的随机搜索算法,与传统搜索算法不同,遗传算法从⼀组随机产⽣的称为“种群(Population)”的初始解开始搜索过程。

种群中的每个个体是问题的⼀个解,称为“染⾊体(chromos ome)”。

染⾊体是⼀串符号,⽐如⼀个⼆进制字符串。

这些染⾊体在后续迭代中不断进化,称为遗传。

在每⼀代中⽤“适值(fitness)”来测量染⾊体的好坏,⽣成的下⼀代染⾊体称为后代(offspring)。

遗传算法matlab函数的源程序

遗传算法matlab函数的源程序
chi(j,i)=rand();
end
end
end
%确定下一代父代个体
%确定实际子代个体数值
chi_fact=zeros(x_num,chi_num*3);
for j=1:x_num
chi_fact(j,:)=x_range(j,1)+(x_range(j,2)-x_range(j,1))*chi(j,:);
par=chi(:,chi_ada_no(1:par_num));
end ');
par_fac_exc(:,1)=x_range(:,1)+(x_range(:,2)-x_range(:,1)).*par(:,1);%父代个体最优函数值
par_fun_exc=fun(par_fac_exc);
%输出父代样本实际值
par_fact=zeros(x_num,par_num);
for i=1:x_num
par_fact(i,:)=x_range(i,1)+(x_range(i,2)-x_range(i,1))*par(i,:);
if chi_ran(3)<0.5
chi(j,i)=chi_ran(1)*par(j,chi_sel1)+(1-chi_ran(1))*par(j,chi_sel2);
else
chi(j,i)=chi_ran(2)*par(j,chi_sel1)+(1-chi_ran(2))*par(j,chi_sel2);
%例子2:
%fun=@(x) sum(x.*x-cos(18*x))+5;
%x_range=[-1,1;-1,1;-1,1;-1,1;-1,1];

基于改进遗传算法的路径规划MATLAB实现

基于改进遗传算法的路径规划MATLAB实现

基于遗传算法的路径规划MATLAB实现主程序:clear all;close all;t=23; %过程点个数=t-1s=500; %种群规模pc=0.90; %交叉概率pm=0.20; %变异概率pop=zeros(s,t);for i=1:spop(i,1:t-1)=randperm(t-1);endfor k=1:1:2000 %进化代次数kif mod(k,10)==1kendpop=lujingdis(pop);c=15;%选择淘汰个数pop=lujingselect(pop,c);p=rand;if p>=pcpop=lujingcross(pop);endif p>=pmpop=lujingmutate(pop);Endendpopmin(pop(:,t))J=pop(:,t);fi=1./J;[Oderfi,Indexfi]=sort(fi); %安排fi从小到大BestS=pop(Indexfi(s),:); %使BestS=E(m),m即是属于max(fi)的Indexfi I=BestS;x=[2 3 6 10 14 17 22 20 23 25 30 28 25 21 29 16 18 15 9 11 6 5 ];y=[5 26 14 29 27 24 28 22 26 30 30 17 13 15 4 13 3 1 6 2 2 7];%过程点坐标% x=[1 2 3 4 6 9 11 10 8 9 6 4]; %12个过程点的坐标% y=[1 2 3 4 8 10 11 9 5 2 1 2];for i=1:1:t-1x1(i)=x(I(i));y1(i)=y(I(i));endx(t)=x(I(1));y(t)=y(I(1));a = [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 11 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 0 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 11 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 11 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 11 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 11 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1];%31*31栅格%a = [1 1 1 1 1 1 1 1 1 11 1 1 0 0 1 1 1 0 01 0 1 0 0 1 1 1 1 10 0 1 1 1 1 0 1 1 01 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 11 0 0 1 1 0 1 1 1 11 1 1 1 1 1 1 1 1 01 1 1 1 1 1 1 1 1 10 1 1 1 1 1 0 0 1 1];%11*11栅格b = a;b(end+1,end+1) = 0;colormap([0 0 0;1 1 1]),pcolor(b)axis image xy;%绘制栅格图hold on;figure(1);plot(x,y,'-or');适应度函数程序:lujingdis.mfunction [pop]=qiujuli(pop)[s,t]=size(pop);for i=1:1:sdd=0;for j=1:1:t-2dd=dd+lujingcalculate(pop(i,j),pop(i,j+1));endpop(i,t)=dd;End距离计算程序:lujingcalculate.mfunction [d]=juli(m,n)x=[2 3 6 10 14 17 22 20 23 25 30 28 25 21 29 16 18 15 9 11 6 5 ]; y=[5 26 14 29 27 24 28 22 26 30 30 17 13 15 4 13 3 1 6 2 2 7]; %x=[1 2 3 4 6 9 11 10 8 9 6 4];% y=[1 2 3 4 8 10 11 9 5 2 1 2];d=sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);选择算子程序:lujingselect.mfunction [pop]=select(pop,k)[s,t]=size(pop);m11=(pop(:,t));m11=m11';mmax=zeros(1,k);mmin=zeros(1,k);num=1;while num<k+1[a,mmax(num)]=max(m11);m11(mmax(num))=a;num=num+1;endnum=1;while num<k+1[b,mmin(num)]=min(m11);m11(mmin(num))=a;num=num+1;endfor i=1:kpop(mmax(i),:)=pop(mmin(i),:);End交叉算子程序:lujingcross.mfunction [pop]=cross(pop)[s,t]=size(pop);pop1=pop;for i=1:2:sm=randperm(t-3)+1;crosspoint(1)=min(m(1),m(2));crosspoint(2)=max(m(1),m(2));for j=1:crosspoint(1)while find(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;endendfor j=crosspoint(2)+1:t-1while find(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;endendend[pop]=lujingdis(pop);for i=1:sif pop1(i,t)<pop(i,t)pop(i,:)=pop1(i,:);endEnd变异算子程序:lujingmutate.mfunction [pop] = mutate(pop)[s,t]=size(pop);pop1=pop;for i=1:2:sm=randperm(t-3)+1;mutatepoint(1)=min(m(1),m(2));mutatepoint(2)=max(m(1),m(2));mutate =round((mutatepoint(2)-mutatepoint(1))/2-0.5);for j=1:mutatezhong=pop(i,mutatepoint(1)+j);pop(i,mutatepoint(1)+j)=pop(i,mutatepoint(2)-j);pop(i,mutatepoint(2)-j)=zhong;endend[pop]=lujingdis(pop);for i=1:sif pop1(i,t)<pop(i,t)pop(i,:)=pop1(i,:);endend。

遗传算法matlab代码

遗传算法matlab代码

function youhuafunD=code;N=50; % Tunablemaxgen=50; % Tunablecrossrate=0.5; %Tunablemuterate=0.08; %Tunablegeneration=1;num = length(D);fatherrand=randint(num,N,3);score = zeros(maxgen,N);while generation<=maxgenind=randperm(N-2)+2; % 随机配对交叉A=fatherrand(:,ind(1:(N-2)/2));B=fatherrand(:,ind((N-2)/2+1:end));% 多点交叉rnd=rand(num,(N-2)/2);ind=rnd tmp=A(ind);A(ind)=B(ind);B(ind)=tmp;% % 两点交叉% for kk=1:(N-2)/2% rndtmp=randint(1,1,num)+1;% tmp=A(1:rndtmp,kk);% A(1:rndtmp,kk)=B(1:rndtmp,kk);% B(1:rndtmp,kk)=tmp;% endfatherrand=[fatherrand(:,1:2),A,B];% 变异rnd=rand(num,N);ind=rnd [m,n]=size(ind);tmp=randint(m,n,2)+1;tmp(:,1:2)=0;fatherrand=tmp+fatherrand;fatherrand=mod(fatherrand,3);% fatherrand(ind)=tmp;%评价、选择scoreN=scorefun(fatherrand,D);% 求得N个个体的评价函数score(generation,:)=scoreN;[scoreSort,scoreind]=sort(scoreN);sumscore=cumsum(scoreSort);sumscore=sumscore./sumscore(end);childind(1:2)=scoreind(end-1:end);for k=3:Ntmprnd=rand;tmpind=tmprnd difind=[0,diff(t mpind)];if ~any(difind)difind(1)=1;endchildind(k)=scoreind(logical(difind));endfatherrand=fatherrand(:,childind);generation=generation+1;end% scoremaxV=max(score,[],2);minV=11*300-maxV;plot(minV,'*');title('各代的目标函数值');F4=D(:,4);FF4=F4-fatherrand(:,1);FF4=max(FF4,1);D(:,5)=FF4;save DData Dfunction D=codeload youhua.mat% properties F2 and F3F1=A(:,1);F2=A(:,2);F3=A(:,3);if (max(F2)>1450)||(min(F2)<=900)error('DATA property F2 exceed it''s range(900,1450]')end% get group property F1 of data, according to F2 value F4=zeros(size(F1));for ite=11:-1:1index=find(F2<=900+ite*50);F4(index)=ite;endD=[F1,F2,F3,F4];function ScoreN=scorefun(fatherrand,D)F3=D(:,3);F4=D(:,4);N=size(fatherrand,2);FF4=F4*ones(1,N);FF4rnd=FF4-fatherrand;FF4rnd=max(FF4rnd,1);ScoreN=ones(1,N)*300*11;% 这里有待优化for k=1:NFF4k=FF4rnd(:,k);for ite=1:11F0index=find(FF4k==ite);if ~isempty(F0index)tmpMat=F3(F0index);tmpSco=sum(tmpMat);ScoreBin(ite)=mod(tmpSco,300);endendScorek(k)=sum(ScoreBin);endScoreN=ScoreN-Scorek;遗传算法实例:% 下面举例说明遗传算法 %% 求下列函数的最大值 %% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %% 将 x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为 (10-0)/(2^10-1)≈0.01 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于遗传算法的机器人路径规划MATLAB源代码基本思路是:取各障碍物顶点连线的中点为路径点,相互连接各路径点,将机器人移动的起点和终点限制在各路径点上,利用最短路径算法来求网络图的最短路径,找到从起点P1到终点Pn的最短路径。

上述算法使用了连接线中点的条件,因此不是整个规划空间的最优路径,然后利用遗传算法对找到的最短路径各个路径点Pi (i=1,2,…n)调整,让各路径点在相应障碍物端点连线上滑动,利用Pi= Pi1+ti×(Pi2-Pi1)(ti∈[0,1] i=1,2,…n)即可确定相应的Pi,即为新的路径点,连接此路径点为最优路径。

function [L1,XY1,L2,XY2]=JQRLJGH(XX,YY)
%% 基于Dijkstra和遗传算法的机器人路径规划
% GreenSim团队——专业级算法设计&代写程序
% 欢迎访问GreenSim团队主页→/greensim
%输入参数在函数体内部定义
%输出参数为
% L1 由Dijkstra算法得出的最短路径长度
% XY1 由Dijkstra算法得出的最短路径经过节点的坐标
% L2 由遗传算法得出的最短路径长度
% XY2 由遗传算法得出的最短路径经过节点的坐标
%程序输出的图片有
% Fig1 环境地图(包括:边界、障碍物、障碍物顶点之间的连线、Dijkstra的网络图结构)
% Fig2 由Dijkstra算法得到的最短路径
% Fig3 由遗传算法得到的最短路径
% Fig4 遗传算法的收敛曲线(迄今为止找到的最优解、种群平均适应值)
%% 画Fig1
figure(1);
PlotGraph;
title('地形图及网络拓扑结构')
PD=inf*ones(26,26);
for i=1:26
for j=1:26
if D(i,j)==1
x1=XY(i,5);
y1=XY(i,6);
x2=XY(j,5);
y2=XY(j,6);
dist=((x1-x2)^2+(y1-y2)^2)^0.5;
PD(i,j)=dist;
end
end
end
%% 调用最短路算法求最短路
s=1;%出发点
t=26;%目标点
[L,R]=ZuiDuanLu(PD,s,t);
L1=L(end);
XY1=XY(R,5:6);
%% 绘制由最短路算法得到的最短路径figure(2);
PlotGraph;
hold on
for i=1:(length(R)-1)
x1=XY1(i,1);
y1=XY1(i,2);
x2=XY1(i+1,1);
y2=XY1(i+1,2);
plot([x1,x2],[y1,y2],'k');
hold on
end
title('由Dijkstra算法得到的初始路径')
%% 使用遗传算法进一步寻找最短路
%第一步:变量初始化
M=50;%进化代数设置
N=20;%种群规模设置
Pm=0.3;%变异概率设置
LC1=zeros(1,M);
LC2=zeros(1,M);
Yp=L1;
%第二步:随机产生初始种群
X1=XY(R,1);
Y1=XY(R,2);
X2=XY(R,3);
Y2=XY(R,4);
for i=1:N
farm{i}=rand(1,aaa);
end
% 以下是进化迭代过程
counter=0;%设置迭代计数器
while counter<M%停止条件为达到最大迭代次数
%% 第三步:交叉
%交叉采用双亲双子单点交叉
newfarm=cell(1,2*N);%用于存储子代的细胞结构
Ser=randperm(N);%两两随机配对的配对表
A=farm{Ser(1)};%取出父代A
B=farm{Ser(2)};%取出父代B
P0=unidrnd(aaa-1);%随机选择交叉点
a=[A(:,1:P0),B(:,(P0+1):end)];%产生子代a
b=[B(:,1:P0),A(:,(P0+1):end)];%产生子代b
newfarm{2*N-1}=a;%加入子代种群
newfarm{2*N}=b;
for i=1:(N-1)
A=farm{Ser(i)};
B=farm{Ser(i+1)};
newfarm{2*i}=b;
end
FARM=[farm,newfarm];%新旧种群合并
%% 第四步:选择复制
SER=randperm(2*N);
FITNESS=zeros(1,2*N);
fitness=zeros(1,N);
for i=1:(2*N)
PP=FARM{i};
FITNESS(i)=MinFun(PP,X1,X2,Y1,Y2);%调用目标函数end
for i=1:N
f1=FITNESS(SER(2*i-1));
f2=FITNESS(SER(2*i));
if f1<=f2
else
farm{i}=FARM{SER(2*i)};
fitness(i)=FITNESS(SER(2*i));
end
end
%记录最佳个体和收敛曲线
minfitness=min(fitness);
meanfitness=mean(fitness);
if minfitness<Yp
pos=find(fitness==minfitness);
Xp=farm{pos(1)};
Yp=minfitness;
end
if counter==10
PPP=[0.5,Xp,0.5]';
PPPP=1-PPP;
X=PPP.*X1+PPPP.*X2;
Y=PPP.*Y1+PPPP.*Y2;
XY2=[X,Y];
figure(3)
PlotGraph;
hold on
for i=1:(length(R)-1)
x1=XY2(i,1);
y1=XY2(i,2);
x2=XY2(i+1,1);
y2=XY2(i+1,2);
plot([x1,x2],[y1,y2],'k');
hold on
end
title('遗传算法第10代')
hold on
for i=1:(length(R)-1)
x1=XY1(i,1);
y1=XY1(i,2);
x2=XY1(i+1,1);
y2=XY1(i+1,2);
plot([x1,x2],[y1,y2],'k','LineWidth',1);
hold on
end
end
if counter==20
PPP=[0.5,Xp,0.5]';
PPPP=1-PPP;
X=PPP.*X1+PPPP.*X2;
Y=PPP.*Y1+PPPP.*Y2;
XY2=[X,Y];
figure(4)
PlotGraph;
hold on
for i=1:(length(R)-1)
x1=XY2(i,1);
y2=XY2(i+1,2);
plot([x1,x2],[y1,y2],'k');
hold on
end
title('遗传算法第20代')
hold on
for i=1:(length(R)-1)
x1=XY1(i,1);
y1=XY1(i,2);
x2=XY1(i+1,1);
y2=XY1(i+1,2);
plot([x1,x2],[y1,y2],'k','LineWidth',1);
hold on
end
end
if counter==30
PPP=[0.5,Xp,0.5]';
PPPP=1-PPP;
X=PPP.*X1+PPPP.*X2;
Y=PPP.*Y1+PPPP.*Y2;
XY2=[X,Y];
figure(5)
PlotGraph;
hold on
for i=1:(length(R)-1)
x1=XY2(i,1);
y1=XY2(i,2);
x2=XY2(i+1,1);
y2=XY2(i+1,2);
plot([x1,x2],[y1,y2],'k');
hold on
end
title('遗传算法第30代')
hold on
for i=1:(length(R)-1)
x1=XY1(i,1);
y2=XY1(i+1,2);
plot([x1,x2],[y1,y2],'k','LineWidth',1);
hold on
end
end
if counter==40
PPP=[0.5,Xp,0.5]';
PPPP=1-PPP;
X=PPP.*X1+PPPP.*X2;
Y=PPP.*Y1+PPPP.*Y2;
XY2=[X,Y];
figure(6)
PlotGraph;
hold on。

相关文档
最新文档