#2022 年第十二届 MathorCup 高校数学建模挑战赛题目 ###思路交流:点击链接加入群聊【22年mathorcup数模交流】:https://jq.qq.com/?_wv=1027&k=wbVQSibD
B 题 无人仓的搬运机器人调度问题
本题考虑在无人仓内的仓库管理问题之一,搬运机器人 AGV 的调度问题。更多的背景介绍请参看附件-背景介绍。对于无人仓来说,仓库的地图 模型可以简化为图的数据结构。
*仓库地图:*
无人仓内的设施,可以细分为 AGV 能行驶的道路节点,和别的功能节点(如工位,储位等)。这样,仓库地图模型可以抽象为这些节点构成的图, 再按 AGV 能到达的节点来添加图的边。简单来说,附件仓库地图数据
(map.csv)通过描述节点类型,以及节点之间的关系(边),可以构建如下图 1 所示的仓库地图。
图 1:仓库地图
仓库地图数据(map.csv)是按 csv 格式存储,其节点类型有如下几类, 在上图中用不同颜色标注。
1) *路径节点* (灰色):AGV 可以自由通行。
** **
2) *储位节点* (绿色):放置托盘或者普通货架,AGV 可以到达。一般只有一个位置可以进出,即靠近道路的位置。
3) *保留节点* (黄色):保留位置。
4) *柱子节点* (黑色):障碍物,AGV 不能到达。
5) *拣选工位节点* (蓝色):拣选机器人在这里把商品打包后从传送带出库,一般有多个托盘停靠位。
6) *补货位节点* (粉色):从高密度区补货的商品放置点,一般通过传送带输送。
7) *空托盘回收节点* (红色):空托盘回收处,图中只有两处。
*无人仓任务场景:*
假设仓库地图按上述方式抽象成图,搬运机器人 AGV—次只搬运一个托盘(带有多种商品),能执行从一个地图节点�!移动到�"的路径指令,其中每一步只能移动到有边相连的地图节点,不能斜着移动。附件中机器人 数据(agv.csv)里,给出了 20 个搬运机器人 AGV 在仓库地图上的初始位置坐标。
假设仓库内商品都是中大件商品,每个在储位的托盘上叠放着多种商 品,附件中的库存数据(pallets.csv)给岀了全部托盘的位置以及托盘上放的商品信息。对于中件仓来说,即使用户订单包含了多个商品,实际发货 还是一个商品一个包裹。这样,AGV 执行任务只需要尽快满足商品数目的要求,不需要等待同一订单中的全部商品到齐后才能出库。所以附件订单 数据(orders.csv)里,每个订单只有同一件商品以及对应的数量。
无人仓流程是根据给定的一段时间内订单数据流,结合当前库存情况,
统筹安排搬运机器人从储位搬运有需求商品的托盘到附近的拣选工位(即 出库任务),拣选完成后需安排搬运工位处的非空托盘到空储位(即回库任务),或者安排搬运工位处的空托盘到托盘回收处(即回收任务)等。本题只考虑这三种主要任务场景,即出库、回库、回收任务。
首先,对于出库任务,搬运机器人 AGV 把一个托盘搬运到拣选工位。但是对于同一个工位来说,同时能容纳放置的托盘数目是有限的。假设每 个拣选工位有 b 个停靠位,也就是能同时最多分派 b 个出库任务到同一个拣选工位,直到执行回库或者回收任务,有空停靠位后才能容纳新的出库 托盘。
其次,出库任务完成后,搬运机器人处于空闲状态,可以被安排执行 下一个任务,而不需要在停靠位等候着。不妨假设出库托盘在拣选工位需 要停留一段时间后,等拣选机器人打包发货后才能进行后续的回库或者回 收任务。这里假设停留时间固定为�#,也就是说,无论需要拣选多少商品, 都简化为停留时间�#后,该托盘可以被执行后续的回库和回收任务。
*无人仓总结:*
无人仓的主要运行场景就是安排搬运机器人 AGV 执行如下各种任
务。
• *出库* :AGV 搬运载有商品的托盘到空闲拣选工位
• *回库* :AGV 搬运拣选完成的托盘从工位回到仓库内空储位
• *回收* :AGV 搬运拣选完成的空托盘从工位到托盘回收处
无人仓的核心是统筹优化上述任务的执行来最大化出库效率,安排
AGV 任务和路线需满足全局最优,达到实时响应,并避免拥堵/死锁等情况
发生。也需要均衡拣选工位之间的工作量。
*问题* *1* :AGV 统筹调度的最佳策略
假设先不考虑搬运机器人在执行任务时可能的碰撞问题,请在无人仓模型下设计调度算法,根据附件中订单数据(orders.csv),和仓库内的库存数据(pallets.csv),对于给定的 20 个搬运机器人(agv.csv),统筹调度和安排 AGV 任务,直到满足所有的订单需求,即全部拣选工位都空闲为止。这里,目标函数为在每个搬运机器人尽可能忙的同时,最小化全部搬运机器 人的行走总路径。
下面左图中,用红色圆圈表示 AGV,用绿色方块表示货架或者托盘,用蓝色 X 表示拣选工位。右图中匹配了最近的 AGV、托盘和工位,使得指定AGV 去取托盘后再送到工位拣选。
图 2:AGV 匹配调度示例图
注意,现实场景中的目标其实是全局优化出库效率,节省人力,避免 高峰期出现"爆仓”现象。所以更合适的衡量指标是时间上的,要求在最短 的时间内满足订单需求。在某种程度上,目标可以转化为使得每个拣选工 位尽可能忙,即最小化最忙拣选工位的工作时长。另一方面,仓库内搬运 机器人 AGV 的合理投放数量一般是拣选工位的常数倍,因为投放太多的话出库效率不但不会改善,反而增加 AGV 拥堵的可能性。进一步考虑到每个工位可以增加停靠位,而且搬运机器人除了出库任务,还有回库和回收等
任务。所以使得每个 AGV 尽可能忙,然后最小化全部 AGV 行走总路径,
也是合理的模型目标简化。
*问题* *2* :任务均衡区域划分
为了更好地平衡拣选工位的负载,同时预防搬运机器人的局部拥堵, 根据拣选工位和库存商品数量对仓库地图进行动态分区。也就是对仓库内 储位上的每个托盘,都指定一个默认拣选工位。
请建立优化模型,使得每个拣选工位对应托盘的商品总量尽可能地平 均,同时要求最小化全部托盘到其默认拣选工位距离总和。类似下图 3 所示的区域划分。
进一步,根据某段时间内所需出库商品的库存分布,再结合问题一的
AGV 调度算法,更合理地均衡每个拣选工位在某段时间内的工作量。
图 3:拣选工位划分
*问题* *3* :避免碰撞和拥堵
在问题一和问题二的基础上,进一步考虑搬运机器人的碰撞和拥堵问 题。当仓库内同时有多个 AGV 在执行任务时,不可避免有些 AGV 在某个路径节点上相遇。特别地,如果两个 AGV 在一条货架窄巷道上相遇,那么
需要其中一个 AGV 避让。
在合理的假设下,请设计算法和防碰撞策略,使得搬运机器人能智能地避免碰撞。特别是在一些特殊节点处(如托盘回收处),避免出现多个 AGV 的拥堵,和可能的死锁场景。
下图是一个死锁场景示例,一个 AGV 去拣选工位取空托盘,另一台AGV 去相邻停靠位放置托盘,他们占据了各自的前进路径节点后都不退让, 造成了死锁。
图 4:死锁场景示例
** **
****附件一:****无人仓的背景介绍
仓库管理(也叫仓储管理)是对仓库内货物的接收、存储、发货等一系列活动进行有效的控制管理,维护仓库货物并确保日常经营活动正常进行。传统的仓库管理模式大多是人工管理模式,而这种管理方式有着不少问题, 特别是因为人力效率低下的因素导致的“爆仓”现象。
随着电商的兴起,无人仓逐渐作为自动化仓储物流系统的发展方向和 目标。最早的包括 Amazon 的 Kiva 机器人,以及后来 AGV 搬运机器人、SHUTTLE 货架穿梭车、DELTA 分拣机器人等各式各样的、高度自动化的机器人都是为仓库的无人化量身定制的。而无人仓内搬运机器人的调度问 题是其中的核心问题。
下面是无人仓模型涉及到的设施和因素,主要包括了搬运机器人,托 盘,储位,拣选工位,托盘回收处等。
*搬运机器人*
搬运机器人,即 Automated Guided Vehicle (AGV),通过特殊地标导航自动将物品运输至指定地点。它是执行仓库内任务的主要单元,可以通过 指令指派一个AGV 去取一个货架到仓库内指定地点,比如拣选工位,储位, 回收处等。
** **
*托盘和储位*
仓库内绝大部分区域都是放置托盘的储位,而托盘上摆放着待出库商 品。有的仓库里托盘用多层的货架代替,无论货架还是托盘都可以被 AGV 搬运。
*拣选工位*
由分拣机器人拣选商品,完成打包后通过传送带输送出库,包括了多 个放置托盘的停靠位,分拣机器人以及商品出库的传送带。
*托盘回收处*
仓库内用来回收空托盘的固定区域,一般仓库内会指定 2-4 个固定位置为托盘回收处。
** **
*仓库地图*
从上述几个设施,连同AGV 行驶道路,把仓库内区域细分为道路节点, 和有限制的节点(如工位,储位等)。从而仓库模型可以抽象为节点和边的 图。简单来说,附件仓库地图数据(map.csv)通过描述节点类型,以及节点之间的关系(边),可以构建如下图所示的仓库地图。
*地图说明*
附件中仓库地图数据(map.csv)是按 csv 格式存储,节点类型有如下几类,分别用不同颜色标注(参看上图)。
1) *路径节点* (灰色):AGV 可以自由通行。
2) *储位节点* (绿色):放置托盘或者普通货架,AGV 可以到达。一般只有一个位置可以进出,即靠近道路的位置。
3) *保留节点* (黄色):保留位置。
4) *柱子节点* (黑色):障碍物,AGV 不能到达。
5) *拣选工位节点* (蓝色):拣选机器人在这里把商品打包后从传送带出库,一般有多个托盘停靠位。
** **
6) *补货位节点* (粉色):从高密度区补货的商品放置点,一般通过传送带输送。
7) *空托盘回收节点* (红色):空托盘回收处,图中只有两处。
*附件二* 无人仓数据文件
本题提供了无人仓模型相关的 4 个数据文件,其数据格式解释如下。数据文件下载地址:https://www.coap.online/competitions/2
*仓库地图数据* (map.csv)
此文件存放是地图信息,内容包括仓库内各类节点的具体分布情况, 以及节点之间的连通性。给定的地图是32 × 22的一块矩形区域。数据字段的含义如下:
l *TYPE* : 节点类型。
1:路径节点,AGV 可以通行。
2:储位节点,放置托盘或者普通货架,AGV 可以到达。一般只有一个位置可以进出。
3:保留节点,保留位置,暂不处理。
4:柱子节点,障碍物,AGV 不能到达。
5:拣选工位节点,拣选机器人在这里把商品打包后从传送带出库, 一般有多个托盘停靠位。
6:补货位节点,从高密度区补货的商品放置点,一般通过传送带输 送。
7:空托集放工位节点,空托盘回收处。
l *X* : 节点所在位置的 X 轴坐标。
l *Y* : 节点所在位置的 Y 轴坐标。
l *NEIGHBORS* ****:****AGV 可到达的节点,格式为�1: �1; … ;�4: �4,表示可以从当前节点能到达的邻近节点的坐标集合。这里最多是 4 个邻近节点。
*TYPE* *X* *Y* *NEIGHBORS* 1 3 0 3:1; 2:0; 4:0 3 4 0 4:1; 3:0; 5:0 2 5 5 5:4 5 6 5 6:4 … … … …
*搬运机器人数据* (agv.csv)
此文件存放的是搬运机器人的初始信息,内容包括每个 AGV 位置信息。数据字段含意如下:
· *AGV_ID* : 搬运机器人 AGV 的唯一 ID
· *X* : AGV 所在位置的 X 轴坐标
· *Y* : AGV 所在位置的 Y 轴坐标
*AGV_ID* *X* *Y* 1 31 14 2 7 11 3 21 13 … … …
** **
*订单数据* (orders.csv)
此文件存放是订单信息,为一段时间内累计的订单。这里订单已经根 据商品号 SKU 拆分。需要分派 AGV 根据订单上的商品号 SKU 去寻找对应的托盘,并将托盘搬运到拣选工位上出库。数据字段含意如下:
· *ORDER_ID* : 订单的唯一 ID
· *SKU* : SKU 的唯一 ID
· *AMOUNT* : 所需该 SKU 的数量
*ORDER_ID* *SKU* *AMOUNT* 1 1579172 6 2 2609314 12 3 1335852 53 … … …
*库存数据* (pallets.csv)
此文件存放的是仓库内托盘上商品信息,包括每个托盘的位置以及存 放的各个商品 SKU 和数量。数据字段含义如下:
· *SKU_QUANTITY_LIST* : 该托盘上存放的各个SKU 的ID 和数量, 格式为“���:�: � : � ,• • •, ���% : �%”,表示存放了�个���个��� 个 � � � , • • •,和�%个���%
· *X* : 该托盘所在位置的 X 轴坐标
· *Y* : 该托盘所在位置的 Y 轴坐标
· *PALLET_ID* : 托盘的唯一 ID
*SKU_QUANTITY_LIST* *X* *Y* *PALLET_ID* “104151:9,84021135,1297235:1” 18 8 10000 “901897:13,1297235:18,2171945:14” 19 16 10001 “653296:69” 14 12 10002 “1473101:66” 18 15 10003 … …