じばるどーね!

趣味、思想、妄想、学問、ごった煮ブログ

【実験】~ボールのランダムウォークにおける二項分布検証~ パチンコ玉が落下しやすい位置と三角格子の段数の関係

 こんにちは、「じばるどーね!」のとぼです。「じばるどーね」はごった煮のイタリア語で、このブログはいろいろな関心ごとについて2人のライターがなんでも書いていく闇鍋🍲であることを示しています。とはいえ、あまりに内容がばらばらだと見ずらいと思いますので、20記事位出来たらタグ付やリストを作ろうと思います。

 さて、今回は簡単な確率論の実験をします。三角格子上をランダムウォークによって落下していくボールが最終的にどの位置のスポットに落下しやすいのか、三角格子の段数を変えて比較検証していきたいと思います。

 まあ、要するに、「パチンコ玉が最も落下しやすい位置の特定」です。

  

 

1.ランダムウォークとは?

ランダムウォーク】:

ランダムウォーク英語: random walk)は、次に現れる位置が確率的に無作為(ランダム)に決定される運動である。日本語の別名は乱歩(らんぽ)、酔歩(すいほ)である。グラフなどで視覚的に測定することで観測可能な現象で、このとき運動の様子は一見して不規則なものになる。(by wiki)

 例えば、階段があって1/2の確率で1段上り1/2の確率で1段降りるときの挙動などがランダムウォークです。

 

f:id:tb9810w124816:20180307153325p:plain

  上ったり降りたりフラフラしている酔っ払いみたいなもんです。(日本語の別名の酔歩もこの挙動を例えたものだと思う)

 

 

2. 今回の実験

 今回は、下図のような三角格子のてっぺんからボールを落下させ、格子の杭にぶつかったときボールは1/2の確率で右へ、1/2の確率で左へ転がるといったランダムウォークをするとしたとき、ボールはどのスポット(一番下の透明な筒)により落ちるか、スポットの数は999(真ん中ができるように奇数にした)に固定して、三角格子の段数を変えて検証します。

f:id:tb9810w124816:20180307154943j:plain

ただし、ボールがスポットのある一番端の地点まで行ってしまった場合、そのままボールは自由落下して端のスポットに落下するものとします。イメージとしては下記の画像のような三角格子を用意します(雑)。

f:id:tb9810w124816:20180308120217p:plain

 なお、この条件が実験後半の結果の変化の肝になります。 

 

今回は、以下のリンク

http://www.naturawww.sat.t.u-tokyo.ac.jp/~omi/random_variables_generation.html#Prepare_MTl-science.or.jp/article/20110404234734.php

のページを参考に、BDライセンスで公開されているMT.hライブラリを用いて、メルセンヌ・ツイスタというアルゴリズムによって高速に乱数生成をして、その乱数の偶奇によってボールが右へ行くか左へ行くか決定しています。

 以下、今回のシミュレーション実験のために書いたC++(実質C)のコードをmain関数のみ示します。

int main() {
const int N = 999;
FILE *fp;
fp=fopen("out.txt","w");
int a[N] = { 0 }; //各スポットに入ったボールの数
int atp = 0; //試行回数
int mid = (N - 1) / 2; //真ん中
init_genrand((unsigned)time(NULL)); //メルセンヌ・ツイスタによる乱数生成
while (atp < 10000) { //10000個のボールを転がす
int p = mid; //はじめボールは最上段の中央にある
int level = 0; //ボールの位置の深さ(てっぺんで0、スポットでN(=999))
int w = 2; //三角格子の高さ。ここは逐次変更。なお、w=1で高さはスポット数の約半分になる(すべてのスポットに落下する可能性がある)
while (level < mid*w) { //ボールが落下するまで
if (genrand_int32() % 2 == 0) p++; //ボールが右へ転がる
else p--; //ボールが左へ転がる
if (p == 0 || p == N-1) break; //ボールが三角格子の端まで行って飛び出る(端のスポットに入る)
level++; //ボールが一段落ちる
}
a[p]++; //ボールが入ったスポット
atp++; //試行回数増やす
}
for (int i = 0; i < 64000; i++) fprintf(fp,"%d\n",a[i]);
fclose(fp);

return 0;
}

 

 上記のプログラムをw=1,2,4,8,16,32,64,128に対して実行し、実行結果をExcelに張り付けて各スポットに入ったボールの数のヒストグラムを作成します。(スポットの番号は左から順に1,2,3,...,999です。ただし、プログラムの中では0,1,2,...,998というように0オリジンになっています。)

 

 

3.実験結果

 では早速、実際にボールの落下位置の分布はどのようになったのかヒストグラムを見ていきましょう。以下ではスポットの数(=999)をNとしています。

(i)三角格子の高さがおよそN/2のとき(w=1)

f:id:tb9810w124816:20180307162856p:plain

 (図番号は省略しています。) 一極集中!まあ、一番端のスポットへ落ちるパターンはすべての杭で右に移動、もしくはすべての杭で左に移動する2パターンしかないわけですから、全パターンが2⁴⁹⁹(≃10¹⁵⁰)通りあることを考えると真ん中に寄りやすいのは当然と言えますかね。また、二項分布・正規分布のような、中央(ボールのあちるスポット番号の期待値)に対して左右対称なヒストグラムになっています。

 

