見出し画像

【アニメーション版】プログラミング的に答えてみる〜「数学ガールの秘密ノート/確率の冒険」研究問題2-3

数学ガール

結城浩先生の「数学ガールの秘密ノート 確率の冒険」を読んで、巻末の「研究問題」についてあれこれ考えています。

前回は、研究問題2-3について、わりと真正面からの回答と、プログラミング的に考えた、ちょっと横からの回答について書きました。今回は、Javascreipt+p5jsでの実装についてご紹介します。
前回の記事は

研究問題2-3をプログラミング的に考える

研究問題2-3は、こんな問題でした。

100人のメンバーがいます。1枚の「当たり」を含む100枚のくじから1人1枚ずつ順番に引いていきます。引いたくじは戻しません。早い順番で引くのと遅い順番で引くのとでは「当たり」になる確率は異なるでしょうか。

同書より

この問題を、プログラミング的に考えた回答について、振り返ります。
まず、くじを用意します。簡単のために、10本のくじにして、10本が区別できるように1〜9の番号をつけます。当たりくじは「X」で表します。
 ◆用意したくじ【1,2,3,4,5,6,7,8,9,X】
どれが当たりくじかわからないように、混ぜます。プログラミング的には、ランダムに並べ替える操作です。たとえば、
 ◆混ぜたくじ【3,5,1,7,X,8,9,2,4,6】
これを、10人の人にひとり1本ずつ、好きなのを引いてもらいます。引いてもらったくじを、左から並べてみましょう。
 ◆引かれたくじ【8,1,5,9,6,3,X,4,2,7】
当たりくじを引いたのは7番目の人でしたね。残りの3人は、ハズレくじしか残っていないので引く必要がないのですが、わかりやすさのために書いてあります。
ところで、「10本が区別できるように」番号をつけてきました。なぜかというと、くじを「混ぜた」ことや、10人がそれぞれ「好きなくじを引いた」ことがわかるようにするためです。
が、1〜9のくじは全てハズレですから、本来区別する意味はありません。ハズレを「0」、当たりを「X」として書き直すと、次のようになります。
 ◆用意したくじ【1,2,3,4,5,6,7,8,9,X】→⦅0,0,0,0,0,0,0,0,0,X⦆
 ◆混ぜたくじ【3,5,1,7,X,8,9,2,4,6】→⦅0,0,0,0,X,0,0,0,0,0⦆
 ◆引かれたくじ【8,1,5,9,6,3,X,4,2,7】→⦅0,0,0,0,0,0,X,0,0,0⦆
3つのくじで異なっているのは、当たりくじである「X」の場所だけで、本質的な違いは何もありません。であるなら、最初にくじを用意した段階で、ランダムに当たりくじ(X)を配置し、それを「このような順でくじが引かれたのだ」と解釈しても問題ないはずです。以下のシミュレーションページでは、このような考えに基づいてプログラミングしています。

シミュレーションページ

では、シミュレーションをしてみましょう。

まず、いつものように、何も考えずに「実行」をクリックしてみましょう。はい、こんな画面になります。

シミュレーションの様子(例)

グレーの円と黄色の円が並んでいるところは、くじ引きをしているところです。一番上の行(31回目)では、1人目から3人目がハズレで、4人目が当たりを引いたことを示しています。2行目は5人目、3行目は2人目ですね。4行目(34回目)はまだ黄色い円が表示されていませんから、まだ当たりが出ていない状態です。
その下に、うすく表示されているのはすでに終了したくじ引きです。一番下は30回目で、15人目で当たりが出たことがわかります。
さらに下には、棒グラフが表示されています。これまでに、何番目の人が何回当たりくじを引いたかを表示しています。現在一番多いのは15人目で、5回くらいでしょうか? 最終的には下の画像のようになりました。

上のシミュレーションの最終結果

設定を変えてみる

やってみていただくとわかりますが、くじ引きの結果を一人ずつ表示しているので、けっこう時間がかかります。ですから、「ああ、こういうふうに表示されるんだな」ということがわかったら、自由に設定を変えて試してください。

くじの本数を変える

初期設定では、くじは20本です。50本まで増やすことができます。プログラミング的には、100本だって200本だってできるのですが、あまり多いと画面表示が見づらくなるので、最大50本にしています。

実験回数を変える

初期設定では50になっています。設定された本数のくじを用意して、当たりが出るまでくじ引きをする、というのを1回の実験と考えて、50回繰り返すのです。上に示した結果を見ていただくとわかりますが、けっこう当たり回数はばらつきます。前回の記事にも書いたように、この問題は「当たりくじを何番目におくか」という問題と同じですから、どの順番で引いても当たりを引く確率は同じで、離散一様分布になるはずです。50回の実験では少なすぎて、ばらつきが気になってしまいます。
実験回数は最大5000回まで増やせますが、増やして実行する前に、ちょっと待ってください!

「途中経過を表示しない」オプションをONに!

実験回数を増やす時には、「途中経過を表示しない」のチェックボックスをONにすることをお勧めします。これをONにして実行すると、円をひとつずつ表示するのではなく、くじ引きの結果(1行分)を一度に表示します。待ち時間が大幅に短くなります。それでも、1000回の実験には35秒ほど、5000回の実験には3分ほどかかります。(実行環境に多少依存します)

5000回シミュレーションの結果

5000回シミュレーションの結果(例)

くじ50本、実験回数5000回で実行したところ、上の画像のようになりました。ばらつきはあるものの、「どの順番が明らかに当たりを引きやすい」ということはなく、おおむねどの順番で引いても、同じくらいの確率で当たりを引くことができるようだ、とわかります。

人生は一度きり

ただし、だからといって、あなたが明日引くかもしれない、あなたの人生に重要な意味を持つくじについて、「どの順番でも同じだよ〜ん」などと軽いことを言うつもりはありません。確率の問題は、何千回も、何万回もシミュレーションをして考えることができますが、人生は一度きり。どうぞ、慎重なご判断を。

とはいえ、こうした確率の問題を考えている時に、「え〜、当たったらどうしようかなあ、美味しい物食べに行こうかなあ〜」などと、人生の問題に置き換えてしまうと、「何番目に引いても当たりをひく確率は変わりません」という回答に対して「うっそ〜!」とか言えてしまいそうです。数学の問題は数学の問題。人生の問題は人生の問題。きちんと区別して考えましょ。