簡體   English   中英

在今天以外的日子里,旅行計划向導的腳本變慢

[英]Open trip planner script slower on days other than today

我正在使用通過此處解釋的jython腳本方法使用開放旅行計划者: http : //docs.opentripplanner.org/en/latest/Scripting/ (特別是“將OTP用作庫”),並且使用的腳本非常相似他們的示例腳本

為了進行測試,我有兩個csv文件,每個文件包含40個位置。 這些地點在荷蘭境內,我已經加載了荷蘭的gtfs和地圖。 奇怪的是,當我指定除今天以外的一天時WALK,TRANSIT用於計算公共交通出行時間的代碼(示例腳本中的第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日同時運行了該腳本,而且腳本運行速度也很快,因此它肯定與“今天”有關,而與8日無關。

當然,我的主要問題是,除了今天以外,我如何才能快速做到這一點? (我的主要興趣實際上是明天)

它與啟動OTP實例的時間有關還是在進行內部優化? 我認為這與圖表的構建無關,因為它是幾天前構建的。 我在初始化OTP時正在考慮提供日期或日期時間設置,但無法在文檔中找到。

(我還沒有嘗試弄亂系統時間,但這也是我不太喜歡的選擇)。 歡迎任何想法或評論。 如有必要,我明天將提供可復制的樣品。

這個問題實際上是由於我將req.setDateTime()與req.setMaxTimeSec()結合使用而引起的。

基本上,setMaxTimeSec()使用setDateTime()設置的日期作為起點,並定義該日期時間+ maxTimeSec的最差時間(又稱最后可能的時間)。 但是,如果在調用setMaxTimeSec()時尚未設置setDateTime(),則使用當前日期時間。 因此,當您碰巧調用setDateTime()AFTERWARDS時,這將導致問題。 例:

setMaxTimeSec(60*60) # Sets worst time to now + 1 hour
setDateTime(yesterday) # Sets departure time to yesterday

這個例子有很長的時間來尋找解決方案! 現在,我們正在尋找一個25小時的窗口,而不僅僅是一個小時的時間!

無論如何,一個簡單的解決方案是先調用setDateTime(),然后調用setMaxTimeSec():

setDateTime(yesterday) # Sets departure time to yesterday
setMaxTimeSec(60*60) # Sets worst time to yesterday + 1 hour

另外,如果由於某種原因而無法切換這些方法,則始終可以使用now和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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM