在除今天以外的日子里,打开旅行计划器脚本的速度较慢
Open trip planner script slower on days other than today
我正在使用此处解释的 jython 脚本方法来使用 open trip planner:http://docs.opentripplanner.org/en/latest/Scripting/
(特别是 'Using OTP as a library')并且我使用的脚本与他们的 example script
非常相似
出于测试目的,我有两个 csv 文件,每个文件包含 40 个位置。这些位置在荷兰境内,我已经加载了荷兰 gtf 和地图。 st运行ge 是计算 public t运行 运动旅行时间的代码(示例脚本中的第 32 行:res = spt.eval(colleges)
,使用模式 WALK,TRANSIT
) 当我指定今天以外的一天时需要更长的时间。
一个例子:
req.setDateTime(2018, 12, 8, 16, 00, 00) # today
spt.eval(my_data) # -> takes ~7 - 10 seconds
req.setDateTime(2018, 12, 7, 16, 00, 00) # yesterday
spt.eval(my_data) # -> takes ~30 - 40 seconds
不设置req.setDateTime()
时,spt.eval()
更快。请注意,我 运行 6 号的脚本,也是 6 号的,当时它也很快,所以它肯定与 "today" 有关,而不是专门与 8 号有关。
当然,我的主要问题是,除了今天之外,我如何让它禁食? (其实我的主要兴趣是明天)
是跟OTP实例启动时间有关还是内部优化?我不认为它与图形的构建有关,因为它是几天前构建的。我正在考虑在初始化 OTP 时提供日期或日期时间设置,但我无法在文档中找到它。
(我还没有尝试过弄乱我的系统时间,但这也是我不太喜欢的一个选项)。欢迎任何想法或意见。如有必要,我明天会提供可复制的样品。
这个问题实际上是因为我将 req.setDateTime() 与 req.setMaxTimeSec() 结合使用造成的。
基本上,setMaxTimeSec() 使用 setDateTime() 设置的日期作为起点,并将最坏时间(也称为最后可能时间)定义为该日期时间 + maxTimeSec。但是,如果在调用 setMaxTimeSec() 时尚未设置 setDateTime(),则会使用当前日期时间。当您碰巧在之后调用 setDateTime() 时,这将因此导致问题。示例:
setMaxTimeSec(60*60) # Sets worst time to now + 1 hour
setDateTime(yesterday) # Sets departure time to yesterday
这个例子有很长的时间window寻找解决方案!我们现在正在寻找 window 25 小时,而不是只在一个小时内寻找!
无论如何,一个简单的解决办法是先调用setDateTime(),然后调用setMaxTimeSec():
setDateTime(yesterday) # Sets departure time to yesterday
setMaxTimeSec(60*60) # Sets worst time to yesterday + 1 hour
或者,如果由于某种原因您无法切换这些方法,您始终可以使用现在与您的 setDateTime() 值之间的时差更正 setMaxTimeSec():
date = datetime.strptime('2019-01-08 21:00', '%Y-%m-%d %H:%M')
date_seconds = time.mktime(date.timetuple())
now_seconds = time.mktime(datetime.now().timetuple())
date_diff_seconds = int(round(date_seconds - now_seconds))
req.setMaxTimeSec(60*60 + date_diff_seconds)
req.setDateTime(date.year, date.month, date.day, date.hour, date.minute, 00)
我正在使用此处解释的 jython 脚本方法来使用 open trip planner:http://docs.opentripplanner.org/en/latest/Scripting/ (特别是 'Using OTP as a library')并且我使用的脚本与他们的 example script
非常相似出于测试目的,我有两个 csv 文件,每个文件包含 40 个位置。这些位置在荷兰境内,我已经加载了荷兰 gtf 和地图。 st运行ge 是计算 public t运行 运动旅行时间的代码(示例脚本中的第 32 行:res = spt.eval(colleges)
,使用模式 WALK,TRANSIT
) 当我指定今天以外的一天时需要更长的时间。
一个例子:
req.setDateTime(2018, 12, 8, 16, 00, 00) # today
spt.eval(my_data) # -> takes ~7 - 10 seconds
req.setDateTime(2018, 12, 7, 16, 00, 00) # yesterday
spt.eval(my_data) # -> takes ~30 - 40 seconds
不设置req.setDateTime()
时,spt.eval()
更快。请注意,我 运行 6 号的脚本,也是 6 号的,当时它也很快,所以它肯定与 "today" 有关,而不是专门与 8 号有关。
当然,我的主要问题是,除了今天之外,我如何让它禁食? (其实我的主要兴趣是明天)
是跟OTP实例启动时间有关还是内部优化?我不认为它与图形的构建有关,因为它是几天前构建的。我正在考虑在初始化 OTP 时提供日期或日期时间设置,但我无法在文档中找到它。
(我还没有尝试过弄乱我的系统时间,但这也是我不太喜欢的一个选项)。欢迎任何想法或意见。如有必要,我明天会提供可复制的样品。
这个问题实际上是因为我将 req.setDateTime() 与 req.setMaxTimeSec() 结合使用造成的。
基本上,setMaxTimeSec() 使用 setDateTime() 设置的日期作为起点,并将最坏时间(也称为最后可能时间)定义为该日期时间 + maxTimeSec。但是,如果在调用 setMaxTimeSec() 时尚未设置 setDateTime(),则会使用当前日期时间。当您碰巧在之后调用 setDateTime() 时,这将因此导致问题。示例:
setMaxTimeSec(60*60) # Sets worst time to now + 1 hour
setDateTime(yesterday) # Sets departure time to yesterday
这个例子有很长的时间window寻找解决方案!我们现在正在寻找 window 25 小时,而不是只在一个小时内寻找!
无论如何,一个简单的解决办法是先调用setDateTime(),然后调用setMaxTimeSec():
setDateTime(yesterday) # Sets departure time to yesterday
setMaxTimeSec(60*60) # Sets worst time to yesterday + 1 hour
或者,如果由于某种原因您无法切换这些方法,您始终可以使用现在与您的 setDateTime() 值之间的时差更正 setMaxTimeSec():
date = datetime.strptime('2019-01-08 21:00', '%Y-%m-%d %H:%M')
date_seconds = time.mktime(date.timetuple())
now_seconds = time.mktime(datetime.now().timetuple())
date_diff_seconds = int(round(date_seconds - now_seconds))
req.setMaxTimeSec(60*60 + date_diff_seconds)
req.setDateTime(date.year, date.month, date.day, date.hour, date.minute, 00)