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



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

我的限制是:

  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

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

// 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

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

相关内容

  • 没有找到相关文章

最新更新