« 2007年10月 | メイン | 2008年1月 »

ランダムに処理を行わせたい・一定確率で処理を行わせたい

ランダムに処理を行わせたり、一定確率で動作を行わせるには
1つの数値変数を使って乱数をmod演算(割り算した余りを算出します)することで実現できます。

たとえば、10通りのランダム処理、1つあたりの発生確率が10% である処理を行わせるには
下の画像のようなコマンドを構成します。(動作処理用の数値変数「ランダム」を用意しています) ランダム動作
(ランダム動作3以降は省略しています)

具体的な処理としては
数値変数の操作「(用意した変数)」 ← 「%@乱数%」 mod 「(ランダム動作の数)」
とします。
たとえば、ランダムに1~20という画像を表示したいとすれば、「%@乱数%」 mod 20となり、
その後のランダム動作において「画像を表示する」コマンドを使用して各々の数字を表示するようにします。
乱数を使用することでほぼ等確率でそれぞれのランダム処理を行うことができます。

mod演算については、式を(ある数) mod Yとすると0~Y-1のY通りの結果が得られます
例:何かの数を3で割ったとすると、余りは0(割り切れる),1,2の3通りになりますよね 

よって、
数値変数の操作「(用意した変数)」 ← 「%@乱数%」 mod 「(ランダム動作の数)」
の後に
「条件分岐 もし・・・ならば」コマンドを使用して、結果の数の分だけ条件分岐させます。
mod YならY通りの条件分岐をさせます。
「(用意した変数)」の値が0~(ランダム動作の数-1)の場合について条件分岐させてください。
注意:0を含むので modでのランダム動作の数から1を引いた数です

条件分岐した先でランダム動作を行わせれば、それぞれのランダム動作を等確率で発生させることが出来ます。
(それぞれのランダム動作の内容が長くなるようであればサブルーチンまたはページ移動を行った方が良いでしょう)


等確率ではない場合


等確率でない場合は、その確率に応じてmod演算を変更します。
例えば、1%単位での発生確率であるのならば、mod 100とします。
例:動作1は27%、動作2は47%、動作3は20%,動作4は6%だとすると、

もしも (用意した変数)<27ならば←0+27=27、1多いので≦ではなく<
動作1の内容
そうでなければ
もしも(用意した変数)<74ならば←27+47=74
動作2の内容
そうでなければ
もしも(用意した変数)<94ならば←27+47+20=94
動作3の内容
そうでなければ←上に全て該当しなければ95以上99以下(つまり6通り)なので
動作4の内容
ここまで
ここまで
ここまで


2007年11月15日 | 0402変数処理(システムサンプル) | コメント(2) | トラックバックする