ortools中修正的总线调度问题

我想从 ortools修改总线调度问题,以便每个司机的班次在插槽方面是连续的,如果需要,司机可以同时共享一个班次。

例如,假设我们有以下半小时班次(格式类似于来自 ortools 的原始 bus_scheduling_problem):

shifts = [
[0, '07:00', '07:30', 420, 450, 30],
[1, '07:30', '08:00', 450, 480, 30],
[2, '08:00', '08:30', 480, 510, 30],
[3, '08:30', '09:00', 510, 540, 30],
[4, '09:00', '09:30', 540, 570, 30],
[5, '09:30', '10:00', 570, 600, 30],
[6, '10:00', '10:30', 600, 630, 30],
[7, '10:30', '11:00', 630, 660, 30],
[8, '11:00', '11:30', 660, 690, 30],
[9, '11:30', '12:00', 690, 720, 30],
[10, '12:00', '12:30', 720, 750, 30],
[11, '12:30', '13:00', 750, 780, 30],
[12, '13:00', '13:30', 780, 810, 30],
[13, '13:30', '14:00', 810, 840, 30],
[14, '14:00', '14:30', 840, 870, 30],
[15, '14:30', '15:00', 870, 900, 30],
[16, '15:00', '15:30', 900, 930, 30],
[17, '15:30', '16:00', 930, 960, 30],
[18, '16:00', '16:30', 960, 990, 30],
[19, '16:30', '17:00', 990, 1020, 30],
[20, '17:00', '17:30', 1020, 1050, 30],
[21, '17:30', '18:00', 1050, 1080, 30],
[22, '18:00', '18:30', 1080, 1110, 30],
[23, '18:30', '19:00', 1110, 1140, 30],
[24, '19:00', '19:30', 1140, 1170, 30],
[25, '19:30', '20:00', 1170, 1200, 30],
[26, '20:00', '20:30', 1200, 1230, 30],
[27, '20:30', '21:00', 1230, 1260, 30],
[28, '21:00', '21:30', 1260, 1290, 30],
[29, '21:30', '22:00', 1290, 1320, 30],
[30, '22:00', '22:30', 1320, 1350, 30],
[31, '22:30', '23:00', 1350, 1380, 30],
[32, '23:00', '23:30', 1380, 1410, 30],
[33, '23:30', '24:00', 1410, 1440, 30]
]

我成功地执行了这个版本的 bus_scheduling 代码,我发现我需要 2 个驱动程序来满足上述时间表的需求。工作时间范围从07:00 am to 24:00 (midnight).

因此,如果我们有 2 名巴士司机来安排这个时间表,我更愿意根据 12 小时司机轮班来涵盖每日值班的分配如下:

Driver 1: 07:00 - 19:00 with a break at 13:00
Driver 2: 12:00 - 24:00 with a break at 14:00 (basically no overlap with Driver 1's break)

我所说的连续小时的意思是,以 的形式满足12 小时驾驶员轮班解决方案的解决方案07:00-11:00 + 14:00-15:00 + 17:00-24:00应该被接受。更多的司机解决方案还应该确保符不重叠,从而不会所有的司机都在休息。此外,由于工作量大,休息槽可能会被堵塞。

我在or-tools 讨论中得到了一个答案,说我需要在每个节点上维护自轮班开始以来的总时间,但是我在编码时遇到了困难,假设它解决了我的问题。

以上是ortools中修正的总线调度问题的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>