基于改进型A*算法的物流配送车辆调度方法与流程

文档序号:14678231发布日期:2018-06-12 21:48阅读:318来源:国知局
基于改进型A*算法的物流配送车辆调度方法与流程

本发明涉及车联网技术领域,尤其涉及一种基于改进型A*算法的物流配送车辆调度方法。



背景技术:

物流配送路径中的车辆调度问题(VRP)是一个典型的组合优化问题,且已被证明是一个NP难问题,很难用精确算法对该问题在有限时间内求解。

一般常用的算法有Dijkstra算法和最佳优先搜索(BFS)算法,但是这两种算法都存在一定的缺点,Dijkstra是典型的单源最短路径算法,遇到地图中的U 型障碍物,Dijkstra算法就会运行得较慢,执行效率方面还需要改进;BFS尽管它比Dijkstra算法快的多,由于它只考虑到达目标的代价,所以遇到地图中的 U型障碍物时它不会避开而选择一条很长的路径。



技术实现要素:

本发明其目的在于提供一种快速便捷的VRP组合优化方案。

本发明采取的技术方案是:

本发明提出一种基于改进型A*算法的物流配送车辆调度方法,包括改进型 A*算法和物流配送算法两个部分。

本发明中用到的名词解释如下:

(1)路径:被称为从起点到终点经过节点的连续数列;

(2)路径权值:从一个节点到另一个节点的路径长度;

(3)图:是由节点和边所组成的集合,通常用G=(V,E)来表示,V是所有节点的集合,E是所有边的集合;

(4)无向图:是一种边没有方向的图,两个顶点之间没有次序关系,例(V1,V2) 与(V2,V1)代表相同的边;

(5)邻接矩阵:对无向图而言,邻接矩阵一定是对称的,其对角线为0,表示的是图中每个节点之间相邻关系的矩阵;

(6)最短路径:无向图中从起始顶点开始到达终点顶点的路径有多条,取其中路径权值最短的一条则为最短路径。

本发明中改进型A*算法用于快速搜索两点间较优路径,包括:网格化配送区域、优选适当评估距离、以递归法搜索最短距离三个部分。

本发明中物流配送算法用于生成从配送中心发往各客户节点的车辆信息,包括车辆编号、经过的客户节点、车辆路线、载重量和路线总距离,包括:计算各客户节点到物流中心的距离和路线、改进的加权图算法生成配送方案两个部分。

本发明中,设物流中心和客户点的位置是已知的,从物流中心使用最多m 辆货车向n个客户配送货物,货车最大载重量为Qmax,最大行驶距离Lmax,货车均从物流配送中心出发,完成运送任务后返回物流中心,且具备以下约束条件:

(1)货车运输使用时间最少;

(2)运输距离最短;

(3)使用最少的车辆完成配送;

(4)每次配送线路中的客户货物总量要小于或等于货车的最大载重量;

(5)每个客户点由一辆货车一次运送完成不能重复。

本发明中改进型A*算法的实现步骤为:

(1)网格化配送区域:已知客户节点精确地理位置的前提下,将地图按一定的比例划分为方形网格(Grid),网格状态以一个二维数组描述;网格可通过则网格状态标记为□,在数组中以0表示;网格不可通过则网格状态标记为在数组中以1表示;路径是从起点网格S到终点网格E经过网格的集合,其中经过的网格被称为“节点”,节点有可通过和不可通过两种状态,可通过状态有沿网格的XY轴方向移动和沿网格对角线方向移动两种方式;

(2)优选适当评估距离:节点n(xn,yn)为从起点S(xS,yS)和终点E(xE,yE)经过n步所到达的节点,其评估距离f(n)=g(n)+h(n),其中g(n)是从起点S到节点n所经过路径的距离,取网格边长为d,i为从起点A到节点n所经过的某一网格,如通过该网格是沿网格的XY轴方向移动,则通过该网格经过的距离d(i)=d,如通过该网格是沿网格的对角线方向移动,则通过该网格经过的距离h(n)是从节点n到终点E的启发函数,其值为两点间曼哈顿距离和欧氏距离的最小值,以Min()表示返回最小值函数,则如地形已知,且为方便计算,也可直接选用曼哈顿距离,即h(n)=|xn-xE|+|yn-yE|;当曼哈顿距离相同时再比较欧氏距离;

(3)以递归法搜索最短距离:用A*(S,E)描述从起点S到终点E之间的较优路径并返回路径的权值,路径权值以L1表示,open集合存放所有被考虑来寻找最短路径的网格,closed集合存放不再被考虑的网格,集合Pmin存放open集合中f(n)值最小的网格,所有集合均以堆栈形式保存,遵循后进先出原则,构建链表K,A*(S,E)的算法描述如下:

STEP1:清空open、closed集合,将S放到open集合;

STEP2:当open不为空时继续,否则返回错误并退出;

STEP3:在open中找出评估距离最小的节点n,将n放入Pmin中;

