一种基于遗传算法的多智能车避撞路径规划的方法与流程

文档序号:18405756发布日期:2019-08-10 00:21阅读:394来源:国知局
一种基于遗传算法的多智能车避撞路径规划的方法与流程

本发明涉及智能车导航技术领域,尤其涉及一种基于遗传算法的多智能车避撞路径规划的方法。



背景技术:

随着互联网行业的快速发展,网购的风潮席卷全球。在每一个网购的流程中,我们总是要在较大的仓库中运输货物。以往的传统仓库主要是靠人来使用运货车来搬运货物,耗费了人力资源也存在一定的危险性。而随着科技日新月异,智慧仓库也逐渐出现,它们利用一些智能小车来代替人力,利用指令来操控这些小车搬运货物。现今这一些智能小车来自动地运输货物已经成为各大物流公司方便快捷的选择。这一些智能小车是现代工业自动化物流系统中的关键设备,凭借其施工简单、路径灵活、不占用空间、较好的移动性、柔性等优点深受自动化运输的青睐。而在国内,京东商场的所谓智慧仓库就是用智能小车来全自动化地搬运货物。但是在实际的应用中,在错综复杂的仓库里头,如何能够让小车更快地在不出现意外碰撞的情况下完成货物的搬运,提高物流效率是这些公司们面对的主要问题。

现如今已经有的小车导航算法考虑的有基于时间窗的单小车避撞方法,成功的让一辆车能在仓库中避开其他小车完成任务。该方法缺失了对任务进行分配的宏观处理,导致小车的总路径不能达到最优。也有一些基于蚁群算法的针对多个小车的路径分配算法,但是缺失高效的避撞手段,导致算法不够贴近实际使用。



技术实现要素:

本发明要解决的技术问题是针对上述现有技术的不足,提供一种基于遗传算法的多智能车避撞路径规划的方法,本方法加快了算法的计算效率,也适用于实际应用,更有助于对新型的复杂的物流搬运方法的研究。

为解决上述技术问题本发明所采取的技术方案是:

本发明提供一种基于遗传算法的多智能车避撞路径规划的方法,包括如下步骤:

步骤1:获取小车行驶的地图、任务数量、以及人为设定小车的数量、小车的初始位置和小车速度的最大值,将地图转化为邻接矩阵;所述地图为线状的双向行驶干道,在地图上设有缓冲区并且在每条干道上都设有n个节点;每个节点包括占用时间窗和空闲时间窗,占用时间窗表示为在一段时间内该节点被某一辆小车所占用,占用时间窗组包括所有节点的占用时间窗;空闲时间窗表示在某一段时间内该节点未被小车占用,空闲时间窗组包括所有节点的空闲时间窗;所述任务由地图上的一个起始节点和一个终止节点所组成;

步骤2:根据遗传方法,依照得到的任务数量建立对应的染色体组;采用java自带的随机数工具类,生成一个长度为任务数量的,每个位置为0到1之间的随机数的数组,以此作为用于分配任务的染色体;根据人为设定的初始染色体数量,随机生成该数量的染色体,组成染色体组q;

步骤3:对产生的染色体组的个体进行交叉和变异处理,得到新的染色体组m;交叉处理采用的是基本的两点交叉法,根据交叉率在染色体组中选择任意的两个染色体对其中一个位置进行截断,然后两个数组进行交叉交换,生成新的两个个体;所述交叉率是每一次交叉都将随机生成0-1的随机数作为交叉率;所述变异是对所有新生成的染色体生成0到1的随机数,达到变异率的数组再随机生成新的染色体;所述染色体组m由染色体组q内的所有染色体和经过交叉和变异后的新生成的染色体组成;

步骤4:对染色体组m中的每一个染色体个体进行如下操作:对染色体采用归并排序,得到一个任务序列;对于每一个任务,根据当前车辆最早开始任务的时间,选出最早能执行任务的车辆进行避撞路径规划,按照任务顺序将当前数组中所有任务都进行避撞路径规划,规划每一个小车从起始点到终止点的路径,根据迪杰斯特拉方法对每一个点到点的路径进行规划,得到小车的常规路径,在每一条路径规划之后,将路径规划过程中的所有数据储存至历史数据库中,最终得到序列路径规划集合x,遍历染色体组m中的每一个染色体个体,得到总路径集合u={x1、x2、…、xm},其中m代表序列路径规划集合的编号;

步骤5:当小车完成任务之后,执行步骤4.2到4.6将其规划到缓冲区中,将其规划到缓冲区中,根据先后到达的时间顺序,将小车引导入不同深度的区域;所述缓冲区的两个点连接着地图作为进出点;

