前回は反復シミュレーションを表す IterativeSimulator クラスのインスタンスからシミュレーションを実行する方法を見ましたが、物理シミュレーションを行う際に労力を使うのはシミュレーションの作成、Groops で言うなら IterativeSimulator のインスタンス生成の方でしょう*1。 Groops ではこの労力を軽減するのが1つの目的です。
例えば(極端な例ですが)、10回の反復を行うシミュレーションをした後、反復回数を100回にして同じシミュレーションをしたいなぁと思ったときに、ソースコードを書き換えて、コンパイルして、実行する・・・なんてことはしたくないですよね。 少なくとも「オブジェクト指向」とはほど遠いものになってしまいます。 なので、Groops では反復シミュレーションを構成するコンポーネントを予め用意しておき、シミュレーションをしたい人がそれらのコンポーネントの構成と設定を簡単に記述できるようにします。 まぁ早い話が、(理想も込めて言えば)「Groops では反復シミュレーションの DSL (Domain-specific Language) を定義してやろう!」ってことです。
この目的のためにまず必要なのが、反復シミュレーション (IterativeSimulator) を構成するコンポーネントの特定です。 で、ドメイン分析をやればいいんでしょうが、あんまりあれこれ考えてても中毒になりそうなので、とりあえず Groops では以下のようなコンポーネントを考えることにします*2:
- 反復シミュレーション (IterativeSimulator) は
- 1つの物理系 (PhysicalSystem) を持つ
- 0個以上の初期条件 (InitialConditions)を持つ
- 0個以上の物理量(観測可能量 Observable)のセットを持つ
- 1つの反復条件 (IterationCondition) を持つ
- 0個以上のデータ出力 (DataOutputter) を持つ
物理量(観測可能量)というのはちょっと唐突かも知れませんが、物理系が状態として持っている変数と出力したいデータとが必ずしも一致するとは限らないので、その間を埋めるために導入しています*3。 次回以降にそれぞれをもう少し詳しく見ていく予定。
Groovy for Domain-specific Languages
- 作者: Fergal Dearle
- 出版社/メーカー: Packt Publishing
- 発売日: 2010/05/30
- メディア: ペーパーバック
- この商品を含むブログ (8件) を見る