コンテンツにスキップ

シミュレーション状態の保存・読込

参考原文バージョン: 2021/12/8, 820de3c7e781e9ef7dd361d58fc31a9966a4f8aa

SUMOはバージョン0.18.0からシミュレーション状態の保存・読込をサポートしています。

保存

シミュレーション中に特定時刻の状態を保存するには、--save-state.timesオプションを加えます。

sumo --save-state.times TIME1,TIME2,TIME3

または、状態を周期的に保存する--save-state.period <TIME>オプションが使えます。--save-state.period.keep Nオプションは、最後のN個の状態ファイルを除き、全てを削除できます。

デフォルトでは<PREFIX>_<TIME><SUFFIX>という名前のファイルに状態が書き出されます。<PREFIX>--save-state.prefixオプションで設定できます(デフォルトはstate)。<TIME>はシミュレーション時刻、<SUFFIX>.xml.gz.xmlのいずれかで、--save-state.suffixオプションで指定できます(デフォルトは.xml.gz)。

拡張子'.xml.gz'はgzip形式で圧縮されたxmlファイルであり、全てのSUMOアプリケーションで直接使用したり、標準的なファイル圧縮ツールで解凍することもできます。

--save-state.timesオプションを使用するとき、次のように--save-state.filesオプションを使うことで、出力するファイル名を陽に設定することもできます。

sumo --save-state.files FILE1,FILE2,FILE3

特に、圧縮形式の.xml.gzの代わりに標準テキストのxmlファイルを出力したい場合は、拡張子.xmlをつけてファイル名を指定してください。

その他のオプション

  • --save-state.rng: 乱数生成器の状態を保存します
  • --save-state.transportables: personとcontainerの状態を保存します
  • --save-state.constraints: 鉄道信号機の制約(rail signal constraints)を保存します
  • --save-state.precision: 状態を保存するときの精度(decimal precision)を設定します

読込

--load-state <FILE>オプションを使うことで、与えた状態ファイルでシミュレーションを初期化します。 状態ファイル保存時に使用していた同じ入力ファイルを使ってシミュレーションを開始し、状態が保存された時刻を--beginオプションで指定することを推奨します。 追加の車両など、追加ファイルを加えることも可能です。 --load-state.offsetオプションが設定されたとき、シミュレーション状態から読み込まれた全ての時刻が指定された量だけシフトされます。 この機能は、midnight以降にシミュレーション秒数を0にリセットし、読み込まれたvehicleを正常に動き続けるのに使用できます。

--load-state.remove-vehicles ID1,ID2,...オプションは、読み込まれた状態からvehicleを削除します。 これにより、選ばれたvehicleを.rou.xmlファイルで再度挿入することで、再配置できる可能性があります。

詳細情報

出発前のvehicleはシミュレーション状態に含まれないため、入力ファイルからロードする必要があります。 シミュレーション状態に存在するvehicleを入力ファイルから読み込んだ場合、これらのvehicleは自動的に無視され、エラーなしで読込処理が行われます。

乱数生成器

デフォルトでは、乱数生成器(Random number generators : RNG)の状態は保存されません。 そのため、読み込まれた状態以降はシミュレーションが元と異なる動作を示します。

--save-state.rngオプションを設定した場合は、全ての乱数生成器の状態がシミュレーション状態に含まれ、読込時には復元されます。 この追加状態を保存するコストは約500kBです。 もし、このオーバーヘッドが高コストな場合は、--thread-rngsに小さな値を設定することで削減できます(デフォルトは64)。 この値は、ルーティングやシミュレーションに使われるスレッド数(--threads、--device.rerouting.threads**)より小さな値にしてはいけません。

既知の問題

  • flowsを状態ファイルのみから読み込むことはできません(オリジナルのrouteファイルを必ず読み込む必要があります)
  • laneChangeModelの内部状態は保存されません
  • carFollowModelの内部状態は保存されません(全てのモデルにあてはまるわけではありません)

旧バージョン

バージョン0.18.0以前のSUMOでは、回避策として、仮想マシン(VM)上でSUMOを実行することで、任意の時刻でVMの状態として保存できる可能性があります。

Linux上でVirtualBoxを使ったテストでは、VMに十分はハードウェアリソースを割り当てていない場合、SUMOの実行がホストでの直接実行より極端に遅くなります。 例えば、TraCI経由でSUMOと通信する他のプログラムを同時に実行する場合、VMに十分なCPUコアを割り当てるべきです。