-1

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

我的限制是:

  1. 我有客户 (100) 有准备和到期时间。
  2. 还有车辆(10)也有准备和到期时间。
  3. 求解器运行 150 秒。

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

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

1 回答 1

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

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

于 2019-01-24T02:48:30.540 回答