步骤6:将每辆小车的运行距离的倒数之和设置为该染色体个体的适应度;判断是否进化次数达到人为设定的最小进化次数且适应度稳定不变或者进化次数到达人为设定的最大进化次数,若是,则跳出循环,选取当前染色体组中的适应度最高的个体的任务分配方式以及小车的路径规划作为输出路径规划方案;若否,则根据其适应度的大小比例,让染色体组q中的所有染色体个体占有0到1之间的一块数段,随机数生成0到1之间的数,根据其所在数段,留下与其数段相对应的染色体,以此重复选择k次,其中k代表染色体组q中的染色体总数,留下非重复的个体组成新的染色体组,从而淘汰掉适应度低下的个体,并且选取出适应度最大的优秀个体作为精英个体加入到染色体组中,组成迭代染色体组其中σ为迭代次数;执行步骤3。

所述步骤4的具体步骤如下:

步骤4.1:在染色体组m中随机选择一个染色体将其进行归并排序,得到一个任务序列,根据任务序列中最早执行的任务时间,在缓冲区内选择能够最早执行任务的车辆,将其由当前位置调至任务起始点;

步骤4.2:将步骤1中获取的地图生成的邻接矩阵,选择出与小车cn所在的当前节点相连接的所有节点,形成下一节点集合q={q1,q2,…,qd,…qα},其中n代表小车的编号,qd为编号为d的下一个节点;遍历集合q中的所有节点,判断当前节点的小车cn从该节点行驶到下一个节点qd的时间,以及小车行驶出下一个节点qd的时间是否在该节点的空闲时间窗的空闲时间范围之内;若是则代表小车能通过下一个节点qd,将该节点的空闲时间窗保存至候选时间窗组h1内,若否则代表小车不能通过该节点;

步骤4.3:获取历史数据库中当前节点的空闲时间窗和候选时间窗组内下一个节点qα的空闲时间窗被相同车辆占用的时间t1和t2,若历史数据库中不存在该数据则不发生碰撞,则继续查看候选时间窗组h1内的下一个候选时间窗;若历史数据库中存在该数据则将小车cn在当前节点空闲时间窗和下一个节点qd的空闲时间窗的占用时间t3和t4与t1和t2进行比较,若产生了追击碰撞或相向碰撞则将下一个节点qα的空闲时间窗从候选时间窗组h1内删除;重复本步骤遍历候选时间窗组h1内的所有空闲时间窗,得到候选时间窗组h2;所述追击碰撞为t3>t1且t4<t2或者t3<t1且t4<t2则表示两个小车产生了追击碰撞,所述相向碰撞为t3<t2<t4且t2<t1则表明小车在反向行驶且会造成相向碰撞;

步骤4.4:在历史数据库中查询当前节点是否存在下一个空闲时间窗,若否则执行步骤4.5;若是,则说明当前节点在小车cn占用时间到下一个该节点的空闲时间窗所处时间之间有其他小车经过当前节点,则小车cn将判断与当前节点相连接的路径上且由当前时间至当前节点的下一个空闲时间窗开启时间内是否存在无车辆的空路径,若是则将该空闲时间窗储存至候选时间窗组h2内,小车cn到达下一节点qd的时间设置为下一时间窗的开启时间,并且在下一节点qd的空闲时间窗内存入避让的路径;若否则说明无法避让,执行步骤4.5;

步骤4.5:将候选时间窗组h2内小车cn在当前节点空闲时间窗到达下一节点空闲时间窗用时最短的节点添加到确定时间窗组中;并将该节点在候选时间窗组h2内删除;

步骤4.6:将小车移动到用时最短的下一节点,重复步骤4.2至步骤4.5,直到小车cn的终止节点的时间窗被加入到确定时间窗组里,结束循环,得到了一个时间窗路径,以此时间窗路径为常规路径;

步骤4.7:按照步骤4.1中得到的当前染色体中任务的先后顺序,重复步骤4.2至步骤4.6遍历所有任务,得到序列路径规划集合x;

步骤4.8:遍历染色体组m中的每一个染色体个体,重复步骤4.1至4.7,将所有的序列路径规划集合储存至总路径集合u中,u={x1、x2、…、xm},其中m为序列路径规划集合的编号;

所述步骤1中线状的双向行驶干道只能运行一辆小车通行,在干道上设有节点,节点表示收接货区域,小车可以在其区域停顿一段时间来交接货物;当节点是横纵两条干道交叉而得到的时候,节点则表示为十字路口,小车需要在该点停顿一段时间表示穿越过程。

