倭算数理研究所

科学・数学・学習関連の記事を、「倭マン日記」とは別に書いていくのだ!

反復シミュレーションを構成するコンポーネント

前回は反復シミュレーションを表す 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

Groovy for Domain-specific Languages

*1:結果の解析の方が大切カモ知れませんが。

*2:まずいことが起きたらブログ更新が止まると思います ^ ^;)

*3:このモデルは量子力学の枠組みを援用しています。 物理系では例えば波動関数の各点での振幅の値を保持し、物理量ではそれらの値からエネルギーの期待値などを計算して出力します。 もちろんシミュレーションなら波動関数の値自体をデータとして出力しても構いませんが。