前回はシミュレーション設計図で出力方法を指定する方法を見ました。 今回は典型的な出力方法を考えてみましょう。
まず、シミュレーション設計図のすべての <output> 要素で、プロパティの output-timing は必ず指定しなければなりません。
プロパティ名 | 設定内容 | 取り得る値 |
---|---|---|
output-timing | シミュレーション実行中にデータを出力するタイミング | init, after-evolution, final のいずれか、もしくはそれらをスペースで区切った値 |
以降ではこのプロパティは省略します。
コンソール → console
シミュレーション・プログラムを作成している際のデバッグなどでは、コンソール(標準出力、Java でいう System.out )に結果を出力できれば便利です。 指定できるプロパティは
プロパティ名 | 設定内容 | 取り得る値 |
---|---|---|
output-header | ヘッダを出力するかどうか | true, false |
ファイル → csv, ssv, tsv
実際にデータを記録するには、ファイルに出力するのが最も簡単です。 使用できるプロパティは、ファイル名や上書きを行うかどうかなどです。
プロパティ名 | 設定内容 | 取り得る値 |
---|---|---|
file-name | データを出力するファイル名 | 文字列 |
overwrite | ファイルを上書きするかどうか | true, false |
output-header | ヘッダを出力するかどうか | true, false |
csv, ssv, tsv の違いはデータ区切りの文字の違いです。 それぞれ、csv → ','(コンマ)ssv → ' '(スペース) tsv → '\t'(タブ)です。
データベース
大量のデータを格納したい場合は、データベースを使うと良い場合があります(拙者は余り詳しくありませんが)。 ファイルに出力するのに比べて、データベースの準備等々は少々手間ですが。 データベース接続のためのプロパティが幾つか必要です。
プロパティ名 | 設定内容 | 取り得る値 |
---|---|---|
driver-class | ドライバークラスのクラス名 | 文字列 |
database-url | データベースの URL | 文字列 |
table-name | データベースのテーブル名 | 文字列 |
user | ユーザー名 | 文字列 |
password | パスワード | 文字列 |
overwrite | ファイルを上書きするかどうか | true, false |
パスワードをシミュレーション設計図に直接書き込むのは、セキュリティ上よろしくないので、シミュレーション実行時に入力を求めるように実装した方が良さそうですね。 また、driver-class, database-url, user は <output> 要素に書き込むと可読性を落とすので、別の設定方法を考えましょう(この方法でも設定できるようにはしておきますが)。
GUI
シミュレーション結果を、グラフィカルに結果を見られるようにできると非常によいかと思います。 Java で GUI を作るとなると、やはりデフォルトで組み込まれている Swing を使うのが良いでしょう。 ただし、物理系や観測量をモデル化するクラスの開発と同時に行うには、Eclipse 上で表示できるようにした方がよいので、SWT でも書いた方が良さそうでもあります*1。 どちらにしろ、数値の表示で必要なグラフ類を一から書くのは無駄なので、適当なライブラリを探しましょう。
Eclipse 上では、BIRT (Business Intelligence and Reporting Tools) を使うのが妥当なところでしょう。 JFreeChart なんかもいいかも。