2015年08月

サイト運営者の日々の日記。2015年08月。

09日

人道的乱数

ゲームにおいて当たりをランダムに抽選するシステムに乱数を使うことは一般的な方法である。しかしゲームの要素がいつか抽選に当たることである以上、完全な乱数には問題がある。

例えば0.05の確率で当選する抽選を行うとしよう。これをn回行った時少なくとも1回当選する確率は1-(0.95)^nで、nが100回のときの当選確率は0.994となる。99.4%の確率で当選すると考えればこれはほぼ必中とみなしてよいが、0.6%は100回の試行でも当選しないのである。これを試行する人間が1000人いれば、6人は100回でも当選しない。これは、多くのゲームにおいて100回試行すればほぼ当たる確率を提供する目的にはそぐわない。

そこで各々が100回試行すれば100万人の母集団全体でも当選しない人間が0人あるいは極低確率になるような偏りのある乱数を考えてみよう。

抽選玉方式

当たりをいつまでも引かない確率をなくす方法として、福引などで箱を回転させて当たりと外れの玉をランダムに取り出すものがある。これは箱のなかに予め当たりと外れの玉が決まった数入っていて、少なくとも全ての玉を取り出せば全ての当たりを網羅できることになる。ただし、予め当たりと外れが出る回数が決まっている点が純粋な乱数に劣る。

以下は抽選玉方式のデモである。玉の総数と当たりの数を入力すると、試行毎に抽選を行う。試行を玉の総数回行うと候補がなくなるのでemptyになる。

抽選玉方式デモ
玉の総数(100000以下)
当たり玉の数

重み付け乱数方式

抽選球方式は一度出た乱数が二度と出現しない欠陥があり、特定の抽選では使えても一般的な乱数には向かない。そこで、n個の候補から重みを付けて乱数を発生させる方法を応用して、同じ候補が出現しないようにその候補の確率を減らすことを考えよう。

考え方は簡単である。1〜nまでの候補に出現確率を設定して、一度その候補が選ばれるとその候補の確率を下げていけばよい。これによって相対的に他の候補の出現率が上がっていくことになる。

以下は重み付け乱数方式のデモである。母数と確率低下率を入力する。確率低下倍率はある候補が選ばれた時、その候補の確率にかける倍率で、1のときは通常の乱数になる。0にすると同じ候補が連続して選ばれることはなくなる。試行結果はグラフ表示され、候補が選ばれた回数を棒グラフ、その候補の確率を線グラフにする。確率低下倍率が1の時と0の時で1000試行程度行って比べてみるとよい。

重み付け乱数方式デモ
母数(最大500)
確率低下倍率

rand
出現率
Probability Graph

ページ情報

作成日時
2015/08/09
最終更新日時
2015/08/09
HTML4.01版
y15m08.html
XHTML1.1版
y15m08.xhtml
XML原本
y15m08.xml