STEP4:如果n=E,表示找到终点,转到step9,否则继续;

STEP5:将n从open集合移除,添加到closed集合中;

STEP6:检查n周围所有可通行的网格G,跳过不可通行的网格;

STEP7:将所有不在open集合中的G添加到open集合中;

STEP8:返回STEP2;

STEP9:从E开始,依次弹出Pmin集合中的节点加入链表K,直到返回起点S,逆置链表K即可得到从起点S到终点E的路径,且路径的权值L1=f(E)。

本发明中物流配送算法的实现步骤为:

(1)计算各客户节点到物流中心的距离和路线,已知配送中心A地址为 (xA,yA),客户节点Vi的地址(xVi,yVi)(i=1,2,…,n),通过改进型A*算法计算配送中心到每一节点Vi的路径权值放入一维数组Lse[Vi]=A*(A,Vi)(i=1,…,n),并保存其路径;

(2)通过改进的加权图算法生成配送方案,已知配送中心A(xA,yA),客户节点和路径用一个加权无向图来描述,G=(V,E),V={V1,…,Vn},E={(Vi,Vj)}(Vi ∈V,Vj∈V),用二维数组L[Vi][Vj]存储顶点Vi到Vj之间的权值, L[Vi][Vj]=A*(Vi,Vj);D[k]存放每辆车的行驶距离包括返回到配送中心的距离,其中(k=1,2,…,M),M为车辆最大值;Q[k]存放每辆车行驶中的载重量,其中 (k=1,2,…,M);每辆车的最大行驶距离为Lmax;每辆车的最大车载量为Qmax;集合 VT为未分配顶点的集合;集合S[k]为分配给第k辆车的顶点的集合;a为过程变量,表示当前出发搜索下一跳的顶点;其算法描述如下:

STEP1:初始化变量k=1,VT=V;

STEP2:初始化S[k]=Φ,Q[k]=0,D[k]=0,a=A;

STEP3:VT为空时转STEP10,否则继续;

STEP4:从集合VT中通过改进型A*算法找出与a距离最小的顶点V[i];

STEP5:判断(Q[k]+Q[V[i]]<=Qmax)AND(D[k]+L[a][V[i]]+Lse(V[i])<=Lmax), 如果为真转STEP6,否则转STEP9;

STEP6:D[k]=D[k]+L[a,V[i]],Q[k]=Q[k]+Q[V[i]],a=V[i];

STEP7:将顶点V[i]放入集合S[k]中,删除集合VT中的V[i];

STEP8:返回STEP3;

STEP9:D[k]=D[k]+lse[a],k=k+1,返回STEP2;

STEP10:D[k]=D[k]+lse[a],结束。

此时返回的S[k]集合中保存的就是车辆k所需访问的客户节点,其访问顺序为S[k]集合中元素的顺序,所有物流配送车辆只需按照该车对应集合依次访问其中的客户节点即可。

本发明与现有技术相比具有以下优点:

本发明中改进型A*算法结合了常规算法Dijsktra和启发式算法两者的优点,通过使用不同启发函数以适配不同地形,用于求解最短路径,物流配送算法中设计一个加权图描述道路路径状况,用改进的递归式加权图搜索算法解决配送的方案规划,获得VRP的最优解。

附图说明

下面结合附图及具体实施方式对本发明做进一步说明,附图中:

图1是U型障碍物最短路径示意图;

图2是改进型A*算法在直线障碍地图中的搜索路径图;

图3是加权路径示意图;

图4是加权图的邻接矩阵示意图。

具体实施方式

网格化配送区域:

如图1所示,已知客户精确地理位置的前提下,将地图按一定的比例划分成方形网格(Grid),简化成一个二维数组,每一个网格是数组的一个元素,网格标记为□表示可通过的路径,标记为表示不可通过的路径(如墙、水沟等)。路径被称为从起点A到终点B经过网格的集合,其中经过的点被称为“节点”,节点可以是任何形状的任意位置。

优选适当评估距离:

如图2所示,A为起点,B为终点,网格的边为10,沿网格的XY轴方向移动时g(n)加10,沿网格对角线方向移动时g(n)加14(这里为方便计算都取整数),而h(n)的值可取节点到B点的曼哈顿距离和欧氏距离的最小值,也可选用其中一种,此处以为方便计算起见,选用曼哈顿距离h=|x1-x2|+|y1-y2|, LAB中存放从A到B最终的路径权值。

以递归法搜索最短距离:

如图2所示,下面分步描述搜索路径的过程:

Step1:清空open、closed集合;

Step2:将A放入open集合中,查找到A周围可以通过的方格,计算F=G+H 的值,找到F=54那个方格以1标记,把A添加进closed集合;

Step3:将1放入open集合中,查找到1周围可以通过的方格,计算F=G+H 的值,找到F=74那个方格以2标记,把1添加进closed集合;

Step4:将2放入open集合中,查找到2周围可以通过的方格,计算F=G+H 的值,找到F=74那个方格以3标记,把2添加进closed集合;

