「交通シミュレーション特論」講義に関する情報一覧
目次
この講義に関する「公式情報」
より私的な講義の概要説明
- 大学院講義です。シミュレーションによる交通システムの評価手法を体得してもらうことを目指しています。
- ある時期までは「プログラムを作る」を目標にしていたのですが,ウィンドウズの普及でプログラミングということが身近でなくなったおかげ(??)か,あまりに単位修得にいたる者の割合が少ないので,昨年度からは大幅に形式を変更し,プログラムを「作る」よりは「使う」ほうを主な目標にしました。体得してもらう,という部分は変更なしのつもりです。
- ただし,「作る」ほうも,将来何らかの形で関わる方は多いと思われますので,そのようなときに役立つさまざまな知識は講義で提供することにしています。
マテリアルへのリンク
- ここにあるプログラムの利用条件は,RTSS のそれに準じます。
講義第9回 (2010. 12. 3)
- ソースコード一式 Dijkstra-demo2.tar.gz
- 注 (2010. 12. 10): 上記ソースコードを更新しています。GCC 4.5 (MinGW / MSYS 最新版をダウンロードすると入れられるもの) を使うと,エラーのためコンパイルができない問題がありました。これを解消したものです。
- デモに使用したプログラムです。
- ソースコード一式を開くと,ひとつのディレクトリができ,そこにいくつかのファイルが存在しているはずです。
- このプログラムが行うことは,基本的に講義第5~8回のなかで紹介した demo5.cc と同じことをしますが,データがソースコードのなかではなく,XML データファイルにより記述される点が異なります。
- このプログラムをコンパイルする場合には PCRE (Perl Compatible Regular Expression) ライブラリが前もってインストールされて,使える状態になっていることが必要です。ライブラリはここからダウンロードできます。最新版のソース(pcre-8.10.tar.gz とか pcre-8.10.tar.bz2 とか) をとってきて,展開すると,ひとつのディレクトリができ,そこに関係するファイル一式ができます。そのディレクトリに移動し,インストールのやり方を書いた文書に従ってコンパイル・インストールしてください。
- これを g++ を用いてコンパイルする場合,たとえば次のようにすればよいでしょう:
- こうしてできた sujic_demo(.exe) を用いて,当該ディレクトリにあるXML設定ファイル data.xml を読み,シミュレーションを実行することができます。以下のようにしてください:
- こうすると world.log というログファイルが生成されます。これをエディタ等で開き,なかみを確認してください。
- 中身の異なるデータファイルを新たに作成し,上記の手順でシミュレーションを繰り返し,プログラムが「正しく」動作していることを確認してください。
g++ -O2 RS_Object.cc RS_XmlReader.cc Sujic_Weight.cc X_Cycletime_Initialiser.cc X_OD_Station_Creator.cc X_Simple_CTI_Creator.cc X_SpaceTimeNode.cc X_Station.cc X_Station_Creator.cc X_SujicDemo_Main.cc X_Train.cc X_Train_Creator.cc rtss_path.cc tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp -lpcre -o sujic_demo
sujic_demo data.xml > world.log 2>&1
講義第5回・第6回・第7回・第8回 (2010. 10. 22 / 10. 29 / 11. 12 / 11. 26)
- ソースコード一式 Dijkstra-demo.tar.gz
- デモに使用したプログラムです。
- ソースコード一式を開くと,ひとつのディレクトリができ,そこにいくつかのファイルが存在しているはずです。
- 5つのプログラム demo1.cc, demo2.cc, demo3.cc, demo4.cc, demo5.cc があります。どれも独立のプログラムで,ヘッダファイル RS_FHeap.hh および RS_Dijkstra.hh を利用します。
- これらを g++ を利用してコンパイルする場合,たとえば次のようにすればよいでしょう。以下の例では demo1.cc について記述していますが,demo2.cc 以下についても同様にできるはずです:
- プログラム demo1.cc は,無向グラフにおいて,弧に非負の整数の重みを与え,Dijkstra 法により最短経路を求めます。グラフなどの必要なデータはすべてソースコード内に記述されています。
- プログラム demo2.cc は,demo1.cc と同様ですが,弧に与える重みが整数ではなく,Sujic_Weight というクラスになっています。Sujic_Weight クラスの宣言や実装もこの demo2.cc に含まれています。グラフなどの必要なデータは demo1.cc と同様すべてソースコード内に記述されています。
- プログラム demo3.cc では,demo2.cc で用いた Sujic_Weight をそのまま用い,さらに列車ダイヤをデータとして与えることができるよう,列車を表す X_Train クラス,駅を表す X_Station クラス,および駅における「時空ノード」を表現する X_SpaceTimeNode クラスなどを宣言・実装しています。これらのクラスを用いて列車ダイヤを記述した後,ある駅にある時刻に到着した乗客が別な駅にどのような列車を乗り継いでたどり着くのが最適かを Dijkstra 法によって求めます。駅や列車,そして乗客の到着時刻・到着駅などの必要なデータは,すべてソースコード内に記述されています(列車データの半分ほどがコメントアウトされていることに注意)。
- プログラム demo4.cc では,demo3.cc をもとに列車周期の概念を導入し,同じ周期で多数の列車が走る路線のシミュレーションを容易にしました。
- プログラム demo5.cc は,demo4.cc をもとに大幅なコードの追加を行い,乗客の列車等への割り付けまでを行うことができるプログラムとしました。
- これらのプログラムをコンパイルし,どのような動作をするか確認してください。また,プログラムソースに書かれたデータを変更し,実行してみてください。
g++ -O2 demo1.cc -o demo1
講義第4回 (2010. 10. 15)
- ソースコード等一式 TalkingAnimals.tar.gz
- 注 (2010. 12. 10): 上記ソースコードを更新しています。GCC 4.5 (MinGW / MSYS 最新版をダウンロードすると入れられるもの) を使うと,エラーのためコンパイルができない問題がありました。これを解消したものです。
- デモに使用したプログラムです。
- ソースコード等一式を開くと,ひとつのディレクトリができ,そこにいくつかのファイルが存在しているはずです。
- そのディレクトリにあるソースファイルのうち,tinyxml.h, tinyxml.cpp, tinyxmlparser.cpp, tinyxmlerror.cpp の4ファイルは,Tiny XML ライブラリ (http://www.grinninglizard.com/tinyxml/) として配布されているものです。このうち tinyxml.h については,その冒頭部に RTSS-specific changes とコメント行で示した部分について,改変(追加)を行っています。Tiny XML ライブラリのライセンスは,Zlib ライセンスです。その詳細については,これらのファイルの冒頭部のコメント行をご覧ください。
- このプログラムをコンパイルする場合には PCRE (Perl Compatible Regular Expression) ライブラリが前もってインストールされて,使える状態になっていることが必要です。ライブラリはここからダウンロードできます。最新版のソース(pcre-8.10.tar.gz とか pcre-8.10.tar.bz2 とか) をとってきて,展開すると,ひとつのディレクトリができ,そこに関係するファイル一式ができます。そのディレクトリに移動し,インストールのやり方を書いた文書に従ってコンパイル・インストールしてください。
- testTalkingAnimal.exe(マイクロソフト・ウィンドウズの環境において。Linux などだと最後の .exe はつかないと思います)を生成するには,以下のファイルをすべてコンパイル・リンクすればよいでしょう。
- RS_Object.cc
- RS_XmlReader.cc
- Test_TalkingAnimalContainer.cc
- Test_TalkingAnimals.cc
- Test_TalkingCat_Creator.cc
- Test_TalkingDog_Creator.cc
- Test_TalkingHuman_Creator.cc
- rtss_path.cc
- testTalkingAnimalsMain.cc
- tinyxml.cpp
- tinyxmlerror.cpp
- tinyxmlparser.cpp
- g++ を使う場合,当該ディレクトリにおいて以下のようにすればよいでしょう:
- できあがった testTalkingAnimal(.exe)を実行するとデモが行えます。コマンド行引数として talking-animal-without-tiger.xml を指定してください。次のように:
- このディレクトリには,ほかにも XML ファイルがあります。しかし,上記のようにコンパイルすると,ほかの .xml ファイルは読めません。これは,Test_TalkingTiger オブジェクトに関するコードが含まれていないからです。
- Test_TalkingTiger.h と Test_TalkingTiger_Creator.cc を「加えて」やれば,ほかの XML ファイルも読むことができるようになります。このようにコンパイルすればよいでしょう (ハイライト部分が追加すべきファイル名です):
- このようにして生成した testTalkingAnimal(.exe)であれば,残るふたつの .xml も読むことができます。
- 読み込ませる XML ファイルを変更したり,新たなクラスを追加したりしてみてください。
g++ -O2 RS_Object.cc RS_XmlReader.cc Test_TalkingAnimalContainer.cc Test_TalkingAnimals.cc Test_TalkingCat_Creator.cc Test_TalkingDog_Creator.cc Test_TalkingHuman_Creator.cc rtss_path.cc testTalkingAnimalsMain.cc tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp -lpcre -o testTalkingAnimal
testTalkingAnimal talking-animal-without-tiger.xml
g++ -O2 RS_Object.cc RS_XmlReader.cc Test_TalkingAnimalContainer.cc Test_TalkingAnimals.cc Test_TalkingCat_Creator.cc Test_TalkingDog_Creator.cc Test_TalkingHuman_Creator.cc Test_TalkingTiger_Creator.cc rtss_path.cc testTalkingAnimalsMain.cc tinyxml.cpp tinyxmlerror.cpp tinyxmlparser.cpp -lpcre -o testTalkingAnimal