车辆路径问题:时间窗 VRP 应该考虑 TimeWindowedDepot.getDueTime()
Vehicle routing problem: time windowed VRP should take TimeWindowedDepot.getDueTime() into account
我正在处理时间窗车辆路径问题。
我的约束是:
- 我有客户 (100) 已经准备就绪和截止时间。
- 还有车辆 (10) 也有准备时间和截止时间。
- 求解器运行 150 秒。
结果尊重客户的dueTime,但不尊重Depot(或车辆)的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
经过多次迭代,这是解决我的 problem/use 案例的规则。
// 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
我认为这可能对以后的人有所帮助。
我正在处理时间窗车辆路径问题。
我的约束是:
- 我有客户 (100) 已经准备就绪和截止时间。
- 还有车辆 (10) 也有准备时间和截止时间。
- 求解器运行 150 秒。
结果尊重客户的dueTime,但不尊重Depot(或车辆)的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
经过多次迭代,这是解决我的 problem/use 案例的规则。
// 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
我认为这可能对以后的人有所帮助。