少なくとも一度はすべての数字を取得するために、6面のサイコロを振る必要がありますか?


41

私はちょうど子供とゲームをプレイしました。基本的には、6面ダイスで少なくとも1回すべての数字を振る人が勝ちます。

私は最終的に勝ちました、そして、他は1-2ターン後に終わりました。今、私は疑問に思う:ゲームの長さの期待は何ですか?

特定の数に達するまでのロール数の予想は 。n=1n16(56)n1=6

ただし、2つの質問があります。

  1. 少なくとも1回すべての数字を取得するまで、6面のサイコロを何回振る必要がありますか?
  2. 4つの独立したトライアル(つまり、4人のプレイヤー)の中で、必要なロールの最大数はどうなりますか?[注:最小ではなく最大です。なぜなら、年齢では、子供のために最初にそこに着くということよりも、仕上げることのほうが重要だからです]

結果をシミュレートすることはできますが、分析的にどのように計算するのでしょうか。


Matlabでのモンテカルロシミュレーションです

mx=zeros(1000000,1);
for i=1:1000000,
   %# assume it's never going to take us >100 rolls
   r=randi(6,100,1);
   %# since R2013a, unique returns the first occurrence
   %# for earlier versions, take the minimum of x
   %# and subtract it from the total array length
   [~,x]=unique(r); 
   mx(i,1)=max(x);
end

%# make sure we haven't violated an assumption
assert(numel(x)==6)

%# find the expected value for the coupon collector problem
expectationForOneRun = mean(mx)

%# find the expected number of rolls as a maximum of four independent players
maxExpectationForFourRuns = mean( max( reshape( mx, 4, []), [], 1) )

expectationForOneRun =
   14.7014 (SEM 0.006)

maxExpectationForFourRuns =
   21.4815 (SEM 0.01)

11
クーポンコレクターの問題参照してください -グーグルは、より多くのヒットとより多くの情報を提供します。こちらのstats.SEでも検索してみてください。
Glen_b

1
@Glen_b:ありがとう、私はその名前を知りませんでした!
ジョナス

1
@whuber:この質問が閉じられるべきかどうかはわかりません。彼は、4回の試行で予想される最小打撃時間を望んでいます。動的プログラミングソリューションに対する答えを修正しようとしていました。
ニールG

2
@whuber:投稿を編集して明確にします
ジョナス

回答:


22

「完全に分析的なアプローチ」が要求されているため、ここに正確な解決策があります。 また、混合条件で黒と白のボールのセットに黒のボールを描く確率の問題を解決するための代替アプローチを提供します


ゲーム内の移動の数、、幾何学的に6つの独立した実現の和としてモデル化することができるを有する確率変数、それらのそれぞれがだけシフト(幾何学的変数のみロールカウントされるため、前の成功を、我々はまた、成功が観察された上でのロールを数える必要があります)。したがって、幾何分布を使用して計算することにより、必要な回答よりも少ない回答が得られるため、必ず最後にを追加し直す必要があります。X(p)p=1,5/6,4/6,3/6,2/6,1/616 666

パラメータ持つそのような幾何学的変数確率生成関数(pgf)は、p

f(z,p)=p1(1p)z.

したがって、これらの6つの変数の合計のpgfは

g(z)=i=16f(z,i/6)=6z4(5 2z+5+10 3z+45 4z+4+5z+4+5).

(積は部分分数を介して5つの項に分けることにより、この閉じた形で計算できます。)

累積分布関数(CDF)は、の部分和(級数として)から取得されます。これは、幾何級数の合計に相当し、次の式で与えられます。gz

F(z)=6z4((1) 1z+4+(5) 2z+4(10) 3z+4+(10) 4z+4(5) 5z+4+(1) 6z+4).

(私はこの表現を、包含-排除の原理による代替派生示唆する形で書きました。)

これから、ゲーム内の予想移動数(最初の質問に答える)を取得します。

E(6+X)=6+i=1(1F(i))=14710.

独立したバージョンの最大のCDF は(これから、原則として、分散が何であるか、99パーセンタイルが何であるかなど、好きな最大に関する確率の質問に答えることができます、 等々)。、我々は期待し得mXF(z)mm=4

6+i=1(1F(i)4)21.4820363.

(値は合理的な分数であり、簡約形式では71桁の分母を持ちます。)標準偏差は 以下は、4人のプレーヤーの最大の確率質量関数のプロットです(すでにシフトされています)。6.77108.6

図

