我试图理解 Optaplanner 车辆路由示例的时间窗口变体。有一些地方不太明白,需要确认。
- readyTime、dueTime、serviceDuration 和arrivalTime 使用的度量单位是什么?我尝试查看示例数据,但仍然无法弄清楚。
- 如何计算到达时间?应该与从一个地点到另一个地点所需的时间有关,但我找不到如何计算该时间。
任何评论和答案都将不胜感激。 谢谢并致以问候。
最佳答案
时间单位是/似乎是相对的。在示例中,它是一个整数,没有真正的时间戳信息(例如绝对日期)。采用这种方法的优点是您不需要采用“年”、“月”或“日”单位系统。
看看
ArrivalTimeUpdatingVariableListener
类(class)。有一个方法叫calculateArrivalTime()
。计算本身会获取您当前的客户和之前的出发时间,并检查之前的出发时间是否是您的客户链的开始(如果是null
,那么您将获得车辆)或现有客户。2.1 案例“车辆”表示,您检查当前客户(也称为车辆的第一份工作)的
readyTime
的最大值以及仓库到您当前客户的距离。您取其中一个大于另一个,并将其设置为更新的arrivalTime
.2.2 案例“N-客户(N > 1)”:获取
departureTime
前一个客户的位置,添加与前一个客户的距离并返回更新后的值arrivalTime
。
在这两种情况下,您都将检查完整的链,如果最后已知的到达时间等于更新的 arrivalTime
以防止重复计算。这可以节省性能,因为您将打破 while
情况。
关于java - 时间窗口变量的解释,尤其是到达时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850530/