基于K-means和离散粒子群算法的无人车任务分配方法与流程

文档序号:17894199发布日期:2019-06-13 15:52阅读:476来源:国知局
基于K-means和离散粒子群算法的无人车任务分配方法与流程

本发明涉及物流配送优化领域,具体涉及一种无人物流领域中的任务分配方法。



背景技术:

随着电子商务行业的体量不断膨胀和人工成本的不断提高,配送作为物流运转的基础环节,由于其覆盖率的不断扩大,数据更新更加频繁,配给任务日益繁重,更有“送货上门”的服务要求的提高,智慧物流的日益盛行,中国物流已开启无人化时代。

无人仓的存储效率可达到传统横梁货架存储效率的数倍。据某电商物流统计的信息,其无人分拣中心的分拣能力可以达到9000件/小时,供包环节的效率提升了4倍,在同等场地规模和分拣货量的前提下,每个场地可节省人力180人。无人机能够将传统人工配送的时间缩短数倍甚至数十倍,物流成本也随之降低。但其由于存在恶劣天气下送货无力,飞行过程无法避免人为破坏等缺点,在现阶段还无法大批量商用。而在近期实验表明,无人车则能一次性送6件快递,一次充电续航80公里,可以弥补无人机配送缺点,大批量生产使用。随着物流现代化和智能化的发展,国内市场对于无人物流的需求将进一步扩大。客观地说,无人车系统的应用领域相当广阔,几乎只要有货物需要连续或重复运输的环境都可以使用无人车系统。单无人车的调度已经无法满足现有庞大的物流量,无人物流应用中的多无人车智能调度系统属于复杂的动态、多目标离散系统,当地图密度越高且无人车数量越多时,出现大量延迟等待的几率也越高。实现在不确定环境(如马路上)中无人车之间相互协调合作以减少出入库等操作任务执行时发生的冲突,成为较为重要的实际目标。

所以,想要利用多无人车达成“最后1公里”的愿望,多无人车的任务分配问题的研究至关重要。目前多无人车分配方面主要采用的有粒子群算法、蚁群算法、简单扫描法、分支界定法、模拟退火算法、动态规划算法等,但当前这些算法都存在一定的缺点,主要包括:与实际物流背景的契合度低,收敛速度慢,求解结果不一定是最优解,运算时间长等问题。

因此,需要一种更高效的多无人车分配方法。



技术实现要素:

发明目的:针对现有技术的不足,本发明提出一种基于k-means和离散粒子群算法的多无人车任务分配方法,实现了更加实用和高效的无人车任务分配。

技术方案:本发明提出了一种带有打包策略(k-means)和离散粒子群算法的多无人车任务分配方法,包括:

s1、物流场景信息初始化;

s2、物流任务打包:使用k-means算法确定最佳打包结果,其打包个数为k;

s3、取k辆可用无人车,匹配每个任务包的执行无人车;

s4、对每一辆无人车用离散粒子群算法确定其任务序列。

其中,步骤s1包括任务信息初始化、仓库信息初始化以及无人车信息初始化。

步骤s2包括:

s21、获取任务点数量和可用无人车数量,确定需要打包的任务包数量上限;

s22、使用k-means算法实现k个任务包的打包结果;

s23、根据k个任务包的打包结果计算其类外距、类内距和相似度,取最小的相似度值所对应的k值和打包方案,其中类外距为每个任务包中心到全任务包中心的距离值之和,类内距为每个任务包中所含任务点到该任务包中心的距离值之和,相似度为类外距和类内距之和。

步骤s4中通过离散化更新粒子速度和位置,计算目标函数的值,从而确定使无人车付出代价最小的任务序列。

有益效果:

1、本发明的方法结合聚类思想和群智优化算法,对多无人车任务分配问题进行解答,该方法以提高任务分配算法效率为目的,为符合实际物流场景,使用离散化的粒子群算法进行多无人车的任务分配,粒子群算法的收敛速度快,离散化的迭代方式使算法更适用于实际的物流背景。

2、本发明在使用粒子群算法前先用k-means聚类算法对任务进行打包,极大地减小了解空间的大小,提高了任务分配效率。

附图说明

图1是基于k-means和离散粒子群算法的多无人车任务分配方法的整体流程图;

图2是使用k-means算法确定最佳打包方案的流程图;

图3是使用k-means算法执行一次打包方案的流程图;

图4是本发明的离散粒子群算法的流程图。

具体实施方式

下面结合附图对本发明的技术方案作进一步说明。

