倭マン's BLOG

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

反復シミュレーション

「物理シミュレーション・フレームワーク」とは言いつつ、あまり大風呂敷を広げても途中で挫折してしまいそうなので、シミュレーションのタイプをある程度限定することにします。対象とするタイプのシミュレーションは、ある物理系に対して「状態の更新」と「観測量の出力」を交互に繰り返すようなものです。反復シミュレーションと言えばいいでしょうか。まぁ、大抵のシミュレーションはこういったタイプのものなので、大して窮屈な制限にはならないでしょう。

以下、シミュレーションと言えばこのタイプのシミュレーションを指すことにします。では、シミュレーション・プログラムとはどんなものか、もう少し具体的に考えてみましょう。

まず必要なのは、シミュレーション実行中に値を保持しておくための変数(フィールド)*1です。物理的に言えば、これは考えている系の状態を指定するものとなります。よってこれらの変数をまとめて状態と呼ぶことしましょう。

次に、シミュレーション・プログラム内で行われる手順(基本フロー)を定めたメソッド*2が必要です。メソッド内で行われる手続きは以下の通り:

  1. 状態を初期化する。
  2. (初期)状態を出力する。
  3. 反復条件が満たされている間、以下を繰り返す:
    1. 状態を更新する。
    2. 状態から観測量を計算する。
    3. 観測量を出力する。
  4. (終)状態を出力する。

状態の出力はすべてのタイミングでする必要はありません。

シミュレーション・プログラムの大まかな全体像はこんな感じでしょう。「メソッド内で行われる手続き」と書いた通り、これは手続き型の“ベタに書いた”プログラムです。次回以降で、ドメイン分析(っぽいこと)をして、これをもう少し「オブジェクト指向」っぽくしてやろうと思います。

*1:プログラミング言語によっていろいろな呼び方があると思いますが、ここでは基本的に Java で用いる用語を使います。

*2:Java 以外の言語ではサブルーチン、関数などと呼ばれるものにあたります。