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