基于k-means和离散粒子群算法的多无人车任务分配方法在任务分配前,先利用k-means聚类将任务目标以合适的任务包数量进行打包,对多个任务包用离散粒子群算法进行多无人车的分配,图1给出了本发明方法的整体流程。

步骤s1,对物流场景信息进行初始化。

包括:加载各仓库信息storehouse(x,y,n,id),其中storehouse.x表示仓库的地理维度、storehouse.y表示仓库的地理经度、storehouse.n表示仓库剩余物件数量、storehouse.id表示仓库的编号;

加载各无人车信息car(x,y,v,f,id,visible),其中car.x表示无人车的地理维度、car.y表示无人车的地理经度、car.v表示无人车的行车速度、car.f表示无人车的剩余可用燃油量、car.id表示无人车的编号、car.visible表示无人车的工作状态,当无人车仍在执行任务时,car.visible=0,当无人车处于空闲状态时,car.visible=1;

加载各任务点信息task(x,y,id),其中task.x表示任务点的地理纬度、task.y表示任务点的地理经度、task.id表示任务点的编号,当两个任务点的task(x,y)均相同时,task.id越小,优先级越高。

物流场景即利用多辆无人车将各仓库中的物件运送到指定的目标任务点,每辆无人车完成配送任务后回到仓库,仓库的地理信息用于计算任务与仓库的距离,无人车在此分配方法中只用到经纬度、id和速度(速度用来算从一个地点到一个任务点的行驶时间),任务的优先级在这里也可以理解成同一位置的不同任务,其他信息主要用于项目的图形化表示及具体实例的运算。

步骤s2,使用k-means算法确定最佳打包结果,其打包个数为k。

主要根据任务目标点的相对位置和与仓库的距离,将任务分为适当数量的任务包。任务包可以理解为根据一定的条件划分出的任务点的集合,把任务打包,这一集合的任务指定某一辆车完成,其他车不参与。

参照图2,具体步骤包括:

步骤s2.1:获取任务点数量n_task和可用无人车数量n_car,确定需要打包的任务包数量上限kmax;

打包数上限kmax由任务点数量和可用无人车数量两者决定。根据经验法可得,打包数k满足因此,当可用无人车数量多的时候,打包数上限可用经验法得到,当可用无人车数量少的时候,打包数上限由可用无人车数量决定,则打包数上限kmax满足如下公式:

其中,kmax表示任务打包数的上限值、n_task表示任务点的总数量,当同一个目标点有多个任务时,用多个经纬度一致但任务编号不同的任务点表示、n_car表示可用无人车总数。

步骤s2.2:令循环变量k=1;

步骤s2.3:对于每一个k=i,使用k-means算法实现k个任务包的打包结果,其中,如图3所示,k-means算法的具体步骤如下:

step1:随机初始化k个任务包的包中心a1(x1,y1),a2(x2,y2),...,ak(xk,yk),包中心在这里指的是这个包中所有任务点的经纬度平均值。

step2:对于每个任务点task(x,y,id),将其归为距离最近的任务包中心aj(xj,yj)所在的任务包j中,该划分规则满足如下公式:

其中,labelid为任务点task(x,y,id)的包划分,aj(xj,yj)表示第j个任务包中心,i从1到2表示一个纬度一个经度,min括号里为距离公式,min就是对于所有的task都去做一个这样的运算,找到一个距离最近的aj,sub就是指求这个aj的下标j这样一个运算。

step3:更新每个任务包的包中心aj(xj,yj),新包中心的属性值(即经纬度)为隶属该任务包的所有任务点的属性值均值,满足如下公式:

其中,aj(xj,yj)表示新的包中心、cj是新的任务包划分、n_cj指的是新任务包cj内所含的任务点个数。

step4:当各包中心变化率小于某给定值,或达到最大迭代次数时,结束本次打包,反之,回到step2。

包中心变化率是描述每个任务包地理位置的变化的数量级,每一次更新包中心的时候,每个包中心的经纬度会相应发生变化,比如从(60,130)变到(59.9,129.99),其变化δx=0.1,δy=0.01,这里可以认为变化率等于0.1,取两者变化的最大值,即公式可以写成max{δx,δy}。当这个变化小到可以接受的时候,就能认为本次的打包已经完成。

步骤s2.4:判断if(k≤kmax),若逻辑值为0,则结束所有打包,输出所有打包结果,反之,则k++并返回步骤s2.3。

步骤s2.5:计算全任务包中心atotal(xtotal,ytotal)

其中,atotal表示所有任务点的中心,taskid表示该id的任务的经纬度,即通过经纬度来平均,求出这个包中所有任务的中心位置点;n_task表示任务点的数量。