Step5:将3放入open集合中,查找到3周围可以通过的方格,计算F=G+H 的值,找到F=74那个方格以4标记,把3添加进closed集合;

Step6:将4放入open集合中,查找到4周围可以通过的方格,计算F=G+H 的值,找到F=68那个方格以5标记,把4添加进closed集合;

Step7:将5放入open集合中,查找到5周围可以通过的方格,计算F=G+H 的值,找到F=68那个方格B,把5添加进closed集合;

Step8:将B放入open集合中,计算F=G+H的值,F=68,把B添加进closed 集合;

Step9:结束循环,返回路径到A,依次为B-⑤-④-③-②-①-A,从而A到B的最短路径为LAB=68。

物流配送算法的实现:

如图3所示,顶点A为物流中心,顶点V1到V6是客户节点,物流配送需要从顶点A出发遍历图中所有的顶点,满足物流配送的限制条件,并取得最优路径方案。

根据图3可得到顶点之间的距离权值,以邻接矩阵表示,如图4所示。

把无向权图G(V,E)看作是配送中心到各客户点的道路,配送中心A,节点 V1到V6为每个客户的顶点,每条边上权值E表示该路径的距离;Qmax=4.9,Lmax=200, 初始化k=1,集合VT=V,即将V1,V2,V3,V4,V5,V6加入集合VT,集合将配送中心A赋给a,车载量Q[1]=0,行驶距离D[1]=0;

Step1:从集合VT{V1,V2,V3,V4,V5,V6}中查找与a距离最小的顶点V2,判断条件Q[1]+2.3<=Qmax,且D[1]+15+15<=Lmax,满足条件,则将V2从集合VT中删除,放集合S[1]中,此时S[1]={V2},Q[1]=2.3,D[1]=15,再将V2赋给a;

Step2:从集合VT{V1,V3,V4,V5,V6}中查找与a距离最小的顶点V6,判断条件Q[1]+2.3<=Qmax,且D[1]+22+30<=Lmax,满足条件,则将V6从集合VT中删除,放集合S[1]中,此时S[1]={V2,V6},Q[1]=4.6,D[1]=67,将V6赋给a;

Step3:从集合VT{V1,V3,V4,V5}中查找与a距离最小的顶点V4,判断条件 Q[1]+1.5<=Qmax,且D[1]+25+39<=Lmax,不满足第一个条件,则第一辆车分配完毕, Q[1]=4.6,D[1]=67,k=2,将配送中心A赋给a,并重置Q[2]=0,D[2]=0;

Step4:从集合VT{V1,V3,V4,V5}中查找与a距离最小的顶点V3,判断条件 Q[2]+1.8<=Qmax,且D[2]+35+35<=Lmax,满足条件,则将V3从集合VT中删除,放集合S[2]中,此时S[2]={V3},Q[2]=1.8,D[2]=35,将V3赋给a;

Step5:从集合VT{V1,V4,V5}中查找与a距离最小的顶点V5,判断条件 Q[2]+1.3<=Qmax,且D[2]+40+37<=Lmax,满足条件,则将V5从集合VT中删除,放集合S[2]中,此时S[2]={V3,V5},Q[2]=3.1,D[2]=75,将V5赋给a;

Step6:从集合VT{V1,V4}中查找与a距离最小的顶点V4,判断条件 Q[2]+1.5<=Qmax,且D[2]+55+39<=Lmax,满足条件,则将V4从集合VT中删除,放集合S[2]中,此时S[2]={V3,V5,V4},Q[2]=4.6,D[2]=130,将V4赋给a;

Step7:从集合VT{V1}中查找与a距离最小的顶点V1,判断条件 Q[2]+2.3<=Qmax,且D[2]+74+44<=Lmax,不满足条件所有条件,则第二辆车分配完毕,Q[2]=4.6,D[2]=169,k=3,将配送中心A赋给a,并重置Q[3]=0,D[3]=0;

Step8:从集合VT{V1}中查找与a距离最小的顶点V1,判断条件 Q[3]+2.3<=Qmax,且D[3]+44+44<=Lmax,满足条件,则将V1从集合VT中删除,放集合S[3]{①}中,此时S[3]={V1},Q[3]=2.3,D[3]=44,将V1赋给a;

Step9:集合VT为空,Q[3]=2.3,D[3]=88,结束循环;

根据以上物流配送算法,共需3辆车完成配送任务;因为S[1]={V2,V6},所以第一辆车依次配送顶点V2和V6;S[2]={V3,V5,V4},所以第二辆车依次配送V3、V5、V4三个顶点;S[3]={V1},所以第三辆车配送V1;Q[1]=4.6、D[1]=67, 所以第一辆车载重4.6T,行驶距离为67公里;Q[2]=4.6、D[2]=169,所以第二辆车载重4.6T,行驶距离为169公里;Q[3]=2.3,D[3]=88,所以第三辆车载重 2.3T,行驶距离为88公里。

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