※解説修正情報※
2013-03-13:乱数の偏りについてのRandom<750のこと削除
2013-03-10:乱数の偏りについての記述・再度
2013-03-09:乱数の偏りについての記述


■Random【乱数】

▼概要
ランダムな数値を返す。

▼情報・書式
Random ;Int型
  • 0~999の整数のどれかを無作為に返す。
  • フレームごと・記述ごとにその都度ランダムな数値を返す。
    • 「Random=0」と「Random=Random」は計算上1/1000の確率で同じ。


■Lv1-記述例・補足・注意点

記述例
[State 191, random intro]
Type = ChangeState
Trigger1 = !Time && Random < 200
Value = 194
  • 1000分の200の確率で194へChangeStateを行う。

補足
  • 基本的に「Random < xxx」といった方法で使う。
    • 「Random < 500」は毎フレーム50%。
  • 「( Random % 2 ) = 0」といった記述もある。%2=0で、1/2。
    • 上書き無しなら(Random%5)=0→(Random%4)=0→(Random%3)=0→(Random%2)=0→1
      という確率記述で5個全てを約1/5の確率にできる。
    • 上書き有りの場合は1→(Random%2)=0→(Random%3)=0の順で良い、はず。

注意点
  • Randomは記述毎で個別に乱数を返すため、
    ランダムで処理の分岐させたい場合はVarに代入したりする必要がある。
    • 一律Random<500で処理を切り替えようとしようものなら、
      全てごちゃごちゃに処理され、おかしなことになる。
    • 上記記述例同様、条件でChangeStateするなり、VarSetをしてVar()で対応するなりが必要。
  • 確率の条件式は、毎フレーム確率を判定するため長時間に渡って考えると確率は上がる。
    • 「Random < 500」は毎フレーム50%だが10F中1回でも当たればいいなら確率は99.9%に達する。
      • 50%→50%+残りの1/2で75%→75%+残りの1/2で87.5%→
        →+残りの1/2で93.75%→96.875%→…中略→99.90234…%
    • 「Random < 100」でも毎フレーム10%なので、10F中1回でもいいならなら約65%程度の確率になる。
偏り
  • 0~999の数値は、無視できる程度ではあるが偏りが存在する。
  • それぞれの数値が出る確率は0.1%だが、0.1007...%と0.0976...%で分かれているとの報告。
    • 分岐点は「768前後」(おそらく、767以下:768以上の分岐?)
  • とはいえ、0.00X%程度の誤差であるため気にする必要はないかと。
  • 一応( Random % 100 )や( Random % 10 )などで使う数値を減らせばと偏りは限りなく少なくなる。
  • 偏りの原因
    • 乱数は基本15bit管理?で「0~32767」の数値から0~999の数値を作っているみたい。
    • 15bit最大値を1000で割った余り下三桁、767までが僅かに確率が高くなっているみたい?
    • もしかしたら:マイナス含む16bitでマイナス値反転処理での処理かも
  • 数式(※Google電卓推奨):推測する確率の偏り(16bitで反転含む場合も大差無し?)
    • ( (1/( 2**15 -1 ) ) * 32 ) =0.0009765923 : 1/32767 * (32)の数値(1000で割れる最大整数)
    • ( (1/( 2**15 -1 ) ) * 33 ) =0.00100711081 : 1/32767 * (32+1)の数値(+1は下三桁767の分)
    • ( ( (1/( 2**15 -1) ) * 33 )*(767) + ( (1/( 2**15-1 ) ) * 32 )*(1000-767) =1

AI制作時の注意点
  • Randomの確率でAIの動作を制限する際はRandom<100でも全体がその程度なら確率はそこまで低くない。
    • 「Random < 500」以上の確率であればほぼ確実と思って良い程度。
    • Random<100の行動でも5個書いてあれば、2F中に行動する確率は約65%。10Fもあればほぼ確実。
  • ただ猶予の短いコンボなどであれば、そこまで確率は上がらない。


最終更新:2017年10月02日 22:35