完全ランダムの研究

コンピュータが相手のゲームを作成してると
ランダムが必要となります。
そうでないと、絶対勝利などパターンが
限られてしまうからです。
50%の確率で左か右から敵キャラが現れる
程度で済むことも多いですし、
あまりランダムでない方が良かったりします。
例えば10年間に1回、発生するような場合
ゲームが佳境に入る後半5年に起きた方が
面白ければ確率的に10等分しないほうが
良いというような意味です。

ランダムと言われる事象でも、偏りのある
サイコロのように、規則性が残ったり
していることがあります。(例えば、
ランダム・ウォーク=酔歩過程 webより転載)

画像


パスワードのような分野では、規則性の無い
乱数が得られた方が良く、それを突き詰める
ことは学問的にも有用だと思います。
メジャーな方法は、線形合同法ということで
C言語とかの rand()もこれらしいです。

double Uniform( void ){
static int x=10;
int a=1103515245,b=12345,c=2147483647;
x = (a*x + b)&c;

return ((double)x+1.0) / ((double)c+2.0);
}

素数列か!と身構えましたがそうではなく、
mod 計算の漸化式で、ランダムの種を変える
srand(s)は、x = s のようにして、線形合同法の
基本変数を変えるということです。

0.138649
0.861027
0.343186
0.270693
0.515363
0.068193
0.615315
0.842057
0.618142
0.937200

実際に動かしてみました・・・・美しい!

(参考ページ)
http://www.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html#Uniform

しかし、よくよく考えると、srandの種を
規則性なく変える必要があり、乱数と
乱数の種のイタチごっこが続きそうです。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック