十三のゲーム
組合せ論で知られるフランスの数学者 Pierre Raymond De Montmart は、十三のゲーム(Game of Thirteen)というシンプルなゲームを提案しました。1〜13 の番号が書かれた 13 枚のカードの山札があります。この山札をシャッフルし、カードを 1 枚ずつ引いていきます。カードに書かれた数字と、そのカードを引いた順番が一致したとき、それを「一致(coincidence)」と呼びます。たとえば、5 枚目に引いたカードが 5 なら一致です。1 度も一致が起きないまま最後のカードまで引き切れたら勝ちとなります。ここではシミュレーションを用いて、このゲームに勝つ確率を求めてみましょう。
この演習を通して、抽象的な問題をシミュレーションの枠組みに落とし込み、確率を推定する力をさらに強化します。
この演習はコースの一部です
Pythonで学ぶ統計シミュレーション
演習の手順
- 各試行では、
deckのカードをすべて重複なし(without replacement)で引いてdrawに代入します。 drawに一致(coincidence)があれば、coincidencesカウンタを 1 増やします。- 一致が一度もないゲームの割合を勝率として計算し、
prob_of_winningを使って結果を表示してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Pre-set constant variables
deck, sims, coincidences = np.arange(1, 14), 10000, 0
for _ in range(sims):
# Draw all the cards without replacement to simulate one game
draw = np.random.choice(____, size=____, replace=____)
# Check if there are any coincidences
coincidence = (draw == list(np.arange(1, 14))).any()
if coincidence == ____:
coincidences += 1
# Calculate probability of winning
prob_of_winning = ____
print("Probability of winning = {}".format(____))