一种基于单向轨道的多AGV实时调度算法的制作方法

文档序号:17472127发布日期:2019-04-20 05:53阅读:318来源:国知局
一种基于单向轨道的多AGV实时调度算法的制作方法

本发明涉及计算机系统与算法设计技术领域,特别是一种基于单向轨道的多agv实时调度算法。



背景技术:

在现有技术中,在使用自动导引小车agv(automatedguidedvehicle)物流仓库中,尤其是使用了多台agv的情况下,agv小车在搬运货物过程中,不可避免地会引发agv的碰撞冲突和死锁。agv发生碰撞冲突和死锁将直接导致物流仓库系统瘫痪。因此研究多agv调度过程中避免冲突碰撞死锁是agv研究问题的重要领域,不仅对于agv调度系统理论的发展有重大促进作用,而且能够应用于实际物流仓库,解决物流仓库低吞吐量的问题。

对于调度算法,可以将其分为双向轨道调度算法和单向轨道调度算法。对于双向轨道调度,系统依据轨道可支持双向运动的环境下对agv小车进行任务调度,当轨道情况较为复杂时,其调度算法在调度的过程中容易消耗大量的内存以及大量的时间,易出现调度系统故障、agv小车死锁等问题,直接导致物流仓库调度系统瘫痪。但单向轨道调度时,系统消耗的内存以及运行时间则能够大幅降低,保证调度系统正常运转的同时,提高了系统运行的效率。

针对现有存在的问题,有必要研究如何克服现有多agv实时在线调度算法高时间复杂度、高空间复杂度且易死锁瘫痪的问题,从而为物流仓库的运输问题提供更好的解决方案。



技术实现要素:

有鉴于此,本发明的目的是提出一种基于单向轨道的多agv实时调度算法,能够提高物流仓库系统的工作效率。

本发明采用以下方案实现:一种基于单向轨道的多agv实时调度算法,包括以下步骤:

步骤s1:采用图论对多agv运行环境进行数学建模;

步骤s2:分别对agv小车列表、地图和站点列表进行初始化;

步骤s3:遍历步骤s2中每一辆agv;

步骤s4:判断agv任务队列是否为空,如果agv任务队列不为空,则执行步骤s5;如果agv任务队列为空,则继续判断任务缓冲队列是否为空;如果任务缓冲队列为空,则返回步骤s3,如果任务缓冲队列不为空,则应用dijkstra最短路径算法搜索得到最短路径r,同时将所述最短路径r经过的站点pk加入到相应站点列表listk中,即保存该任务依次经过的各站点编号,并返回步骤s3;

步骤s5:将任务分配给所述agv任务队列头结点所示车辆,并更新空闲队列;

步骤s6:由步骤s5中agv队列头结点所示车辆即对应的agv获取任务队列头元素pi即站点pi;

步骤s7:根据步骤s6中站点pi值找到所述相应站点列表listk;

步骤s8:判断所述头元素pi和第二元素pi+1对应站点是否处于空闲状态;如果处于空闲状态则执行步骤s9,如果头元素pi和第二元素pi+1对应站点任意一个处于不空闲的状态则进行等待,不执行调度任务,同时返回步骤s3。

步骤s9:对处于空闲状态的头元素pi和第二元素pi+1对应站点进行使用并上锁;

步骤s10:对步骤s9中上锁后的头元素pi和第二元素pi+1对应站点进行调度,当agv运行至第二元素pi+1对应的站点时,解锁头元素pi对应的站点,更新所述agv任务列表并返回步骤s3;

进一步地,所述步骤s1的具体内容为:令小车经过的路径为图形的边缘,通过的站点为结点,即图g=(v,e),其中v是顶点,即图g信息中的站点的有限集合,v={v1,v2,…vn},e是边,即小车经过的路径的有限集合,e={e1,e2,...en},如果<vi,vj>∈e,则<vi,vj>表示两个顶点之间的一个弧形图的存储结构能够通过邻接矩阵或相邻列表来实现。

进一步地,所述步骤s5的具体内容为:提供一辆处于空闲状态的agv小车,将当前agv的状态更改为忙,从任务队列中取出任务t,通过路径搜索算法(bfs)获得用于调度的站点序列(p0,p1,p2...pi...pk),将所述的所有站点序列添加到相应的站点列表中。

进一步地,步骤s2中所述初始化具体为:将所述agv小车列表初始化为当前所有能够使用的小车;将所述地图信息初始化为当前的应用场景;将所述站点列表初始化为空。

与现有技术相比,本发明有以下有益效果:

本发明降低物流仓库系统在调度过程中瘫痪的可能性,从而提高物流仓库系统的工作效率;同时,本发明的实用性高,工程上易实现。

附图说明

图1为本发明实施例的流程图。

图2为本发明实施例的agv上锁状态标识图。

图3为本发明实施例的路线图。

图4为本发明实施例的调度系统的初始状态图。

图5为本发明实施例的当前路径与站点状况图。

