当選率を設定するには
今回、くじを4回引いたら1回は当たるように設定するにはどうすればよいかを検証しました。籤(くじ)をコンピュータで引くとき、一様乱数を使うことは多く知られています。乱数にもいろいろありそのなかの一様乱数とは、『ある区間において([0,1]など)数値が同じ確率で出現する、 確率分布に従う乱数』をいいます。
15人からなるグループで、掃除当番や鍵当番を乱数で決めるとき、一様乱数「Math.random()」を使います。この時、発生した乱数値に15を掛け小数点以下を切り捨て整数化し、0から始まる整理番号(最大値14)に対応させる方法があります。
コンピュータで当選者を決める場合、決定方法を公開し作為がないことを明示しなければなりません。そこで言語処理系が用意した一様乱数が信頼に値するかどうかを検証する簡単な方法を以下に公開します。
検証の一例
以下のJavaScriptプログラミングコードは、0から1未満の一様乱数を発生するMath.random()を利用しています。乱数を1000回発生し0.25未満の乱数値が現れた回数をカウントして表示しています。
乱数関数が一様に分布する値を返してくれたら、カウント累計値は250近辺であることが期待されます。サイコロの目の出現で経験できますが、1から6の目は1/6ずつを想定できますが検査回数を多くしないと平均化は困難です。検査回数を1000, 10000, 100000, 1000000, 10000000の5種類を採用しました。
プログラミングコード
<html> <head> <meta charset="utf-8" /> </head> <script type="text/javascript"> var NUM=1000; for(j=0; j<5; ++j){ var count=0; for(var i=0; i<NUM; ++i){ var rv=Math.random(); if(rv<0.25) ++count; } console.log(j, NUM, "Count="+count, count/NUM, "Average="+count*100/NUM+"%"); NUM *= 10; } </script> </html>
実演
考察
実演結果からわかるように検査回数が大きくなるほどAverageは25%に近づきます。Math.randome()から得られる一様乱数値が0.25未満をもって当選とする方式はおおむね大禍ないように思われます。