采用上述技术方案所产生的有益效果在于:本发明提供的一种基于遗传算法的多智能车避撞路径规划的方法,本发明从功能上来说,是在给定的地图上,让特定数目的小车以最短距离无碰撞的完成给定的任务(点到点的运动来搬运货物);使用的编程技术主要是java下的开发技术,运用了遗传算法和基于时间窗的避撞路径规划算法使得最优路径规划能够得到实现;该路径规划算法采用的是以节点作为一个时间窗单位,而不是传统的以边作为时间窗的方法,大大加快了算法的计算效率,也适用于实际应用,更有助于对新型的复杂的物流搬运方法的研究。

附图说明

图1为本发明实施例提供的路径规划的方法流程图;

图2为本发明实施例提供的地图的基本结构图,其中1~9代表地图干道上设有的节点,a代表一辆正在运行的小车,b代表另一辆正在运行的小车,e、f分别代表地图上设有的缓冲区。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

本实施方式的软件环境为windows10系统,开发工具为jdk9.0,采用矩阵工具ujmp做矩阵计算,用junit,mockito进行单元测试和集成测试。仿真环境是java虚拟机。将地图以及小车信息导入:可以导入或者手动建立地图,设定小车的速度;然后设置小车的数量,以及输入任务以及该任务的数量,运行系统;并根据传送来的数据,对其数据进行转化,将json数据格式转化为我们需要的存储小车当前位置的链表数据结构以及邻接矩阵来表示地图等信息。

如图1所示,本实施例的方法如下所述。

本发明提供一种基于遗传算法的多智能车避撞路径规划的方法,包括如下步骤:

步骤1:获取小车行驶的地图、任务数量、以及人为设定小车的数量、小车的初始位置和小车速度的最大值,将地图转化为邻接矩阵;所述地图为线状的双向行驶干道,如图2所示,在地图上设有缓冲区并且在每条干道上都设有n个节点;每个节点包括占用时间窗和空闲时间窗,占用时间窗表示为在一段时间内该节点被某一辆小车所占用,占用时间窗组包括所有节点的占用时间窗;空闲时间窗表示在某一段时间内该节点未被小车占用,空闲时间窗组包括所有节点的空闲时间窗;所述任务由地图上的一个起始节点和一个终止节点所组成;

本实施例中设定任务数量为3;

步骤2:根据遗传算法,依照得到的任务数量建立对应的染色体组;采用java自带的随机数工具类,生成一个长度为任务数量的,每个位置为0到1之间的随机数的数组,以此作为用于分配任务的染色体。根据人为设定的初始染色体数量,随机生成该数量的染色体,组成染色体组q。

步骤3:对产生的染色体组的个体进行交叉和变异处理,得到新的染色体组m。交叉处理采用的是基本的两点交叉法,根据交叉率在染色体组中选择任意的两个染色体对其中一个位置进行截断,然后两个数组进行交叉交换,生成新的两个个体。所述交叉率是每一次交叉都将随机生成0-1的随机数作为交叉率;所述变异是对所有新生成的染色体生成0到1的随机数,达到变异率的数组再随机生成新的染色体;所述染色体组m由染色体组q内的所有染色体和经过交叉和变异后的新生成的染色体组成;

步骤4:对染色体组m中的每一个染色体个体进行如下操作:对染色体采用归并排序,得到一个任务序列;对于每一个任务,根据当前车辆最早开始任务的时间,选出最早能执行任务的车辆进行避撞路径规划,按照任务顺序将当前数组中所有任务都进行避撞路径规划,规划每一个小车从起始点到终止点的路径,根据迪杰斯特拉算法对每一个点到点的路径进行规划,得到小车的常规路径,在每一条路径规划之后,将路径规划过程中的所有数据储存至历史数据库中,最终得到序列路径规划集合x,遍历染色体组m中的每一个染色体个体,得到总路径集合u={x1、x2、…、xm},其中m代表序列路径规划集合的编号;

步骤4.1:在染色体组m中随机选择一个染色体将其进行归并排序,得到一个特定顺序的任务序列,根据任务序列中最早执行的任务时间,在缓冲区内选择能够最早执行任务的车辆,将其由当前位置调至任务起始点;

实施例中本步骤中的染色体为[0.1,0.4,0.3],分别对应于任务1,2和3经过归并排序后得到[0.1,0.3,0.4],所以得到的任务序列为任务1,任务3,任务2。

