在除今天以外的日子里,打开旅行计划器脚本的速度较慢

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)