Quanto spesso devi tirare un dado a 6 facce per ottenere ogni numero almeno una volta?


41

Ho appena giocato una partita con i miei figli che praticamente si riduce a: chi lancia ogni numero almeno una volta su un dado a 6 facce vince.

Alla fine ho vinto e gli altri hanno finito 1-2 turni dopo. Ora mi chiedo: qual è l'aspettativa della durata del gioco?

So che l'aspettativa del numero di tiri fino a quando si colpisce un numero specifico è .n=1n16(56)n1=6

Tuttavia, ho due domande:

  1. Quante volte devi tirare un dado a sei facce finché non ottieni ogni numero almeno una volta?
  2. Tra quattro prove indipendenti (cioè con quattro giocatori), qual è l'aspettativa del numero massimo di tiri necessari? [nota: è massimo, non minimo, perché alla loro età, si tratta più di finire che di arrivarci prima per i miei figli]

Posso simulare il risultato, ma mi chiedo come farei per calcolarlo analiticamente.


Ecco una simulazione Monte Carlo in 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
Vedi anche il problema del collezionista Coupon : googling ti darà molti più successi e maggiori informazioni. Prova anche a cercarlo qui su stats.SE .
Glen_b,

1
@Glen_b: Grazie, non conoscevo quel nome!
Jonas

1
@whuber: Non sono sicuro che questa domanda avrebbe dovuto essere chiusa. Vuole il tempo di colpire minimo previsto di quattro prove. Stavo per risolvere la mia risposta per la soluzione di programmazione dinamica.
Neil G,

2
@whuber: modificherò il mio post per chiarire
Jonas

Risposte:


22

Poiché è stato richiesto un "approccio completamente analitico", ecco una soluzione esatta. Fornisce anche un approccio alternativo per risolvere la domanda in Probabilità per disegnare una palla nera in una serie di palle bianche e nere con condizioni di sostituzione miste .


Il numero di mosse nel gioco, , può essere modellato come la somma di sei realizzazioni indipendenti di variabili geometriche con probabilità , ognuno spostato di (perché una variabile geometrica conta solo i tiri che precedono un successo e dobbiamo anche contare i tiri su cui sono stati osservati i successi). Computando con la distribuzione geometrica, otterremo quindi risposte che sono meno di quelle desiderate e quindi dobbiamo essere sicuri di aggiungere alla fine.X(p)p=1,5/6,4/6,3/6,2/6,1/616 666

La funzione generatrice di probabilità (pgf) di tale variabile geometrica con il parametro èp

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

Quindi il pgf per la somma di queste sei variabili è

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

(Il prodotto può essere calcolato in questa forma chiusa separandolo in cinque termini tramite frazioni parziali.)

La funzione di distribuzione cumulativa (CDF) è ottenuta dalle somme parziali di (come una serie di potenze in ), che equivale a sommare le serie geometriche, ed è data dagz

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

(Ho scritto questa espressione in una forma che suggerisce una derivazione alternativa tramite il Principio di inclusione-esclusione.)

Da questo otteniamo il numero previsto di mosse nel gioco (rispondendo alla prima domanda) come

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

Il CDF del massimo di versioni indipendenti di è (e da questo possiamo, in linea di principio, rispondere a qualsiasi domanda di probabilità sul massimo che ci piace, come qual è la sua varianza, qual è il suo 99 ° percentile , e così via). Con otteniamo un'aspettativa dimXF(z)mm=4

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

(Il valore è una frazione razionale che, in forma ridotta, ha un denominatore di 71 cifre.) La deviazione standard è Ecco un diagramma della funzione di massa di probabilità del massimo per quattro giocatori (è già stato spostato di ):6.77108.6

figura

Come ci si aspetterebbe, è positivamente distorto. La modalità è a tiri. È raro che l'ultima persona a finire prenderà più di tiri (è circa lo ).18500.3%


Questo metodo di soluzione è stato ispirato dall'osservazione che le somme di variabili geometriche sono miscele (possibilmente con pesi negativi) di variabili geometriche con gli stessi parametri. Una relazione simile vale tra le variabili Gamma (con parametri di frequenza diversi). Mi scuso per aver svolto il lavoro in Mathematica, ma sono sicuro che anche Matlab può eseguire questi calcoli :-).
whuber

2
Questa è la risposta che speravo. Grazie mille! Penso che dovrei essere in grado di calcolare i risultati numerici in Matlab :)
Jonas,

In che modo riferisce alla distribuzione di massa di probabilità della distribuzione geometrica? Da dove proviene il prodotto ? Ottengo il significato di , ma qual è il significato di ? f(z,p)=p1(1p)zi=16f(z,i/6)F(z)g(z)
Sesto Empirico

1
Vedo ora che è la funzione generatrice di probabilità . f(z,p)
Sesto Empirico

@MartijnWeterings Grazie - credo che sia il termine più preciso e convenzionale. (Puoi dire che tendo a pensare a pmf e pgf come quasi la stessa cosa, a causa della lunga abitudine di usare le funzioni di generazione.) In questo post cambierò la terminologia.
whuber

13

