车辆路线问题:时间窗VRP应该考虑TimeWindowedDepot.getDueTime()

时间:2019-01-22 07:38:26

标签: drools optaplanner vehicle-routing

我正在处理时间窗车辆路径问题。

我的约束是:

  1. 我有100个已准备就绪且应有时间的客户。
  2. 还有准备就绪的车辆(10)
  3. 求解器运行150秒。

结果尊重客户的DueTime,但不尊重仓库(或车辆)的DueTime。 我尝试为车辆到期时间添加硬约束。但是,尽管我有足够的车辆,但是这使许多客户无法初始化。 这是我使用的硬约束。

// TimeWindowedDept: extra hard constraints
rule "arrivalAfterDueTimeInDepot"
when
    TimeWindowedCustomer($arrivalTime : arrivalTime, $vehicle : vehicle)
    $customer : Customer(previousStandstill != null)
    TimeWindowedDepot($vehicle != null && dueTime<($arrivalTime+$customer.getDistanceTo($vehicle)), $dueTime : dueTime)
then
    scoreHolder.addHardConstraintMatch(kcontext, ($dueTime-($arrivalTime+$customer.getDistanceTo($vehicle))));
end

如果我写的规则不正确,请提出建议。或是否有其他解决此问题的方法。询问所需的任何细节。谢谢。

编辑1: 我稍微修改了规则,但结果还是一样。

// TimeWindowedDepot: extra hard constraints    
rule "arrivalAfterDueTimeInDepot"
when
    TimeWindowedDepot($dueTime : dueTime)
    TimeWindowedCustomer(vehicle != null && $dueTime < arrivalTime+ getDistanceTo(vehicle), $arrivalTime : arrivalTime, $distance : getDistanceTo(vehicle))
then
    scoreHolder.addHardConstraintMatch(kcontext, ($dueTime-$arrivalTime+$distance));
end

1 个答案:

答案 0 :(得分:1)

经过多次迭代,这是解决我的问题/用例的规则。

// TimeWindowedDepot: extra hard constraints
rule "arrivalAfterDueTimeInDepot"
when
    TimeWindowedDepot($dueTime : dueTime)
    TimeWindowedCustomer(vehicle != null && previousStandstill!=null && previousStandstill==vehicle && $dueTime < arrivalTime + serviceDuration + getDistanceTo(vehicle), $arrivalTime : arrivalTime, $distance : getDistanceTo(vehicle), $serviceDuration : serviceDuration)
then
    scoreHolder.addHardConstraintMatch(kcontext, ($dueTime-$arrivalTime+$serviceDuration+$distance));
end

我认为这将来可能会对某人有所帮助。