予想されるように、それは積極的に歪んでいます。モードはロールです。最後にフィニッシュした人がロール以上かかることはまれです(約)。18500.3%


この解法は、幾何学的変数の合計が同じパラメーターを持つ幾何学的変数の混合(おそらくは負の重みを持つ)であるという観察に触発されました。 同様の関係が、ガンマ変数間(異なるレートパラメーター)で保持されます。Mathematicaで作業を行ったことをおaびしますが、Matlabがこれらの計算も実行できると確信しています:-)。
whuber

2
これは私が望んでいた答えです。どうもありがとうございました!Matlabで数値結果を計算できるはずだと思います:)
ジョナス14

は、幾何分布の確率質量分布とどのように関連していますか?製品 どこから来たのですか?私は、の意味を得る、しかし、の意味するものである?f(z,p)=p1(1p)zi=16f(z,i/6)F(z)g(z)
セクストゥスエンピリカス

1
が確率生成関数であることがわかりました。f(z,p)
セクストゥスエンピリカス

@MartijnWeteringsありがとうございます。これは、より正確で従来の用語です。(生成関数を使用する長い習慣のため、私はpmfとpgfをほぼ同じものと考えがちです。)この投稿で用語を変更します。
whuber

13

ThePawnには、再発関係で問題を攻撃する正しい考えがあります。発生した個別のさいころの数のカウントに対応する状態マルコフ連鎖を考えます。状態0は開始状態で、状態6は終了状態です。次に、状態からそれ自体への遷移の確率はです。状態から状態への遷移の確率はです。したがって、終了状態のヒット時間は {0,,6}ii6ii+16i6

i=0566i=14.7

最大4回の試行では、4倍の状態を考慮してください。ターゲット状態の予想されるヒット時間を検索します。任意の状態の予測ヒット時間は、予測ヒット時間各ソース状態の加重平均と、からに移動する時間、で重み付けされ、状態に到達して移動する確率です。(6,6,6,6)jiTiijpipijij。動的プログラミングにより、打撃時間と確率を発見できます。打撃時間と確率を埋めるためのトラバース命令があるので、それほど難しくありません。たとえば、2つのダイの場合、最初に(0,0)のTとpを計算し、次に(1,0)の次に(1、1)、(2、0)、次に(2、1)などを計算します。

Pythonの場合:

import numpy as np
import itertools as it
from tools.decorator import memoized  # A standard memoization decorator

SIDES = 6

@memoized
def get_t_and_p(state):
    if all(s == 0 for s in state):
        return 0, 1.0
    n = len(state)
    choices = [[s - 1, s] if s > 0 else [s]
               for s in state]
    ts = []
    ps = []
    for last_state in it.product(*choices):
        if last_state == state:
            continue
        last_t, last_p = get_t_and_p(tuple(sorted(last_state)))
        if last_p == 0.0:
            continue
        transition_p = 1.0
        stay_p = 1.0
        for ls, s in zip(last_state, state):
            if ls < s:
                transition_p *= (SIDES - ls) / SIDES
            else:
                transition_p *= ls / SIDES
            stay_p *= ls / SIDES
        if transition_p == 0.0:
            continue
        transition_time = 1 / (1 - stay_p)
        ts.append(last_t + transition_time)
        ps.append(last_p * transition_p / (1 - stay_p))
    if len(ts) == 0:
        return 0, 0.0
    t = np.average(ts, weights=ps)
    p = sum(ps)
    return t, p

print(get_t_and_p((SIDES,) * 4)[0])

1
ゲームの4回の独立したレピティションで予想されるロールの最大数を逃しました。
確率論的

ああ、私はちょうどそれに気づいた。私はあなたが最小を意味すると思いますが、はい。
ニールG

@NeilG:戦略はminとmaxで同じであると仮定していますが、実際には最大を意味します(更新された質問を参照)。動的プログラミング戦略について詳しく説明してください。
ジョナス

@Jonas:最大に更新されました。私は多くの仕事をしていますが、後であなたのためにこれをコーディングできるかもしれません。
ニールG

2
@NeilG:ありがとう。私は完全に分析的なアプローチを得ることを望んでいましたが、DPコードも非常に教育的です。
ジョナス

6

1人のプレーヤーのゲームの長さのRでの迅速で汚いモンテカルロ推定:

N = 1e5
sample_length = function(n) { # random game length
    x = numeric(0)
    while(length(unique(x)) < n) x[length(x)+1] = sample(1:n,1)
    return(length(x))
}
game_lengths = replicate(N, sample_length(6))

