今までは、物理シミュレーションに必要な部品、もう少し堅く言うと、物理シミュレーションを実現する Simulator オブジェクトを構築するための部品を個別に考えてきました。
今回はそれらの部品を構築するための設定ファイルを考えます。 以降では、このファイルをシミュレーション設計図(もしくはシミュレーション・スキーマ Simulation Schema)と呼ぶことにします。
今までで部品として定義したインターフェースは
PhysicalSystem, ObservableSet, IterationCondition, DataOutputter
です。 で、今回はまた何も観測せず、何も出力しないシミュレーションを考えましょう。 つまり ObservableSet, DataOutputter は今回は考えません。
[其ノ壱]. まず、部品となる物理系(PhysicalSystem)と反復条件(IterationCondition)の実装を考えましょう。 物理系のサンプルは1次元のランダム・ウォーク、反復条件のサンプルは10回更新を繰り返すってものにします:
import java.util.Properties; import java.util.Random; public class RandomWalk1D implements PhysicalSystem{ /** この物理系に設定できる初期パラメータの名前。 初期位置。 */ public static final String INITIAL_POSITION = "Initial Position"; private final Random random = new Random(); int position; /** 初期位置を設定する。 */ public void initialize(final Properties initParams) { if(initParams.containsKey(INITIAL_POSITION)){ final String ip = initParams.getProperty(INITIAL_POSITION); this.position = Integer.parseInt(ip).intValue(); }else{ this.position = 0; } } /** 現在の位置をランダムに(絶対値1だけ)更新する。 */ public void evolveState() { if(this.random.nextBoolean()) this.position++; else this.position--; } }
public class CountIterationCondition implements IterationCondition{ private int rest; private final int count = 10; public void initialize(){ this.rest = this.count; } public boolean continueIteration() { return this.rest > 0; } public void continued() { this.rest--; } public void stopped() {} }
ローカル変数に final 宣言が付いている箇所がありますが、詳しくは『Java魂―プログラミングを極める匠の技』第2章を参照のこと。
[其ノ弐]. さて次に必要になるのは、これらの部品を使って、Simulator オブジェクトを組み立てる“設計図”です。これを以下のように書くことにしましょう(XML ファイルで)。
<?xml version="1.0" encoding="UTF-8"?> <simulation-schema xmlns="http://xmlns.org.waman/simulation/0.1"> <system class="RandomWalk1D"/> <init-params> <param name="Initial Position">100</param> </init-params> <iteration> <iteration-condition class="CountIterationCondition"/> </iteration> </simulation-schema>
注意点を列挙しておくと、
- ルート要素は simulation-schema。
- “http://xmlns.org.waman/simulation/0.1”はシミュレーション設計図の名前空間。
- system 要素で物理系を設定する(class 属性で PhysicalSystem クラス名を指定)。
- init-param 要素下の param 要素で物理系の初期化に必要なパラメータを指定。 param 要素の name 属性でパラメータ名(PhysicalSystem#initialize() 内で使用するもの)を、子テキストでパラメータ値を指定。
- iteration-condition 要素で反復条件を設定する(class 属性で IterationCondition クラス名を指定)。
- iteration 要素はそのうち説明します。
[其ノ参]. 最後に必要になるのは、このファイルを使って、Simulator オブジェクトを生成するファクトリ・クラスです。 これも後日に。
次回は、反復条件で使うものはだいたい決まっているので(決まった回数繰り返すものや、観測量の測定値で繰り返すかどうかを判断するものなど)、もっと楽に指定できるようにします。
- 出版社/メーカー: アイ・ディ・ジー・ジャパン
- 発売日: 2007/06/22
- メディア: 大型本
- 購入: 2人 クリック: 17回
- この商品を含むブログ (27件) を見る