图6为本发明实施例的当前调度系统状态图。

图7为本发明实施例的agvb处于等待状态,当前路径与站点状况图。

图8为本发明实施例的agva的路径(4,8)调度任务完成,当前调度系统状态图。

图9为本发明实施例的agvb获得站点4的使用权并对其上锁,当前路径与站点状况图。

图10为本发明实施例的agvb的路径(3,4)调度任务完成,当前调度系统状图。

图11为本发明实施例的agvb获得站点8使用权并对其上锁,当前路径与站点状况图。

图12为本发明实施例的最终结果图。

具体实施方式

下面结合附图及实施例对本发明做进一步说明。

如图1所示,本实施例提供了一种基于单向轨道的多agv实时调度算法,包括以下步骤:

步骤s1:采用图论对多agv运行环境进行数学建模;

步骤s2:分别对agv小车列表、地图和站点列表进行初始化;

步骤s3:遍历步骤s2中每一辆agv;

步骤s4:判断agv任务队列是否为空,通过调度系统检测如果agv任务队列不为空,则执行步骤s5;如果agv任务队列为空,则继续判断任务缓冲队列是否为空;如果任务缓冲队列为空,则返回步骤s3,如果任务缓冲队列不为空,则应用最短路径搜索得到最短路径r,同时将所述最短路径r经过的站点pk加入到相应站点列表listk中,并返回步骤s3;

步骤s5:将任务分配给所述agv任务队列头结点所示车辆,并更新空闲队列;

步骤s6:由步骤s5中agv队列头结点所示车辆即对应的agv获取任务队列头元素pi即站点pi;

步骤s7:根据步骤s6中站点pi值找到所述相应站点列表listk;

步骤s8:判断所述头元素pi和第二元素pi+1对应站点是否处于空闲状态;如果处于空闲状态则执行步骤s9,如果头元素pi和第二元素pi+1对应站点任意一个处于不空闲的状态则进行等待,不执行调度任务,同时返回步骤s3;

步骤s9:对处于空闲状态的头元素pi和第二元素pi+1对应站点进行使用并上锁;

步骤s10:对步骤s9中上锁后的头元素pi和第二元素pi+1对应站点进行调度,当agv运行至第二元素pi+1对应的站点时,解锁头元素pi对应的站点,更新所述agv任务列表并返回步骤s3;

在本实施例中,所述步骤s1的具体内容为:令小车经过的路径为图形的边缘,通过的站点为结点,即图g=(v,e),其中v是顶点,即图g信息中的站点的有限集合,v={v1,v2,…vn},e是边,即小车经过的路径的有限集合,e={e1,e2,...en},如果<vi,vj>∈e,则<vi,vj>表示两个顶点之间的一个弧形图的存储结构能够通过邻接矩阵或相邻列表来实现。

在本实施例中,所述步骤s5的具体内容为:通过调度系统派出一辆处于空闲状态的agv小车,将当前agv的状态更改为忙,从任务队列中取出任务t,通过路径搜索算法(bfs)获得用于调度的站点序列(p0,p1,p2...pi...pk),将所述的所有站点pk添加到相应的站点列表中。

在本实施例中,步骤s2中所述初始化具体为:将所述agv小车列表初始化为当前所有能够使用的小车;将所述地图信息初始化为当前的应用场景;将所述站点列表初始化为空。

