在 Optaplanner 中为午休时间和额外的仓库建模 returns
Modeling lunch breaks and additional depot returns in Optaplanner
我们正在使用 optaplanner 来尝试随着时间的推移改进我们当前的车辆路线 windows。我们有一些我们不确定如何克服的小问题:
- 我们的 drivers 需要有 30 分钟的午休时间,在轮班的第 3 到第 5 个小时之间(从开车开始算起),如果开车时间短于 5 小时- 无需休息。
- 我们必须确保一些包裹(但不是全部)在特定时间之前回到仓库。例如,某些客户的 pick-up 时间从 8:00 到 8:30,但他们的包裹/包裹必须 return 在 12:00 前送达。
我们目前对第二个问题的想法是创建两个新的类:
public class ReturningCustomer extends TimeWindowedCustomer {
protected int returningId;
和
public class ReturnToDepot extends TimeWindowedCustomer {
protected int returningId;
其中第一个为客户建模的特殊包装将被 returned。第二个是代表 driver 的 return 到仓库的“假”客户。 ReturnToDepot 将与仓库本身具有相同的位置。在 Drools 中比较它们的 ID 将确保它们在同一车辆的路径上。将 ReturnToDepot 视为另一个客户有望确保规划者找到将其放入路线的最佳方式。
但是,对于午休造型,我们不太确定该怎么做。
是否有更好的建模方法?模拟午休时间的最佳方式是什么?是否有任何示例可以为我们指明正确的方向?
谢谢。
从 TimeWindowed VRP 示例开始,您可以像这样执行这 2 个请求:
午休时间:调整 VariableListener
中的到达时间计算,以便任何在第 3 小时后到达的到达时间都会再增加 30 分钟.根据您的业务需求 - 例如,他们只能在不同地点之间休息,而不是在不同地点休息 - 可选择添加硬约束以确保在第 3 小时和第 5 小时之间到达。
及时返回仓库:在名为arrivalBackToDepotTime
的Vehicle上添加一个影子变量并使用variableListenerRef
重用ArrivalTimeUpdateVariableListener
然后还需要更新该字段。添加硬约束以检查每个客户车辆的 arrivalBackToDepotTime
是否少于客户到达站点所需的时间。
我们正在使用 optaplanner 来尝试随着时间的推移改进我们当前的车辆路线 windows。我们有一些我们不确定如何克服的小问题:
- 我们的 drivers 需要有 30 分钟的午休时间,在轮班的第 3 到第 5 个小时之间(从开车开始算起),如果开车时间短于 5 小时- 无需休息。
- 我们必须确保一些包裹(但不是全部)在特定时间之前回到仓库。例如,某些客户的 pick-up 时间从 8:00 到 8:30,但他们的包裹/包裹必须 return 在 12:00 前送达。
我们目前对第二个问题的想法是创建两个新的类:
public class ReturningCustomer extends TimeWindowedCustomer {
protected int returningId;
和
public class ReturnToDepot extends TimeWindowedCustomer {
protected int returningId;
其中第一个为客户建模的特殊包装将被 returned。第二个是代表 driver 的 return 到仓库的“假”客户。 ReturnToDepot 将与仓库本身具有相同的位置。在 Drools 中比较它们的 ID 将确保它们在同一车辆的路径上。将 ReturnToDepot 视为另一个客户有望确保规划者找到将其放入路线的最佳方式。
但是,对于午休造型,我们不太确定该怎么做。
是否有更好的建模方法?模拟午休时间的最佳方式是什么?是否有任何示例可以为我们指明正确的方向?
谢谢。
从 TimeWindowed VRP 示例开始,您可以像这样执行这 2 个请求:
午休时间:调整
VariableListener
中的到达时间计算,以便任何在第 3 小时后到达的到达时间都会再增加 30 分钟.根据您的业务需求 - 例如,他们只能在不同地点之间休息,而不是在不同地点休息 - 可选择添加硬约束以确保在第 3 小时和第 5 小时之间到达。及时返回仓库:在名为
arrivalBackToDepotTime
的Vehicle上添加一个影子变量并使用variableListenerRef
重用ArrivalTimeUpdateVariableListener
然后还需要更新该字段。添加硬约束以检查每个客户车辆的arrivalBackToDepotTime
是否少于客户到达站点所需的时间。