前回は反復条件の型を指定して、いろいろな反復条件を手軽に使えるようにしようとしたんでした。 今回は反復条件の型を具体的に考えてみます。
▲1つ注意(訂正)として、前回反復条件に指定できる値のことをパラメータといいましたが、以降ではプロパティと呼びます。 前回の最後の方で、シミュレーション設計図中の iteration-condition 要素の属性名を JavaBeans 風に書くといいましたが、JavaBeans ではこれらをプロパティと呼ぶからです。
単純な反復条件
まずは単純な型から。
count
これは指定回数だけ反復を繰り返すだけの反復条件です。 total プロパティで反復回数を指定します。
<iteration-condition type="count" total="《反復回数》"/>
class
これは自作の Java クラスを使用する反復条件です。 class 属性で自作クラスの名前を指定します。 前回にも言いましたが、type 属性と class 属性はプロパティに含めません。
<iteration-condition type="class" class="《反復条件クラス名》"/>
null
これは反復を行わない反復条件です。 実際にこれを指定することはないでしょう。 シミュレーション設計図の iteration 要素下に iteration-condition 要素が指定されてないときは、null 型が指定された iteration-condition 要素があると見なします。
<iteration-condition type="null"/>
関係演算子による反復条件
次は観測量の値を反復条件に使用する場合です。 その代表的なものが関係演算を用いた条件判定でしょう。 関係演算とは、Java でいう「==, !=, <, <=, >, >=」といった演算です。 それぞれの演算子の説明は省きます。
上記の演算子を iteration-condition 要素の type 属性に書きます。 また、指定できるプロパティは評価に使用する観測量の名前と基準値(bench-mark)です*1。
<iteration-condition type="《演算子》" var="《観測量名》" bench-mark="《基準値》"/>
具体的な例を挙げると、「Position」という名前で、整数値をとる観測量があった場合、
<iteration-condition type="!=" var="Position" bench-mark="10"/>
と書くと「《Positionの値》 != 10」が満たされている間だけ反復を繰り返します。 属性の書かれている順番に関係なく、var 属性で指定される観測量の値が左辺、bench-mark 属性の値が右辺と解釈されます。 細かく言えば、関係演算子は(引数の型によって)以下の2つに分類されます:
関係の種類 | 演算子 | 引数の型 |
---|---|---|
同値関係 | ==, != | 数値もしくはブール値(浮動小数点型は振る舞いは保証できません) |
順序関係 | <, <=, >, >= | 数値 |
▲シミュレーション設計図は XML 形式なので、「<」は「<」と書かなければなりません。 これは少々見難いので、<, <=, >, >= をそれぞれ lt, le, gt, ge と書いても良いことにします。
▲複雑な数式を用いた反復条件の評価は、別途拡張ライブラリなどを作って提供したいと思ってます。 当面、複雑な数式の評価が必要な場合は、自作の Java クラスを作ってください。
その他の反復条件
その他に考えている反復条件には以下のような物があります:
- 論理演算による反復条件
- 一言で言えば not, and, or, xor です。 次回説明予定。
- 観測値の範囲を指定する反復条件
- これは関係演算による反復条件の一種ですが、ある観測量に対して最大値、最小値を指定して、値がその範囲内に入っている場合だけ反復を繰り返します。 これは関係演算と論理演算を組み合わせれば実現できます。
- 相互作用
- 反復を実行するか停止するかを、ユーザの入力によって判断します。 Media Player みたいな感じのスタンドアローン・アプリケーションを作れればなぁ〜
*1:bench-mark は benchMark と書いてもかまいません