基于图论KM匹配算法的AGV自动调度方法与流程

文档序号:15312744发布日期:2018-08-31 22:15阅读:414来源:国知局

本发明属于车辆调度技术领域,具体涉及一种基于图论km匹配算法进行agv自动调度的方法。



背景技术:

随着信息科学和网络技术的飞速发展,自动化越来越成为人类生活中不可或缺的一部分。而在物流产业方面,人们更是需要自动化车辆来完成一些特定任务,自动调度系统便应运而生。

二十一世纪,制造业将进入一个新阶段,敏捷制造将成为企业的主导模式,能否抓住市场机遇开发出新产品将是企业赢得竞争的主要手段,要减小生产成本对生产批量的依赖,就要发展敏捷制造装备。由于机器人具有自主规划、可编程、可协调作业和基于传感器控制等特点,它将成为可重组的敏捷制造生产装备及系统的重要组成部分,为传统制造企业向敏捷制造企业跨越发展提供重要的技术支持。自动导向小车((automatedguidedvehicle,简称agv)是移动机器人的一种,是现代制造企业物流系统中的重要设备,主要用来储运各类物料,为系统柔性化、集成化、高效运行提供了重要保证。

在产品生产的整个过程中,仅有5%的时间用于加工和制造,剩余的95%都用于储存、装卸、等待加工和运输。在美国,直接劳动成本所占比例不足生产成本的10%,且这一比例还在不断下降,而储存、运输所占的费用却占生产成本的40%。因此,目前世界各工业强国普遍把改造物流结构、降低物流成本作为企业在竞争中取胜的重要措施。自动导引小车agv适应性好、柔性程度高、可靠性好、可实现生产和搬运功能的集成化和自动化,在各国的许多行业都得到广泛的应用。



技术实现要素:

本发明目的在于为克服现有的agv调度难以产生有效调度和调度效果不够理想的状况,提供一种完善性强、鲁棒性高的agv自动调度方法。

本发明提供的agv自动调度方法,是基于一种图论k匹配算法的,首先,针对各种实际情况需要先进行数据转化,取一个时间窗口将传来的任务信息和agv信息抽象成一个点;并对于特殊情况如车辆故障,出现在奇怪区域等进行排查报告。

本发明提供的基于图论km匹配算法的agv自动调度方法,首先需要构建充电调度模型,该充电调度模型如下:设有3个充电站、数个agv,当agv电量过低时调度agv到充电站去进行充电;充电站用换电池方法进行充电,由于充电站数目有限,且不同充电站agv充电方式有差异,需要合理安排agv去充电站的数目和时间。

本发明方法在调度车辆充电时,需要考虑一下几个因素:(1)每辆车到达充电站的时间;(2)不同充电站的充电时间;(3)充电站已经在排队的车辆数目;(4)agv当前电量。于是调度的内容包括车辆充电的次序和去哪个充电站充电,具体如下:

关于车辆充电的次序的调度,首先,对agv进行分类,对agv当前电量在60%以下,进行充电调度,对agv当前电量在40%以下的,进行标记,这两个百分比值都可以调节;然后,将这些agv筛选出来,按电量从低到高排序,并按照此顺序派去进行充电;其中,当前电量在40%以下的,充电最为优先,若无法充电,则暂时停靠原位或直接到充电站排队;对于40%-60%则看充电站空闲情况,进行预估型的充电,估计40%-60%电量的车有多少、将要进入40%的车辆有多少,然后派去充电。

例如,有六辆车电量分别为50%,70%,30%,60%,40%,45%。那么筛选出来形成列表30%,40%,45%,50%,60%。对于30%,40%会优先派去充电,派完之后再看充电站空闲情况,假若现在有30%和40%这两辆车,那么45%也会被派去充电,若充电站有排队,但是40%-60%车很多,那么40%车也会派去充电,不过会进行排队等待。

关于充电站的调度,具体做法是:在每个充电站形成一个列表,这个列表包含将要派去的agv预计花费时间,并相应生成一个最后完成时间。随后,是每次派车去的时候,更新三个充电站的列表,修改这个列表中agv到达序列,使得这个最后完成时间最小。在维护这一张表的时候进行如下操作。

(1)将某一agv插入到表中,并调整整个列表使得该表完成时间最短,记录最短时间;

(2)比较同一agv在不同充电站的最短时间,选取最短完成时间的充电站更新列表。

本发明涉及的图论km匹配算法,即基础算法,其思想如下:

对于一个图,将其划分为a、b两组;对于a、b两组,本组内成员之间没有连线,但一组的某个成员与另一组的所有成员之间都有连线,也即二分图,如附图1所示。两组中,一组用灰色圆点表示,另一组用黑色圆点表示,将这个图跟实际项目进行对应。不妨将黑色圆点视为一个任务,灰色原圆点视为agv车辆。这样黑点与灰点之间的连线可赋予一个权值,这个权值即对应于该车辆完成该任务的时间花费,也即采用时间矩阵中的值。

在该模型下,问题就变为求一个完全匹配且权值和最小的问题,这个问题与求权值和最大是一个对偶问题。因为用一个较大值减去每个边上的权值,求最大变化为了求最小,因此两者算法对应。现在描述求这个最大权值和的算法,为方便说明,示例图取如附图2所示:

黑色点对应任务,灰色点对应agv,从左到右依次记为1,2,3。边上的值对应为权值(记为weight(i,j)),然后给每个圆点赋予一个顶标值。在开始阶段将黑色圆点的顶标值(记为lx(i))记录与这个圆点所连边中的最大权值。如左图则从左至右依次为:20,27,30。然后将灰色圆点的顶标值(记为ly(j))全部赋值为0。然后开始从黑色圆点遍历计算一下过程:

(1)依次选取一个黑色定点i;

(2)遍历灰色顶点,对每个没有匹配的顶点j计算是否有lx(i)+ly(j)=weight(i,j),若是则将两个边标记为一个匹配组(也即agvj发车给任务i),同时回到第1步选下一个点。若不是,前往下一个灰色点;

(3)若在步骤(2)中没有一个灰色点匹配上则进行松弛操作,操作过程为:计算黑色顶点i与未标记匹配的灰色顶点j中,定标和与边权差的最小值。即:slack={lx(i)+ly(j)-weight(i,j)}j∈灰色未匹配点;

(4)对所有已匹配的黑点减去slack值,所有已标记灰色点加上slack值。

显然,经过以上步骤在图中黑点大于灰点个数时必然可以选出一组匹配。但其本身并不是最优的,如图中数据则选出匹配(1,3)(2,1)(3,2),其本质上为一种贪心算法,每次都选最近的车辆即可。但该算法具有启发性,例如对于slack的计算可以使得该图中匹配更加合理。下面说明对其的改动以及对于项目做的调整。

因为要求是选取agv发车给对应任务,并要求在任务开始时间之前到达。这意味着在图中并不是所有线都存在,对于无法到达该任务的agv其连线权值可设为-1,标记其为不可到达。于是对应的图如附图3所示。

显然原算法并不可行,例如黑色点2只能匹配灰色点3。但在上述算法中灰点3会被黑点1抢去,这样黑点2反而没有车了。所以对应算法改为:

(1)依次选取一个黑色定点i。

(2)遍历灰色顶点,对每个没有匹配的顶点j,计算是否有lx(i)+ly(j)=weight(i,j),若有,则将两个边标记为一个匹配组(也即agvj发车给任务i),同时回到第1步选下一个黑点。若不是,前往下一个灰色点。

(3)若在步骤(2)中没有一个灰色点匹配上,则开始遍历已标记的灰色顶点,同样计算是否有lx(i)+ly(j)=weight(i,j),若有,则回溯到该灰色顶点匹配的黑色定点上,重新计算步骤(2),若计算返回这个已匹配顶点有新的顶点,则修改匹配结果。若没有,则进入步骤(4)。这过程类似于深度优先搜索。

(4)若在步骤(3)中没有一个灰色点匹配上,则进行松弛操作,操作过程为:计算所有已标记黑色顶点i与未标记匹配的灰色顶点j中,定标和与边权差的最小值,即:slack={lx(i)+ly(j)-weight(i,j)}i∈黑色已匹配点j∈灰色未匹配点。

(5)对所有已匹配的黑点减去slack值,所有已标记灰色点加上slack值。

这是本发明的核心调度算法。

下面通过例子给出演算过程:

黑1运算完之后得到匹配(黑1,灰3)。然后进入黑2,满足条件的灰3已被标记。回溯找不到新的匹配,于是进行松弛操作得到最小松弛为5。修改顶标得到lx(1)=15,lx(2)=22,lx(3)=30,ly(1)=0,ly(2)=0,ly(3)=5.这样再运行一遍可发现有匹配(黑1,灰1),这样便可以修改产生对应匹配(黑2,灰3)。对于黑3,满足条件的灰1已匹配。回溯也找不到新的匹配进行松弛操作得到最小松弛为10,于是修改定标得到匹配(黑3,灰2)。算法结束产生调度匹配。

此外,如果任务可能是分组聚集的,即任务分两部分,每部分都只有对应的一部分车可以抵达。相当于在地图上某一个区域有一堆任务,对应于附图4所示:

这样在两个区域不连通,在算法中就需要对松弛量再进行更改,即对于松弛量的选取第(3)步中,深度优先搜索过的点进松弛量计算,计算方法按步骤(4)中方法进行。

此外,对于重车预调度,只要将预计花费时间加入到边权值中也可产生,所以该算法包含了重车预调度的处理。

另外,对于一些特殊情形,对调度算法要作一些调整,例如:

1、延误车辆

根据核心算法,实际上无法处理一种特殊情况。即延误类任务的调度,延误的任务因为已经晚于应完成时间,所以没有任务车辆可以完成该任务。而该情况也较为频繁出现,反映在图中即该任务(黑点)没有agv(灰点)与之相连,这样算法自然给不出匹配结果。所以需要别的算法来处理延误车调度。

其一,为贪心算法:遍历所有任务看是否有任务延迟,若有,则选一个最近的车辆发车。

其二,为用上面说过的基础算法:先将所有延误任务选出,只按照时间矩阵的值给予边权值,而不考虑能否按时抵达,再用基础算法(可稍作修改)选出一个最小权值的agv并发车,这时,在基础算法中,在数据转化成图论模型时将所有能抵达agv都考虑在内,即图中边权不再为-1。这样局部更优化一些。

贪心算法是必要的,需用于处理延误调度,并主要针对order延误的任务,其优先级要求较高。修改过基础调度算法也需要用,主要针对一般延误的任务,将其综合考虑调度使用。

2、桥吊下空车调度

根据要求,在桥吊下刚卸下货物的空车可以调度到同一组中卸船桥吊下接一个任务。其主要情况如下:

假设灰色为装船任务开始时间,黑色为卸船任务开始时间。对于一个刚装完船的agv,其结束时间未定,所以不能先给其指派旁边的卸船任务。但是当其结束后,旁边的卸船任务可能早已有匹配,亦或是下一个任务时间比较远,这时候上述算法并不会安排agv去接这个任务。所以需要特殊处理:若该桥吊目前在做卸船任务且离该agv不会越过太多桥吊,则将该agv空车调度至该桥吊下做接下来的卸船任务。

3、空车调度

随着任务的进行车辆可能会聚集,也会停到不合适的地方,所以设计了一定的空车调度。空车调度是基于统计处理的,统计为按区域计算,记录的数值为一个区域内将来任务的数量,以及目前在此处的agv数量。此外加上每一辆车到达任务的时间作为判据,根据差值,如果绝大部分时间较长超过一定比例,则认为该车偏远,需要进行空车调度到一个任务多的区域。空车调度可将偏远车辆复用,有效提高agv效率,不用再调度偏远车辆作为急需。

发车逻辑控制:

上面算法部分实际只给出了匹配的结果,在算法运行时观察觉得这样调度较好,但实际发车可能是另一种情况。目前设计为发车逻辑控制,拿到上面产生的匹配结果后,决定现在时刻是否发车。发车的基本思路是:最晚发车,使其抵达时与任务开始时间越近越好,agv的等待时间就稍微长一点。

目前根据产生的不同匹配结果,给予不同的调度:

(1)空车,有匹配任务,当前位置可停。标准发车,提前5s发车;

(2)空车,有匹配任务,当前位置不可停。提前15s发车,若未到,则拉去附近的pb暂停;

(3)重车,有匹配任务。重车预调度,提前15s给出指示;

(4)空车,无匹配任务,即可发车。

整个过程由上述各个部分联合处理,最后交由发车逻辑提将其转化为一个合理的调度方案。

该模型已在洋山港四期agv自动调度中运行,周转率在每小时2.5到3左右。相对于传统人工码头以及预期的周转率每小时5仍有很大差异。但是相对于其他自动码头的调度效率如青岛码头,效率约在1,2左右已有很大提升。而且原始算法无法完成大规模调度,当agv超过一定数量时,算法运行效率大幅度下降以至于无法完成任务。而该算法在50辆车左右时效率不会有太大影响,效果稳定。

本发明克服了现有的agv调度难以产生有效调度和调度效果不够理想的状况,完善性强、鲁棒性高,可广泛适用于各种车辆运输调度。

附图说明

图1为图论模型示例。

图2为km算法图例。

图3为本专利使用算法图例。

图4为分组聚集图例。

图5为桥吊下调度图例。

具体实施方式

windows,linux平台,程序为java语言实现,数据传输用json格式。一下为一些实验数据结果。

首先用json传入任务状况,agv状况和充电站状况。而时间以矩阵形式保存,为了便于动态更新存放在内存中以便于修改。所以算法要先将任务和agv数据的格式进行转化:在我们的实验中使用寄送。

agvid现在位置锁死状态运行状态位置电量。

801pb3140freenullpb31434

802pb3160freenullpb31684

803pb3080freenullpb30884

804pb2911dispatchnullpb29184

80538cw0541dispatchnull38cw05434

806pb3180freenullpb31884

80738cw0421dispatchnull38cw04284

808pb2990freenullpb29984

809pb3010freenullpb30184

810pb3030freenullpb30384

811pb3050freenullpb30584

812pb3070freenullpb30784

813pb3090freenullpb30984

814pb3110freenullpb31184

843pb3690freenullpb36934

将任务在桥吊上形成列表,该数据转化主要是方便为后面算法提供一个优先级顺序服务:如123550nullnull0truenullnullnull

id优先级需要完成时间秒数表示是否已经派车类型起始位置

3509053852017-06-0613:00:131496725213trueload38cw02638cw026

3509053962017-06-0613:00:331496725233trueload38cw02638cw026

0nullnull0truenullnullnull

35090545102017-06-0612:59:141496725154trueload38cw02638cw026

35090546112017-06-0612:59:341496725174falseload38cw02638cw026

35090547122017-06-0612:59:541496725194falseload38cw02638cw026

第一行表示桥吊名称,上行道口数为5,下行道口数也为5。

然后算法按顺序进行,对于没有电的车先进行充电调度,然后锁定这些要去充电的agv。

根据agv充电模型,可有如下实例模型。

假设有三个要充电的agv,上表是agv到充电站的花费时间。假设bes2、bes3为同一个充电站的不同交换区,括号内数字为充电时间,那么一开始agv1会排到bes1,这样整个充电站列表中最后完成充电时间是25。然后看agv2,若agv2去bes1因为agv1已排到所以实际agv2会在25开始充电、并在40时完成,所以agv2会排到bes2,这样最后完成时间还是25。再看agv3,若agv3去bes2则agv3会比agv2先到,那么agv2会排队,这样整体的充电时间会变成30,所以agv3会去bes3,这样整体充电时间还是25。最后看agv4,若agv4去bes1那么整体的充电时间会变成40(25开始充电),去bes2会变成35(25开始充电),去bes3会变成30(20开始充电)。所以agv4会去bes3,然后修改bes3充电的agv列表,为后面的车做好准备。

再看桥吊下是否有桥吊间移动的调度,在这里并没有。然后再进行延误任务的调度处理,从时间上也可以看出有三个任务已经延误了。

[2017-06-0613:30:10][info][agvdispatch:82][pool-1-thread-347]-batterymatchbes数量:1bes1电池数:15agv最大数:1agv现有数:0

80134

82434

83334

83834

84134

84334

84434

85034

85134

85534

[2017-06-0613:30:10][info][agvdispatch:94][pool-1-thread-347]-sts桥吊组调度[2017-06-0613:30:10][info][agvdispatch:94][pool-1-thread-347]-delaydispatch

350905382017-06-0613:00:1338cw02638cw026

350905392017-06-0613:00:3338cw02638cw026

350905452017-06-0612:59:1438cw02638cw026

然后其余车辆进入核心调度算法进行计算。

最后产生匹配与调度结果:

matchresult2017-06-0613:30:10

802pb316task:3509053838cw026402017-06-0613:00:1340false

803pb308task:3509053938cw026402017-06-0613:00:3340false

806pb318task:3509054538cw026402017-06-0612:59:1440false

dispatchresult

801-1-1bes13

80235090538-1null1

80335090539-1null1

80635090545-1null1

其中matchresult表示比配结果第一个为车辆id802在pb316,匹配任务35090538,任务需求位置38cw026。预计花费时间40秒,任务要求完成时间为2017-06-0613:00:1340。最后将该信息包装为发车信息即为dispatch信息,以json列表的形式返回。

关于已有的算法部分,目前没有特定前例于是无法完成详细对比。不过该算法目前在洋山港四期运行,效果优良,根据统计有如下效率表。

1、靠泊时间02月04日14:30,离泊时间02月05日19:00。

2、每一个unit代表一关装或卸

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