步骤4.2:将步骤1中获取的地图生成的邻接矩阵,选择出与小车cn所在的当前节点相连接的所有节点,形成下一节点集合q={q1,q2,…,qd,…qα},其中n代表小车的编号,qd为编号为d的下一个节点;遍历集合q中的所有节点,判断当前节点的小车cn从该节点行驶到下一个节点qd的时间,以及小车行驶出下一个节点qd的时间是否在该节点的空闲时间窗的空闲时间范围之内;若是则代表小车能通过下一个节点qd,将该节点的空闲时间窗保存至候选时间窗组h1内,若否则代表小车不能通过该节点;

步骤4.3:获取历史数据库中当前节点的空闲时间窗和候选时间窗组内下一个节点qα的空闲时间窗被相同车辆占用的时间t1和t2,若历史数据库中不存在该数据则不发生碰撞,则继续查看下一个候选时间窗;若历史数据库中存在该数据则将小车cn在当前节点空闲时间窗和下一个节点qd的空闲时间窗的占用时间t3和t4与t1和t2进行比较,若产生了追击碰撞或相向碰撞则将下一个节点qα的空闲时间窗从候选时间窗组h1内删除;重复本步骤遍历候选时间窗组h1内的所有空闲时间窗,得到候选时间窗组h2;所述追击碰撞为t3>t1且t4<t2或者t3<t1且t4<t2则表示两个小车产生了追击碰撞,所述相向碰撞为t3<t2<t4且t2<t1则表明小车在反向行驶且会造成相向碰撞;

步骤4.4:在历史数据库中查询当前节点是否存在下一个空闲时间窗,若否则执行步骤4.5;若是,则说明当前节点在小车cn占用时间到下一个该节点的空闲时间窗所处时间之间有其他小车经过当前节点,则小车cn将判断与当前节点相连接的路径上且由当前时间至当前节点的下一个空闲时间窗开启时间内是否存在无车辆的空路径,若是则将该空闲时间窗储存至候选时间窗组h2内,小车cn到达下一节点qd的时间设置为下一时间窗的开启时间,并且在下一节点qd的空闲时间窗内存入避让的路径;若否则说明无法避让,执行步骤4.5;

步骤4.5:将候选时间窗组h2内小车cn在当前节点空闲时间窗到达下一节点空闲时间窗用时最短的节点添加到确定时间窗组中;并将该节点在候选时间窗组h2内删除;

步骤4.6:将小车移动到用时最短的下一节点,重复步骤4.2至步骤4.5,直到小车cn的终止节点的时间窗被加入到确定时间窗组里,结束循环,得到了一个时间窗路径,以此时间窗路径为常规路径;

步骤4.7:按照步骤4.1中得到的当前染色体中任务的先后顺序,重复步骤4.2至步骤4.6遍历所有任务,得到序列路径规划集合x;

步骤4.8:遍历染色体组m中的每一个染色体个体,重复步骤4.1至4.7,将所有的序列路径规划集合储存至总路径集合u中,u={x1、x2、…、xm},其中m为序列路径规划集合的编号;

步骤5:为了避免小车最终停靠在仓库主要干道上阻挡行车,也为了能让小车充电维修等,地图的边缘地带设置有一部分的缓冲区供其停靠。当小车完成任务之后,执行步骤4.2到4.6将其规划到缓冲区中,将其规划到缓冲区中,根据先后到达的时间顺序,将小车引导入不同深度的区域。缓冲区也与地图一样,是由一些节点连接而成的单向行驶的图,所述缓冲区的两个点连接着地图作为进出点。

步骤6:将每辆小车的运行距离的倒数之和设置为该染色体个体的适应度;判断是否进化次数达到人为设定的最小进化次数且适应度稳定不变或者进化次数到达人为设定的最大进化次数,若是则跳出循环,选取当前染色体组中的适应度最高的个体的任务分配方式以及小车的路径规划作为输出逇路径规划方案;若否则根据其适应度的大小比例,让染色体组q中的所有染色体个体占有0到1之间的一块数段,随机数生成0到1之间的数,根据其所在数段,留下与其数段相对应的染色体,以此重复选择k次,其中k代表染色体组q中的染色体总数,留下非重复的个体组成新的染色体组,从而淘汰掉适应度低下的个体,并且选取出适应度最大的优秀个体作为精英个体加入到染色体组中,组成迭代染色体组其中σ为迭代次数;执行步骤3。

如图2所示,所述线状的双向行驶干道只能运行一辆小车通行,在干道上设有节点,节点表示收接货区域,小车可以在其区域停顿一段时间来交接货物;当节点是横纵两条干道交叉而得到的时候,节点则表示为十字路口,小车需要在该点停顿一段时间表示穿越过程。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明权利要求所限定的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1