倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

出力方法をシミュレーション設計図で指定する 其ノ弐

前回はシミュレーション設計図で出力方法を指定する方法を見ました。 今回は典型的な出力方法を考えてみましょう。

まず、シミュレーション設計図のすべての <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


シミュレーション結果を、グラフィカルに結果を見られるようにできると非常によいかと思います。 JavaGUI を作るとなると、やはりデフォルトで組み込まれている Swing を使うのが良いでしょう。 ただし、物理系や観測量をモデル化するクラスの開発と同時に行うには、Eclipse 上で表示できるようにした方がよいので、SWT でも書いた方が良さそうでもあります*1。 どちらにしろ、数値の表示で必要なグラフ類を一から書くのは無駄なので、適当なライブラリを探しましょう。

Eclipse 上では、BIRT (Business Intelligence and Reporting Tools) を使うのが妥当なところでしょう。 JFreeChart なんかもいいかも。

*1:確か、SWT 上で Swing のコンポーネントを扱えるようになってましたよね・・・