较佳的,在本实施例中,计算机开发环境为任意系统平台(windows/linux/max)下的任意编程语言(c/c++,java,c#等)。

通过计算机编程语言构建地图相关的图数据结构、站点链表数据结构和任务队列数据结构,图数据结构表示当前地图中各个站点的连接关系,站点链表数据结构表示每个站点都维护一条链表,链表中元素表示要经过当前站点的agv顺序,任务队列数据结构表示存储任务的数据结构,任务队列中元素的排列顺序即为任务的先后到达顺序。为了方便实现,提供了两种实施方式,并以例子的方式,分别从地图运行角度和站点链表结构角度分别阐述算法的基本设计过程和思想。

较佳的,在本实施例中,具体的实施方式如下:

1.采用图论对多agv运行环境进行数学建模。

2.初始化agv小车列表。

3.初始化地图。

4.初始化站点列表。

5.如果任务队列不为空,通过调度系统检测,如果存在处于空闲状态的agv小车,那么跳转到步骤6,如果无空闲小车,则任务等待处理。

6.通过调度系统派出一辆处于空闲状态的agv小车,将当前agv的状态更改为忙,从任务队列中取出任务t,通过路径搜索算法(bfs)获得用于调度的站点序列(p0,p1,p2...,pk)。将所有站点pk添加到相应的站点列表,跳转步骤7。

7.获取当前agv路径列表的头元素p0,第二元素p1,并根据p的值找到相应的站点列表,并且如果列表中的头元素等于p0,第二元素等于p1,若p0和p1均属于空闲状态时,向系统申请p0和p1使用权并上锁,此时进行调度,调度结束后跳转步骤9;若p0和p1中有任意一个属于已上锁状态,则跳转步骤8。

8.当前申请调度失败,等待已上锁的站点解锁后再申请调度。

9.当p0和p1路段调度结束,解锁站点p0,更新agv任务列表,跳转步骤10。

10.遍历agv小车,若非空闲agv列表非空,则跳转步骤7,否则跳转步骤5。

较佳的,在本实施例中,agv调度系统具体实施方式如下:

假设两个agv的任务分配顺序是agva>agvb。agva调度路径序列为(1,4,8,11),agvb调度路径序列为(0,3,4,8)。路径颜色为黑色,agv的颜色以及上锁状态标识如图2所示,agva首先被分配任务,所以在图3所示的轨道中绘制路径序列。将agvb分配给第二个任务,并在轨道上绘制路径序列。由于agva的调度路径和agvb的调度路径中的站点4、8重合,因此存在通过该站点处的路段分配问题,即在调度过程中发生冲突,因此由先向系统申请该站点的优先使用权,表示agvb允许agva先使用站点4。绘图之后,路线图如图3所示。为了更容易理解,每个路径都标记了通过它的所有agv调度顺序。例如,路径(4,8)上方的字符串“ab”表示路径(4,8)存在路径覆盖,只有agva解锁站点4之后,agvb才可以再次申请站点4的使用权。

接下来开始使用算法进行调度,调度系统的初始状态如图4所示。

1.开始调度,当前agva先于agvb向系统申请调度任务。

agva:当前申请调度路径为(1,4);agvb:当前申请调度路径为(0,3);因为站点1,4处于空闲状态,系统可以调度agva通过路段(1,4),同时对站点1,4上锁,仅供agva通过;对于agvb,下一个调度路径为(0,3),站点0,3处于空闲状态,系统可以调度agva通过路段(0,3),同时对站点0,3上锁,仅供agvb通过。所以此轮调度任务:agva获得站点1,4使用权并对其上锁;agvb获得站点0,3使用权并对其上锁,当前路径与站点状况如图5所示。

2.经过上一轮调度后,agva到达站点4,同时解锁站点1;agvb到达站点3,同时解锁站点0,即agva的路径(1,4),agvb的路径(0,3)调度任务完成,当前调度系统状态如图6所示;

开始本轮调度(遍历所有agv):agva:当前申请调度路径为(4,8);agvb:当前申请调度路径为(3,4);

因为agvb向系统申请的路径(3,4)中,站点4仍处于agva的占有状态;agva向系统申请的路径(4,8)中,站点8处于空闲状态;

所以此轮调度任务:agva获得站点8使用权并对其上锁;agvb处于等待状态,当前路径与站点状况如图7所示。

3.经过上一轮调度后,agva到达站点8,同时解锁站点4,即agva的路径(4,8)调度任务完成,当前调度系统状态如图8;开始本轮调度(遍历所有agv):agva:当前申请调度路径为(8,11);agvb:当前申请调度路径为(3,4);因为agvb向系统申请的路径(3,4)中,站点3处于自身占有状态且站点4处于空闲状态;agva向系统申请的路径(8,11)中,站点8处于自身占有状态且站点11处于空闲状态;

所以此轮调度任务:agva获得站点11使用权并对其上锁;agvb获得站点4的使用权并对其上锁,当前路径与站点状况如图9所示。

4.经过上一轮调度后,agva到达站点11,同时解锁站点8,即agva的路径(8,11)调度任务完成,agvb到达站点4,同时解锁站点3,即agvb的路径(3,4)调度任务完成,当前调度系统状态如图10所示;

开始本轮调度(遍历所有agv):agva:完成系统分配的所有调度任务,返回待命区,解锁站点11;agvb:当前申请调度路径为(4,8);

因为agvb向系统申请的路径(4,8)中,站点4处于自身占有状态且站点8处于空闲状态;

所以此轮调度任务:agva完成调度任务,返回待命区;agvb获得站点8使用权并对其上锁,当前路径与站点状况如图11所示。

5.接下几轮调度则按照上述规律,对小车进行调度并对其路径上的站点进行上锁与解锁操作即可。

当所有调度完成,agv小车全部返回待命区,最终结果如图12所示。

较佳的,本实施例能够有效处理因agv小车死锁导致调度系统瘫痪的问题,与现有基于连续模型的现有技术相比,本实施例具有实用性高、工程上易实现的特点;揭示多agv在物流仓库应用过程中的潜在问题与应用价值,为扩大agv的应用场景提供更多的理论支持。同时,本实施例克服现有多agv实时在线调度算法高时间复杂度、高空间复杂度且易死锁瘫痪的问题,降低物流仓库系统能够长时间运行并且减少系统瘫痪的可能性,从而提高物流仓库系统的工作效率。本实施例还解决了多agv调度过程中的冲突和死锁问题,保证多agv在工作过程中能够合理运行。

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

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