(ii)三角格子の高さがおよそNのとき(w=2)

f:id:tb9810w124816:20180307163057p:plain

 先ほどとほとんど変わりませんね。 おわり。

(iii)三角格子の高さがおよそ2Nのとき(w=4f:id:tb9810w124816:20180307163601p:plain

  少し、ヒストグラムの高さが下がり、裾野が広がりましたね。

 

(iv)三角格子の高さがおよそ4Nのとき(w=8)

f:id:tb9810w124816:20180307163655p:plain

  徐々に裾野が広がり、縦長から横長のヒストグラムになって来ていることが分かります。太ってきているわけではないです。

 

(v)三角格子の高さがおよそ8Nのとき(w=16)

f:id:tb9810w124816:20180307163825p:plain

  個人的にはw=16のこのヒストグラムの波形が今回の実験の中で一番きれいだと思います。まあ、目盛りの取り方によって変わりますが、たまたま高さと横幅の比が黄金比に近い気がする(気がするだけ)。

(vi)三角格子の高さがおよそ16Nのとき(w=32)

f:id:tb9810w124816:20180307164222p:plain

 よく見ていただくと分かるんですが、一番左のスポット1にはじめてボールが入ったことが分かります(しかも2個!)。w=32のときが一番二項分布らしい波形になっていると思います。でもこれ,各mid回の杭における左右移動が32セットそれぞれ独立と見なしてよいなら、試行回数(ボールの数)を10000として今回の実験やっているので、二項分布っぽく収束するのに必要な妥当試行回数が320000ってことがいえただけでは...?

(vii)三角格子の高さがおよそ32Nのとき(w=64)

f:id:tb9810w124816:20180307164253p:plain

   あっっ!!この高さになるといよいよかなりのボールが端に落下して左右のスポットに入ってしまうんですね!! 既に両端にボールが入りまくっていますが、さらに三角格子の高さを2倍にします。あっ....(察し)

 

(viii)三角格子の高さがおよそ64Nのとき(w=128)

f:id:tb9810w124816:20180307164352p:plain

はい。

 ほとんどのボールが端にたどり着いて三角格子から落下し、一番端の2つのスポットに入ってしまいました。それはそう。

 

4.考察

(i)ヒストグラムの波形について 

f:id:tb9810w124816:20180308201920p:plain

 ヒストグラムの波形が上図に示すような二項分布のような形になることは予想していましたが、予想以上に三角格子の高さに対してヒストグラムの横幅が狭かったです。落下位置は右に転がったときと左に転がったときの順番は関係なくその回数にのみ依存するので、各スポットにボールが落下する確率は(右、左)のどちらかを三角格子の高さ分だけ繰り返し選んでいく反復試行の確率計算をすればよいです。例えば三角格子の高さを2nとすると、2nCnのオーダーはスターリングの公式を用いることでO(4ⁿ/√n)になることが分かるのですが、同様にすると2nCn/2=O((16/3√3)ⁿ/√n)となり、2nC1に至ってはO(n)となるため、反復試行の分子の値は極端に真ん中に集中することは明らかです。今回の場合n=499としており特に大きいのでなおさら真ん中への偏りが顕著になりました。

 

(ii)両端にボールがたどり着くのに必要な高さについて

 スポット数に対しておよそ16倍で両端にボールが入り始め、徐々に増加し、スポット数の64倍のたかさの三角格子から転がした場合においてはそのほとんどが両端のスポットに落下することが分かりました。

  両端に落下するということはボールがランダムウォークする過程で三角格子の端までたどり着いてしまったということです。つまり、三角格子のいずれかの深さにおいてあるボールがいままでに右に遷移した回数もしくは左に遷移した回数の一方が他方よりもmid=499以上大きくなったということです(これは重複組み合わせの計算で算出できます)。つまり、三角格子の高さをnとしたとき全遷移パターン2ⁿ通りのうち途中でこのような状態に陥る組み合わせが多くなると、当然ですが端に落ちるボールが多くなるということです。実験ではn=64midのとき中央付近に落ちるボールと両端に落ちるボールの数が等しくなっていることが分かります。実際の値をExcelを用いて計算しようと思いましたが、値が大きすぎてエラーしてしまいました。

 

5.まとめ

 パチンコ玉はなかなか両端には落ちない。めっちゃ高くないと落ちない(スポットの数の64倍)。大体真ん中に落ちるのです。もちろんこれは、最初にボールを真ん中から転がし始めたとき。つまり、ボールが転がり始めた位置と落下位置は杭で左右に移動していってもあまり変わらないことの方が多い。...ボールの転がる始点を見れば落下位置も大体検討がつく、というか真下付近に落下すると思っとけばいいことになる。

 

<今回のキーワード>

 パチンコ玉の落下位置の分布が理想的には二項分布状になることは実は有名な話だったりします。世の中の現象で「○○分布になる傾向にある」と分析されていることはほかにも結構あります。では、元々高所得者の所得分布を示す分布として提案された、ものごとの大部分は一部の構成員によって作れれているといった世の中の偏りを示唆する分布は何分布というでしょうか。分かった方はコメント欄からどうぞ。

6.関連記事

 ...ないです。でも、これから確率ネタの記事も増やすかもしれません。まあ、もうちょっとまともな考察を今度はしたい。