步骤s2.6:分别对每一个k=i使用k-means算法得到的k个任务包打包结果计算其类外距,即每个任务包中心到全任务包中心的距离值之和,满足如下公式:

其中,l表示类外距、ai表示第i个包中心、atotal表示全任务包中心。这里带上绝对值的相减表示求两个点间的距离。

步骤s2.7:分别对每一个k=i使用k-means算法得到的k个任务包打包结果计算其类内距,即每个任务包中所含任务点到该任务包中心的距离值之和,满足如下公式:

其中,d表示类内距、ai表示第i个包中心、ci表示第i个任务包。

步骤s2.8:分别对每一个k=i使用k-means算法得到的k个任务包打包结果计算其距离相似度函数,即类外距和类内距之和,满足如下公式:

其中,f(s,k)表示本次打包的距离相似度函数值,该值越小,则打包结果越好。

步骤s2.9:为保存当前最好打包结果,令temp=f(s,kmax),k=kmax-1;

步骤s2.10:判断if(temp<f(s,k)),若逻辑值为0,则说明k个任务包的打包结果比当前最好结果还要好,则更新temp=f(s,k);

步骤s2.11:k=k-1;

步骤s2.12:重复步骤s2.10、s2.11,直到k=0为止;

步骤s2.13:记录temp对应的k值和打包方案。

步骤s3,取k辆可用无人车,随机匹配每个任务包的对应执行无人车,若可用无人车数量很多时,随机选取k辆。

除了随机匹配之外,还可以按距离就近匹配,使每辆无人车拥有其认领的无序任务队列。

步骤s4,对每一辆无人车用离散粒子群算法确定其任务序列,然后按序列确定的顺序执行送货任务。

确认任务序列具体步骤包括:

步骤s4.1:令循环变量i=1;

步骤s4.2:对于第i个任务包ci,使用离散粒子群算法确定该任务包对应执行无人车的任务执行序列,其中,如图4所示,离散粒子群算法的具体步骤如下:

step1:随机生成一定数量的粒子xt,构成初始化粒子群,xt表示了任务包中任务点的一种排列方式;

step2:判断迭代次数是否超过其上限,若超过,则输出该执行无人车的任务执行序列;

step3:获取该任务包的任务点数量n,根据适应度函数更新pbestt和gbestt,pbestt是个体极值,指的是每个粒子的最好位置,gbestt是全体极值,指的是全体粒子的最好位置,适应度函数就是下面两个函数,要使这两个函数达到最小是我们的目标,此时适应度可理解为执行无人车的代价,则可有如下两个目标:

其中,runi,j表示第i个阶段行驶到任务点j的时长、xi,j表示第i个阶段是否执行任务j,xi,j=1即为第i个阶段执行任务j,xi,j=0表示第i个阶段不执行任务j,delayi,j表示第i个阶段执行第j个任务点的时延、performi,j表示第i个阶段执行第j个任务的执行时间,目标一minj1可以理解为总行驶时间最少,目标二minj2可以理解为总执行任务时间最短。

为使用离散粒子群算法求解目标,用乘除法将上述多目标转化为单目标则为:

minj=j1j2

step4:更新粒子,转到step2,为保证粒子的更新符合实际场景,且任务被全部执行,设计新的离散化粒子更新方式,离散化粒子更新方式满足如下表达式:

其中,vt是随机生成的循环右移向量,即根据该向量对任务序列进行循环右移操作、pbestt是个体极值、gbestt是全局极值、指转化成个体极值所需的循环右移向量集合,同理,r1、r2分别表示随机性选择循环右移向量。最后每辆车会得到一个他的任务执行序列。

步骤s4.3:判断if(i≤k),若逻辑值为0,则输出任务分配结果,反之,则i++并返回步骤s4.2。

寻常的粒子群算法的随机性选择表现在乘以了两个随机小数,但这种方法并不适用于离散变量,本发明的背景是物流中的无人车任务执行序列,序列中每一个数都是整数,必须保证在迭代后还处于整数的情况,此时不适用原来的粒子群算法,因此可以为执行序列设置新的离散化更新,这种更新方式是基于循环右移操作的,这样做保证了序列中的数在迭代后必然还是整数的特征,并且这本身就是一个排列问题,排列问题本发明用交换位置的方式(这里用局部循环右移操作来描述)来解决更符合日常逻辑。此外由于传统粒子群算法因解空间过大而迭代速度慢,本发明把粒子群的迭代过程离散化的同时考虑使用了k-means算法对任务打包,这样把任务分配分为任务打包和定任务执行序列两步,表面上看把一步变成了两步,实则可以极大地减少解空间,加快计算速度。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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