在 jsprit 中使用带日期的时间窗口

Posted

技术标签:

【中文标题】在 jsprit 中使用带日期的时间窗口【英文标题】:Use time windows in jsprit with date 【发布时间】:2016-07-16 14:51:31 【问题描述】:

我正在使用 VRP 做一个学校项目。我要解决的问题是生成具有多个点的路线,每个点必须在一个时间窗口中执行。

我的问题是如何将日期(unix 时间戳)转换为 jsprit 中的时间窗口,因为算法从 0 时间开始。我是否只是将时间间隔相加,或者是否有我遗漏的最佳实践。

感谢您的帮助。

【问题讨论】:

jsprit 与单元无关。您可以选择以分钟或秒为单位定义时间。您只需要定义一个参考点(什么是时间 0?),之后,您可以随时将您的转换回一个真实的日期时间。至于“我是否只是将时间间隔减去”我不确定我是否理解您的要求。 通常在 unix 时间戳上,0 时间是 1970 年。在 jsprit 上,时间 0 是算法的开始。时间单位不是问题,问题是0和时间戳之间的差距,这是一个很大的数字。我所说的 delta 的意思是如果我必须将当前时间戳减去所有提供的时间戳,这样就不会有差距。 在这种情况下,是的,我们同意这一点。您需要找到一个合理的新 unix 时间戳来表示零,然后将您的时间窗口定义为与该位置的偏移量,因此您确实仍然需要确定您希望如何定义时间单位。我认为你在你的脑海中过于复杂了。我每天都解决问题,00:00 是零时间,一直到 1439(分钟)。如果我想解决一周24小时运行,我在10080结束。然后你重新启动。 好的,我想我明白你在说什么。非常感谢您的帮助。您可以将其发布为支持它的答案吗? 【参考方案1】:

已编辑。

JSprit 与单元无关。您可以选择要使用的单位。

我可以选择从星期一到星期日,我想以分钟为单位定义单位。在这种情况下,周一早上 9 点是时间 540 (9*60)。或者我可以用秒来定义它,在这种情况下,同一时间是 32400 (9*60*60)。只要时间单位始终保持一致就没有关系。

unix 时间戳对于这个问题几乎肯定是多余的。您在设定的时间运行解决方案;通常,您正在寻找离散问题的解决方案,并且您将以设定的时间间隔运行算法。这总是为您提供一个基准点,将 jsprit 的“抽象”输出(例如到达时间 678)转换为与当前问题相关的日期时间。

这样,我可以在 7 月 19 日和 7 月 25 日运行算法,但知道到达时间的解决方案是基于 7 月 25 日 00:00 为“0”和然后只需添加分钟。

底线:JSprit 将调用解决方案的时间作为时间 0。它需要时间 0 作为您选择在任意系统中定义它的任何点;星期天的午夜,教皇弗朗西斯的就职典礼,基本上什么都可以:)

【讨论】:

以上是关于在 jsprit 中使用带日期的时间窗口的主要内容,如果未能解决你的问题,请参考以下文章

JSprit算法软硬时间窗口

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

具有多个时间窗口的 Jsprit VRP

JSprit:剩余车辆时未分配的工作

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

jsprit如何将取件添加到车辆