在Optaplanner中模拟午休时间和额外的仓库退货

时间:2016-07-10 13:51:39

标签: optaplanner

我们正在使用optaplanner尝试通过时间窗改善我们当前的车辆路线。我们有一些小问题,我们不确定如何克服:

  • 我们的司机需要有30分钟的午休时间,在班次的第3到第5小时之间(从驾车开始),如果驾驶时间短于5小时,则不需要休息。 / LI>
  • 我们必须确保某些软件包(但不是全部)在一定时间内返回到软件仓库。例如,某些客户的接送时间为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有望确保规划人员找到将其放入路线的最佳方式。

然而,对于午休模特,我们不太清楚该怎么做。

有更好的方法对此进行建模吗?什么是午餐休息时间模型的最佳方式?是否有任何样本可以指出我们正确的方向?

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

  • 及时回到软件仓库:在名为arrivalBackToDepotTime的Vehicle上添加影子变量,然后使用variableListenerRef重新使用ArrivalTimeUpdateVariableListener,然后再使用arrivalBackToDepotTime需要更新该字段。添加硬约束以检查每个客户车辆<img src="..../uploads/image.png" width="300" height="500" /> 是否小于客户到达仓库所需的时间。