コンピューターは万能に見えますが実はサイコロを振れません!
一見、万能に思えるコンピューターは、実はあらかじめ教えられた計算しかできません。「サイコロ」を振ることができないのです。
しかし、世の中のコンピューターは、さまざまな場面で「サイコロ」を転がさなければなりません。
コンピューターゲームでは、対戦相手への攻撃が当たったかどうかなど、プレイヤーがとった行動の結果判定に必要です。
パチンコやパチスロでは、当たりはずれを判断するために必要ですが、お金が絡むため、より慎重でなければなりません。
スポンサーリンク
ネットショッピングなどで使われるクレジット決済でも、暗号の強度を保つために「サイコロ」を振る必要があるのです。
実際には、コンピューターが上記のように、サイコロを振っているかのような使われ方をしています。コンピューターは、どのようにしてサイコロを振っているのでしょうか?
そもそも、なぜコンピューターにサイコロを振らせる必要があるのか?
サイコロを振った結果の数を「乱数」と呼びます。サイコロを一度や二度振っただけでは、あなたが適当に選んで書き並べた数と、そう大きな違いはありません。
しかし、百回や二百回という回数でサイコロを振った場合、この「乱数」は適度にバラついてくれるのです。1から6の出目が「ほぼ均等」に、バラつきます。
完全な均等ではなく、「1の出目が4回連続」で出たりと、適度にかたよることもあるため、人の手では作り出すことができません。このような特徴をもつ乱数を、コンピュータで作り出す必要が出てきたのは、まさにコンピューターが発明された当時です。
第二次世界大戦中に、敵国が使っている暗号の解読や、ミサイルの弾道計算のため、コンピューターは開発されました。その中でも、ミサイルの弾道などの物理演算については、その計算に「ごく自然なぶれ」が、大量に必要でした。
乱数を生み出すアルゴリズムとは?
コンピューターは、与えられた計算を淡々とこなします。5ケタ×5ケタの計算を命じても、すぐに計算してくれます。しかし一方で、「1から6のうち好きな数を選べ」と命令しても、答えることはできません。
そのため、最初期には「サイコロを振った結果」をコンピューターに打ち込む、という方法が行われていました。しかし、一度や二度ならばともかく、何百何千とこんなことをやっていたのでは、日が暮れてしまうでしょう。
コンピューターは高速で計算する装置であるのに、それを活かせないという問題が発生していたのです。
それを解決するよう試みたのが、現代のコンピューターの父でもあるジョン・フォン・ノイマンです。現在あるコンピューターのほとんどは「ノイマン型コンピューター」と呼ばれています。
参考記事:ウィキペディア:ジョン・フォン・ノイマン
ジョン・フォン・ノイマンは、コンピューターに擬似的にサイコロを振らせ、「乱数」を生み出す『擬似乱数生成アルゴリズム』を考えだしました。それ以降、コンピューターの発展とともに、より複雑な計算で、自然な乱数を作り出すことに成功しています。
スポンサーリンク
簡単な乱数のつくりかた
平方採中法
上記にあるジョン・フォン・ノイマンが1946年に考案した「平方採中法」とよばれる乱数生成のアルゴリズムであり、とても単純な計算で、乱数をつぎつぎに生み出します。
ある数字を2乗し、その数列の「まん中」から拾った数字を、サイコロを振った結果として扱います。サイコロを振った結果を再び2乗すると、新しく次の乱数が得られます。
これを何度も繰り返していくと、いずれ最初の数字に戻り、ループします。これは「周期」とよばれ、可能なかぎり長いほうが、生成アルゴリズムとして優れていると言えます。
実は、この「平方採中法」は、周期はそう長くないため、今はほとんど使われることはありません。これより紹介する方法に取って代わられています。
線形合同法
あらかじめ、三つの数字A、B、Mを決めておきます。
ある数字にAを掛け、Bを足します。その計算結果をMで割ると、その余りがサイコロの結果となります。このサイコロの結果を、同じく計算すると、再びあらたな結果を作り出すことができます。
コンピューターのプログラム言語で「サイコロを振った結果を示せ」と命令した場合、その多くはこの方法で、瞬時にサイコロを振ってくれます。
ただ、この「線形合同法」には、多くの弱点が存在しています。しかしその弱点を克服する方法もよく研究されているため、総合的にみると、非常に使いやすい乱数と言えます。
以上、二つの乱数アルゴリズムは、単純で高速な計算ができるため、使いやすいものですが、実は古典的な方法に分類されています。
これら以外にも、より難解な計算で、自然な乱数を作ることができる「メルセンヌ・ツイスタ」などがあり、それぞれの用途にあわせた乱数が、さまざまな場面で使われています。
高度な乱数アルゴリズムは、特に「暗号化」の分野で使われ、インターネットでショッピングを行うときなどに重宝されています。
byヒビタカ
スポンサーリンク