乱数について面白い話(一般人向け解説)

乱数とは

乱数とは「ランダムな数」を指します。
例えば、「194573165」のような羅列です。
今日はこれについて話します。
一般人向けに面白く、分かりやすく乱数の過去と未来を説明しますね。

きっかけは最近マイクラ風のゲームを作っていて、乱数調整していて気づいたことです。

乱数なんて何の役に立つの?

皆さんゲームやりますよね?
例えば「荒野行動」や「ツムツム」やりますよね?
荒野行動だと、どんな銃がどこに落ちているのかってランダムですよね?
ツムツムだと、どんなキャラの玉が降りてくるかはランダムですよね?

こういうゲームに乱数は使用されます。

また、マイナーですが、ランダム生成される「パスワード」等がありますね。

それがどうした?

ここで本題です。
実は、乱数って生成できないんですよ(爆)
いや、これすごく大問題なんです。

乱数が無ければ、ゲームのクオリティが下がります。
例えば、レアアイテムが大量発生したり、
超強敵が大量発生したりと……。
わかりやすいのは、ガチャの10連の偏りですかね。
また、推測されやすいワンタイムパスワード生成になってしまったり…ということが起きます。
ひどい場合だと、意図して宝くじなんかも当てられるかもしれませんね。
特に、「課金ガチャ」「宝くじ」は確率に「法規制」が入っているので乱数のロジックを間違えるとその企業が損害を出す可能性もあります。

じゃあどうやって乱数は作られているの?

乱数というのは「線形合同法」や「メルセンヌツイスタ」という方法などで生成されます。
しかし、これらは「擬似乱数」と言って、
実際に真のランダムではなく、「ランダムに見えるだけ」です。
これらにはれっきとしたアルゴリズムが存在します。
また、乱数はビット数によっても精度が変わります。
例えば8bit(1バイト)であれば
2の8乗(256)の数字を表現出来ます。
これがもし16bitだと2の8乗(約5.25万)の数字を表現できます。

ビットとか分かんねーよ!!

8bitで1バイトになります。

例えば荒野行動で銃を3発打つとランダムに銃弾が飛んだりします。この時、8bitで乱数表現されているなら、
8×3で24bitつまり3バイト消費していることになります。(メモリを圧迫します)
少ないと感じるかもしれませんがこれが100人で一斉に乱射したとしたら……そして、100人が互いにデータを送り合うので……
かなりのメモリを圧迫するでしょう。
これがもし乱数が64bit(8バイト)で生成されたなら、8倍必要になります。
(荒野行動の乱数は64bitだと思います。多分)

これが人の場合

人間が行うジャンケンってありますよね?
あれはヒトが意図して選択を決断します。
ここで生まれるのは高級な乱数です。
これは人間の脳細胞が1億あるとします。
この時点でbitは1億つまり2の1億乗のパターンを格納出来ます。

つまり、何が問題なのか?

人と構造の違うコンピュータ(マシン)は
少ないbit数で不規則な乱数を生成されることを強要されているのに、どうしても規則的な数しか作れないのです。

そして、何より問題なのが全世界の学者たちが研究しているのにも関わらず、難解で質の高い擬似乱数が完成していないことです。

1996年にある日本人が「メルセンヌツイスタ」を発明して巷で有名になりました。
これは今のところ世界で最も質の高い擬似乱数のアルゴリズムだと言われています。

しかし、ほとんどのゲームは「線形合同法」だったりが使われています。
それによって規則性が生まれやすくなっています。
(必ず交互であったり、必ず傾きが発生したりする)

そして、ここが1番面白い話

実はAIの開発を日本でも行われようとしています。
ここでまさか詰まるとは思わなかったでしょう。
「自動運転」「自動歩行」などのプログラムは
まさに、乱数がかかせません。

駅で人混みを歩く時、正面から相手が来て、あなたは右へ行こうとしますが、相手も同じ方向に行こうとして辞めたり…
このやり取り自体に規則性が現れてしまうと
一生通せんぼをするやばいAIが完成しますwww
そして、これがもし「自動運転」などで行われると大変です。

これを解決するべく今最も注目されているのが
「幼児」「赤ちゃん」だと言われています。
幼児に乱数の羅列を書かせると「1111111」のような数字を羅列します。
これらは一見、規則的じゃないか!
と思うかもしれませんが、この羅列は人が擬似乱数として作った技術の中ではなかなかお目にかかれません。
大人は無意識に「連続しない数字がランダム」と感じてしまうそうです。
本当は幼児が書くような数字こそランダムである。
ということが、AI業界でも知見が広がりました。

AIに、限ったことでは無いですが、乱数は大事だと言う話でした。
ありがとうございました。(´ω`)

P.S.
冒頭の例としての乱数は僕が適当に打ったつもりでしたが、やはり「11111」とは書きませんでしたね。
あとから気づきました。
大人だとバレてしまいますねw

この記事が気に入ったらサポートをしてみませんか?