【问题标题】:Modeling lunch breaks and additional depot returns in Optaplanner在 Optaplanner 中为午休时间和额外的仓库退货建模
【发布时间】:2016-07-10 13:51:38
【问题描述】:

我们正在使用 optaplanner 尝试通过时间窗口改进我们当前的车辆路线。我们有一些小问题我们不知道如何解决:

  • 我们的司机需要有 30 分钟的午休时间,在他们轮班的第 3 到第 5 个小时之间(从他们的驾驶开始),如果驾驶时间短于 5 小时 - 不需要休息。
  • 我们必须确保某些包(但不是全部)在特定时间之前返回仓库。例如,有些客户的取件时间是 8:00 到 8:30,但他们的包裹/包裹必须在 12:00 之前返回到仓库。

我们目前对第二个问题的想法是创建两个新类:

public class ReturningCustomer extends TimeWindowedCustomer {

   protected int returningId;

public class ReturnToDepot extends TimeWindowedCustomer {

   protected int returningId;

第一个为客户提供特殊包裹的模型,这些包裹将被退回。第二个是代表司机返厂的“假”客户。 ReturnToDepot 与仓库本身的位置相同。比较他们在 Drools 中的 id 将确保他们在同一车辆的路径上。将 ReturnToDepot 视为另一个客户有望确保规划者找到将其放入路线的最佳方式。

但是,对于午休时间建模,我们不太确定该怎么做。

有没有更好的建模方法?模拟午休时间的最佳方式是什么?是否有任何样本可以为我们指明正确的方向?

谢谢。

【问题讨论】:

    标签: optaplanner


    【解决方案1】:

    从 TimeWindowed VRP 示例开始,您可以像这样执行这 2 个请求:

    • 午休时间:调整 VariableListener 中的到达时间计算,以便在第 3 小时之后到达的任何到达时间都会再增加 30 分钟的到达时间。根据您的业务需求 - 例如,他们只能在不同地点之间休息,而不是在地点之间 - 可选择添加硬约束以确保在第 3 小时和第 5 小时之间到达。

    • 及时返回仓库:在 Vehicle 上添加一个名为 arrivalBackToDepotTime 的影子变量,并使用 variableListenerRef 重用 ArrivalTimeUpdateVariableListener,然后还需要更新该字段。添加硬约束以检查每个客户的车辆arrivalBackToDepotTime 是否小于客户到达站点所需的时间。

    【讨论】:

      猜你喜欢
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多