【アニメーション版】プログラミング的に答えてみる〜「数学ガールの秘密ノート/確率の冒険」研究問題2-3
数学ガール
結城浩先生の「数学ガールの秘密ノート 確率の冒険」を読んで、巻末の「研究問題」についてあれこれ考えています。
前回は、研究問題2-3について、わりと真正面からの回答と、プログラミング的に考えた、ちょっと横からの回答について書きました。今回は、Javascreipt+p5jsでの実装についてご紹介します。
前回の記事は
研究問題2-3をプログラミング的に考える
研究問題2-3は、こんな問題でした。
この問題を、プログラミング的に考えた回答について、振り返ります。
まず、くじを用意します。簡単のために、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回シミュレーションの結果
くじ50本、実験回数5000回で実行したところ、上の画像のようになりました。ばらつきはあるものの、「どの順番が明らかに当たりを引きやすい」ということはなく、おおむねどの順番で引いても、同じくらいの確率で当たりを引くことができるようだ、とわかります。
人生は一度きり
ただし、だからといって、あなたが明日引くかもしれない、あなたの人生に重要な意味を持つくじについて、「どの順番でも同じだよ〜ん」などと軽いことを言うつもりはありません。確率の問題は、何千回も、何万回もシミュレーションをして考えることができますが、人生は一度きり。どうぞ、慎重なご判断を。
とはいえ、こうした確率の問題を考えている時に、「え〜、当たったらどうしようかなあ、美味しい物食べに行こうかなあ〜」などと、人生の問題に置き換えてしまうと、「何番目に引いても当たりをひく確率は変わりません」という回答に対して「うっそ〜!」とか言えてしまいそうです。数学の問題は数学の問題。人生の問題は人生の問題。きちんと区別して考えましょ。