ThePawn ha l'idea giusta per attaccare il problema con una relazione di ricorrenza. Considera una catena di Markov con stati corrispondenti al conteggio del numero di lanci di dadi distinti che sono avvenuti. Lo stato 0 è lo stato iniziale e lo stato 6 è lo stato finale. Quindi, la probabilità di passaggio dallo stato a se stesso è . La probabilità di passaggio dallo stato allo stato è . Pertanto, il tempo di risposta dello stato finale è {0,,6}ii6ii+16i6

i=0566i=14.7

Per un massimo di quattro prove, considerare gli stati che sono quadrupli. Si desidera trovare il tempo di previsto per lo stato target . Il tempo di risposta previsto di qualsiasi stato è la media ponderata per ogni stato di origine del tempo di previsto più il tempo di andare da a , ponderato da , la probabilità di arrivare allo stato e passare aj i T i i j p i p i j i j(6,6,6,6)jiTiijpipijij. Puoi scoprire i tempi di colpire e le probabilità con la programmazione dinamica. Non è così difficile poiché esiste un ordine trasversale per riempire i tempi di colpire e le probabilità. Ad esempio, per due dadi: prima calcola T e p per (0,0), quindi per (1,0), quindi (1, 1), (2, 0), quindi (2, 1), ecc.

In 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
Hai perso il numero massimo previsto di tiri in quattro ripetizioni indipendenti del gioco.
Probislogic

Ah, l'ho appena notato. Penso che tu intenda il minimo, ma sì.
Neil G,

@NeilG: in realtà intendo il massimo (vedi la mia domanda aggiornata), anche se presumo che la strategia sia la stessa per min e max. Potete per favore approfondire la strategia di programmazione dinamica?
Jonas,

@Jonas: aggiornato per il massimo. Ho molto lavoro, ma potrei essere in grado di codificarlo per te in seguito.
Neil G,

2
@NeilG: grazie. Avevo sperato di ottenere un approccio completamente analitico, ma anche il codice DP è abbastanza istruttivo.
Jonas

6

Stima Monte Carlo veloce e sporca in R della durata di una partita per 1 giocatore:

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))

μ^=14.684σ^=6.24[14.645,14.722]

Per determinare la durata di una partita a quattro giocatori, possiamo raggruppare i campioni in quattro e prendere la lunghezza media minima su ciascun gruppo (hai chiesto il massimo, ma suppongo che intendessi il minimo poiché, nel modo in cui l'ho letto, il il gioco termina quando qualcuno riesce a ottenere tutti i numeri):

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

μ^=9.44σ^=2.26[9.411,9.468]


1
Sono arrivato a un risultato molto simile con una simulazione Matlab, ma ero curioso di sapere come risolverei questo problema analiticamente. Inoltre, dal momento che gioco con i miei figli, tutti vogliono finire il gioco, indipendentemente da chi vince, quindi voglio chiedere il massimo.
Jonas

5

m di squadre che devi ottenere per vincere.

T1=6
Tm=1+6m6Tm+m6Tm1

m1 più:

  • Tm6m6m6
  • Tm1mm6

14.7


Ti=Ti1+66i+1

1
Sì, scusa, ho fatto un errore, lo sto correggendo
ThePawn,

Spero non ti dispiaccia che abbia aggiunto una risposta. 14.7 è corretto, ma la relazione di ricorrenza è ancora imperfetta ...
Neil G

Nessun problema, avrei dovuto fare attenzione la prima volta :). La tua risposta è fantastica
ThePawn,

5

Una spiegazione semplice e intuitiva alla prima domanda:

Devi prima tirare un numero qualsiasi. È facile, ci vorrà sempre esattamente 1 tiro.

5665 (1.2) rotoli in media.

4664 (1,5) rotoli in media.

3663 (2) rotoli in media.

E così via fino a quando non avremo completato con successo il nostro sesto tiro:

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

Questa risposta è simile alla risposta di Neil G, solo, senza la catena markov.


1

la funzione di densità di probabilità (o equivalente discreto) per ottenere il nuovo numero successivo è:

f = somma (p * (1 - p) ^ (i - 1), i = 1 .. inf)

dove p è la probabilità per lancio, 1 quando non è stato lanciato alcun numero, 5/6 dopo 1, 4/6 .. fino a 1/6 per l'ultimo numero

il valore atteso, mu = sum (i * p * (1 - p) ^ (i - 1), i = 1 .. inf) lasciando n = i - 1 e portando p fuori dalla somma,

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

La somma dei valori previsti (mus) per ps di 1, 5/6, 4/6, 3/6, 2/6 e 1/6 è 14,7 come precedentemente riportato, ma 1 / p per numero richiesto è generale indipendentemente di dimensioni del dado

allo stesso modo, possiamo calcolare analiticamente la deviazione standard

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

Ti risparmierò l'algebra qui, ma sigma ^ 2 = (1-p) / p ^ 2

Nel caso di 6, la somma di sigma ^ 2 per ogni passaggio è 38,99 per una deviazione standard di circa 6,24, di nuovo, come simulato


-4

La domanda 1 era:

Quante volte devi tirare un dado a sei facce finché non ottieni ogni numero almeno una volta?

Ovviamente, la risposta corretta deve essere "infinita".


6
Ciò risponderebbe alla domanda "per garantire con assoluta certezza di ottenere ogni numero almeno una volta". Per la domanda che è stata posta, la risposta è una variabile casuale, la cui distribuzione può essere ben approssimata.
Glen_b,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.