我正在开发一个 VRPTW,我需要优化卡车何时离开仓库,同时还要考虑每小时的调度限制。也就是说发车时间不固定,只知道一天中什么时间可以开始发车,每小时可以发多少辆。
有没有一种方法可以对域进行建模以便我可以实现这个目标?我目前实施的 VRPTW 正在运行,但没有优化出发时间,这导致许多卡车过早出发,虽然它满足了订单的交货窗口,但通过将出发时间分散在一天中还有改进的空间
以 timefold-quickstarts 中的 Timefold VRPTW 为例(这是一个新的快速入门,因为我们继续 OptaPlanner。它使用 Timefold Solver Community,所以也是开源的)
使用 ArrivalTimeUpdatingVariableListener 来延迟一些卡车。
确保听者 100% 确定,无论谁被移入 时间块最后。通常,ID 排序效果很好。例如, 每小时 3 辆卡车,鉴于
A, C, E
已经在那里,添加
B
将导致 A, B, C
并触发 E
推入下一个时间块。
确保监听器递归到未来时间。在上面的示例中,当
E
被推送到已经包含 D, G, H
的下一个时间块时,它会导致 D, E, G
并触发将 H
也向下推送。
或者,当且仅当您的所有车辆都完全相同时,只需创建足够的车辆来填充每个起始块并使用开箱即用的 Timefold VRPTW 快速入门。
然后添加硬约束来限制已使用车辆的总数。