如何在时间窗口中使用 jsprit?
Posted
技术标签:
【中文标题】如何在时间窗口中使用 jsprit?【英文标题】:How to use jsprit with time windows? 【发布时间】:2016-06-10 12:35:58 【问题描述】:我不明白如何在 jsprit 中使用时间窗口。
我知道这是您使用以下方法赋予车辆的价值:
setLatestArrival(1236);
对于像这样的服务:
setTimeWindow(TimeWindow.newInstance(912,967));
但是如何将小时数转换为这个值呢? 我如何为 2 个服务编写时间窗口:
1- 10 点开始,12 点结束
2- 16 点开始,15 点结束
谢谢帮助。
【问题讨论】:
我的理解是将小时转换为分钟: 我认为您可以使用任何单位(例如,小时、分钟、秒等),只要它们是一致的 - 时间窗口、服务时间、运输时间等。 请参阅我对已接受答案的评论,以澄清一些事情。 【参考方案1】:Jsprit 以秒为单位。如果要使用小时,则需要先将时间转换为秒。 我想在这里澄清一件事,
setTimeWindow(TimeWindow.newInstance(912,967));
这里的912和967不是任务的开始时间和结束时间。这里的 912 是earliest start time
这意味着你不能在 912 之前启动这个服务。
而 967 是 latest end time
,这意味着您必须在 967 之前结束此服务。服务可能有一些 duration
,您可以在
setServiceTime(以秒为单位的时间)
【讨论】:
对此进行一些澄清。 Jsprit 实际上与时间单位无关,您可以定义自己喜欢的度量单位(我使用分钟)并确保始终保持一致。此外,您在技术上对latest end time
并不正确,尽管这可能是因为该属性的设置并不太清楚。它实际上是latest start time
,工作可以在967
之后结束。请参阅this 建议的功能以了解替代时间窗口实现。
@sutirtha 我们在时间窗口中给出的这些数字 (TimeWindow.newInstance(912,967)) 是否仅在一天中写入,意味着这一天该服务必须在上午 10 点开始并在 1 点结束pm 或者这些数字代表什么? 912 和 967 没有意义。
@ManjunathM roganjosh 解释说 jsprit 与时间单位无关。您可以定义您喜欢的时间单位。假设您根据纪元时间戳声明问题,它将类似于: setTimeWindow(TimeWindow.newInstance(timestamp1, timestamp2));同样,您可以将时间用作 min,然后它将类似于: setTimeWindow(TimeWindow.newInstance(min1, min2));这些时间是问题所在(你可以说一天的开始时间)。这又取决于你。您可以将开始时间作为车辆的开始时间。在这种情况下,车辆时间窗口将是(0,车辆工作的结束时间)
@sutirtha 谢谢你的帮助。
@sutirtha 假设如果我的车辆的早期开始和结束日期是基于一天,则意味着他每天上午 10 点到晚上 8 点工作。如果他必须完成的服务实际上需要超过一天的时间让工作需要 12 小时。那么既然我提到了我的车辆时间特定于一天(一天 8 小时)并且工作需要超过一天才能完成。它不会给出任何路线。那么在这种情况下如何提及时间?以上是关于如何在时间窗口中使用 jsprit?的主要内容,如果未能解决你的问题,请参考以下文章