背景
乱数を固定するときシード値を設定するが、そのシード値にしばしば42を用いる。
しかし、なぜ42を用いるのか、が気になったので、調べてみた。
pythonで乱数を固定する例
import numpy as np
np.random.seed(42)
# 一回目
print(np.random.randint(0, 1000, 10))
# -> [102 435 860 270 106 71 700 20 614 121]
# 二回目
np.random.seed(42)
print(np.random.randint(0, 1000, 10))
# -> [102 435 860 270 106 71 700 20 614 121]
ちなみに、42以外にも、1234や2021(西暦)も定番である。
#乱数とは
乱数とは、「ランダムに出力された数字」のことである。
例えば、ポケモンのゲームでは、同じ相手に同じ技を繰り出しても、毎回同じダメージになるとは限らない。
これは乱数を用いているからである。
ダメージ数 = {(攻撃側のLv × 2 ÷ 5+2) × わざの威力 × 攻撃or特攻の値 ÷ 防御or特防の値 ÷ 50+2}× (85~100) ÷ 100
で表されるらしいが、(85~100)の項が乱数に相当する。
85から100の間をランダムな値を取ることで、ダメージがランダムに変動する。
この乱数によるダメージの変動が、ガチャのようなドキドキ感を演出するのである。
このように、乱数は様々な場面で応用されている。
#シード値とは
しかし、乱数を固定したい場合もある。
例えば機械学習モデルを作成し、精度を比較するとき。
様々なモデルを作成し、その精度を比較するとき、乱数によって精度がブレてしまっては比較ができない。
そこで乱数を固定することで、横比較を可能にする。
その固定に用いるのが、シード(seed)値である。
シード値を一定の値に固定することで、何回実施しても同じ乱数が出力されるようになり、統制が可能となる。
#乱数のシード値が42の理由
さて、本題である。
シード値で頻出の数字:42は、ダグラス・アダムスのSF小説「銀河ヒッチハイク・ガイド」、から来ていると言われている。
実はこの小説、全世界で約1,600万部が売れている、らしい。
小説の終盤で、登場人物FookとLunkwillの子孫が、スーパーコンピュータDeep Thoughtと会話する、以下のシーンがある。
[Seven and a half million years later…. Fook and Lunkwill are long gone, but their descendants continue what they started]
“All right,” said Deep Thought. “The Answer to the Great Question…”
“Yes..!”
“Of Life, the Universe and Everything…” said Deep Thought.
“Yes…!”
“Is…” said Deep Thought, and paused.
“Yes…!”
“Is…”
“Yes…!!!…?”
“Forty-two,” said Deep Thought, with infinite majesty and calm.”
―Douglas Adams, The Hitchhiker’s Guide to the Galaxy
和訳すると以下のようになる(筆者拙訳注意)
[750万年後...。FookとLunkwillが亡くなってから長いが、彼らの子孫は、彼らが始めたことを続けていた。]
『わかった。』 Deep Thought は言った。
『その偉大なる質問への答えは...』
「やったぞ...」
『その生命・宇宙・森羅万象に対する偉大なる質問への答えは...』
「よし!」
『答えは...』Deep Thoughtは続けた。
「なんだ?」
「答えは!?」
『42』と、 Deep Thoughtは深い威厳と落ち着きで答えた。
参考:https://medium.com/geekculture/the-story-behind-random-seed-42-in-machine-learning-b838c4ac290a
このシーンから、42という数字がミームとなっているのである。
YouTubeに映画版のそのシーンがありました
(Deep Thoughtの見た目と声が想像と違う...)
#悪魔の数字42
ちなみに、なぜ42という数字がこの小説で用いられたかは、ファンから多くの憶測が出ていた。
- 42を2進数で表すと101010になるから。
- 光は水面で42度屈折することで虹ができるから。
- 光は陽子の直径を横切るのに$10^{42}$秒必要だから。
- ソフトカバー本の平均的な行数が42だから。
- 本に度々出てくるスポーツ、クリケットのルール数だから。
しかし、作者は後日、42の理由を明かしている。
曰く、
“It was a joke. It had to be a number, an ordinary, smallish number, and I chose that one. I sat at my desk, stared into the garden and thought ‘42 will do!’ ”
和訳すると以下のようになる(筆者拙訳注意)
ただの冗談だった。なんの変哲もない、小さい数字である必要があった。机に座り、庭を眺めていたら浮かんできたんだ。「42だ!」と。
なんやそれ。