如何在时间窗口中使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

jsprit如何将取件添加到车辆

jsprit如何将货物添加到指定车辆

如何在 JSprit 中使用具有自身成本矩阵的车辆类型

如何在服务器上使用jsprit代码

无法通过使用 Jsprit 向服务提供时间窗口来获得正确的优化路线

JSprit算法软硬时间窗口