結果:、であるため、平均の95%信頼区間はです。μ^=14.684σ^=6.24[14.645,14.722]

4人用のゲームの長さを決定するために、サンプルを4つにグループ化し、各グループの平均の最小の長さを取得できます(最大値について尋ねましたが、読み方は、誰かがすべての数字の取得に成功するとゲームは終了します):

grouped_lengths = matrix(game_lengths, ncol=4)
min_lengths = apply(grouped_lengths, 1, min)

結果:、であるため、平均の95%信頼区間はです。μ^=9.44σ^=2.26[9.411,9.468]


1
Matlabシミュレーションで非常に似た結果に到達しましたが、これを分析的にどのように解決するのか興味がありました。また、私は子供と遊ぶので、誰が勝ったかに関係なく、すべての人がゲームを終了したいので、最大値について尋ねたいと思います。
ジョナス

5

勝つために獲得しなければならない残りのの数に関して、再帰的な関係はどうですか。m

T1=6
Tm=1+6m6Tm+m6Tm1

基本的に、最後の関係は、の異なる番号をロールする時間はプラスに等しいと言っています。1m1

  • 6 m 6 mTmすでにロールされた個の数字の1つをロールした場合(確率)6m6m6
  • m mTm1残りの個の数字の1つをロールした場合(確率)mm6

この関係を数値的に適用すると、が得られます。14.7


この答えには何か問題があるようです。最後にまとめてはいけませんか? 。Ti=Ti1+66i+1
ニールG

1
はい、間違えました、私はそれを修正しています
-ThePawn

私が答えを追加したことを気にしないでください。14.7は正しいのですが、繰り返しの関係にはまだ欠陥があります…
ニールG

問題ありません、最初は注意が必要でした:)。あなたの答えは素晴らしいです。
ThePawn

5

最初の質問に対する簡単で直感的な説明:

最初に任意の数を振る必要があります。これは簡単で、常に正確に1ロールかかります。

その後、最初の数字以外の数字を振る必要があります。これが発生する可能性はであるため、平均で(1.2)のロールがかかります。 65665

その後、最初の2つ以外の番号を振る必要があります。これが発生する可能性はであるため、平均で(1.5)のロールがかかります。 64664

その後、最初の3つ以外の番号を振る必要があります。これが発生する可能性はであるため、平均で(2)のロールがかかります。 63663

6番目のロールが正常に完了するまで続きます。

66+65+64+63+62+61=14.7 rolls

この答えは、ニールGの答えに似ていますが、マルコフ連鎖がありません。


1

次の新しい数を取得するための確率密度関数(または離散的な同等物)は次のとおりです。

f = sum(p *(1-p)^(i-1)、i = 1 .. inf)

ここで、pはロールごとの確率、1は数字がロールされていない場合は1、1の後の5 / 6、4 / 6 ..最後の数字の場合は1/6まで

期待値mu = sum(i * p *(1-p)^(i-1)、i = 1 .. inf)n = i-1とし、合計の外にpをもたらす

mu = p * sum((n + 1)*(1-p)^ n、n = 0 .. inf)

mu = p * sum(n(1-p)^ n、n = 0 .. inf)+ p * sum((1-p)^ n、n = 0 .. inf)mu = p *(1-p )/(1-p-1)^ 2 + p * 1 /(1-(1-p))

mu = p *(1-p)/ p ^ 2 + p / p

mu =(1-p)/ p + p / p

mu =(1-p + p)/ p

mu = 1 / p

1、5 / 6、4 / 6、3 / 6、2 / 6、および1/6のpsの期待値(mus)の合計は、以前に報告されたように14.7ですが、必要な数あたり1 / pは一般的ですダイサイズの

同様に、標準偏差を分析的に計算できます

sigma ^ 2 = sum((i-mu)^ 2 * p *(1-p)^(i-1)、i = 1 .. inf)

ここで代数をspareしまないが、sigma ^ 2 =(1-p)/ p ^ 2

6の場合、各ステップのsigma ^ 2の合計は、シミュレートされた標準偏差約6.24で38.99です。


-4

質問1は:

少なくとも1回すべての数字を獲得するまで、6面のサイコロを何回振る必要がありますか?

明らかに、正解は「無限」でなければなりません。


6
これは、「すべての番号を少なくとも1回取得することを絶対確実に保証する」という質問に答えます。尋ねられた質問の答えはランダム変数であり、その分布はよく近似できます。
Glen_b
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.