2

ここで説明されているjythonスクリプト方法を使用してオープントリッププランナーを利用しています: http://docs.opentripplanner.org/en/latest/Scripting/ (具体的には「OTPをライブラリとして使用する」) と非常によく似たスクリプトを使用していますサンプルスクリプト

テスト目的で、それぞれ 40 の場所を含む 2 つの csv ファイルがあります。場所はオランダ国内にあり、オランダの gtfs とマップの両方を読み込んでいます。奇妙なことに、今日以外の日を指定すると、公共交通機関の移動時間を計算するコード (サンプル スクリプトの 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 日にスクリプトを実行したことに注意してください.

もちろん、私の主な質問は、どうすれば今日以外の日に速くすることができるかということです. (私の主な関心は実際には明日です)

OTP インスタンスが開始されたときに関連していますか、それとも何らかの内部最適化ですか? 数日前に作成されたので、グラフの作成とは関係ないと思います。OTP を初期化するときに日または日時の設定を提供することを検討していましたが、ドキュメントでそれを見つけることができません。

(私はまだ自分のシステム時間をいじってみたことはありませんが、それは私があまり好きではないオプションでもあります)。アイデアやコメントは大歓迎です。必要に応じて、再現可能なサンプルを明日提供します。

4

1 に答える 1

0

この問題は、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

この例では、ソリューションを検索するための非常に長い時間枠があります。1 時間以内だけでなく、25 時間のウィンドウで見るようになりました。

とにかく、簡単な解決策は、最初に setDateTime() を呼び出し、次に setMaxTimeSec() を呼び出すことです。

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

または、何らかの理由でこれらのメソッドを切り替えることができない場合は、 setMaxTimeSec() を現在と setDateTime() 値の時間差でいつでも修正できます。

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)
于 2019-01-09T20:42:26.833 に答える