@Manfredi: l'idea era di avere un avanzamento di un "timer", che ad ogni scatto va avanti di uno o due dadi, e misurare quanto è prevedibile il numero di scatti che deve fare per arrivare ad un numero predeterminato (e quanta varianza c'è rispetto a quel numero).
La soluzione matematica esatta del problema posto in questi termini dovrebbe essere abbordabile da un punto di vista logico, un po' meno da quello del calcolo. Richiede comunque di scriversi un programmino perché a mano è materiale per Rain Man. Per il codice e le spiegazioni di come usarlo vedi qui sotto.
D: 6$
S: 30$
G: 0$
for i: 1 thru D step 1 do G: G + 1/D * x^i $
N_Min: entier((S-1)/D)+1 $
N_Max: S $
display(N_Min)$
display(N_Max)$
Media: 0$
Media_Quadrati: 0$
Varianza: 0$
P_T: 0$
G_i: expand(G^(N_Min-1))$
for i:N_Min thru N_Max step 1 do
(P_i: 0,
for j: 1 thru D step 1 do (P_i: P_i + j/D * coeff(G_i,x,S-D+j-1)),
G_i: expand(G_i*G),
P_T: P_T + P_i,
Media: Media + i*P_i,
Media_Quadrati: (Media_Quadrati + i*i*P_i))$
P_T: float(P_T)$
Deviazione_Standard:(sqrt(Media_Quadrati - Media*Media))$
Media: float(Media)$
Deviazione_Standard: float(Deviazione_Standard)$
display(P_T)$
display(Media)$
display(Deviazione_Standard)$
Lo script di cui sopra dovrebbe calcolare media e deviazione standard del numero di lanci di dadi con D facce necessari per superare la soglia S. D e S sono gli unici parametri da variare e compaiono in alto nel codice. Il programma che ho utilizzato si chiama Maxima ed è gratuitamente scaricabile da Sourceforge:
http://maxima.sourceforge.net/download.html.
Esiste anche una versione online del programma all'indirizzo
http://maxima-online.org/, ma personalmente consiglio di scaricarlo perché l'algoritmo è lento e il calcolo inizia a richiedere 5 minuti circa già per dadi da 10 con soglia 100.
Il programmino indica anche il numero minimo e massimo di dadi necessari a superare la soglia e la probabilità totale, come controllo basilare immediato (se la probabilità totale è diversa da 1 c'è qualche problema...). Spero possa esserti utile.
Per i curiosi e per chi volesse controllare se ho fatto errori concettuali (che mi sarebbe di aiuto visto che si tratta di una eventualità da non trascurare), l'idea alla base del calcolo è la seguente:
Se D è il numero di facce del dado e S la soglia da superare, la variabile aleatoria è il numero di dadi da lanciare per superare S. La chiameremo N (con grande fantasia).
La probabilità di superare S al N-esimo lancio sarà P
D,S(N)
L'unica maniera per superare S esattamente al N-esimo lancio è che dopo il lancio del penultimo dado ((N-1)-esimo) avessimo un punteggio compreso tra S-D e S-1 e che l'ultimo lancio sia pari almeno alla differenza. Indicando con Y
K(Z) la probabilità di ottenere esattamente Z dalla somma di K dadi:
P
D,S(N) = 1/D * Y
N-1(S-D) + 2/D * Y
N-1(S-(D-1)) + ... + (D-2)/D * Y
N-1(S-3) + (D-1)/D * Y
N-1(S-2) + Y
N-1(S-1)
A questo punto per calcolare P
D,S(N) basta calcolare Y
K(Z). Esistono diversi modi per farlo e non è detto che siano tutti egualmente efficienti dal punto di vista degli algoritmi utilizzati. Purtroppo non sono un programmatore e quindi ho scelto il metodo più semplice da implementare perché già contenuto nel programma che ho utilizzato. In pratica si sfrutta quella che è chiamata la funzione generatrice della distribuzione di probabilità: tralasciando tutti i dettagli, la probabilità Y
K(Z) corrisponde al coefficiente che precede il termine di grado Z nell'espansione del polinomio
(1/D * x + 1/D * x^2 + .... + 1/D * x^D)^K
Esempio: se voglio sapere quale è la probabilità di fare 8 lanciando 3 dadi a 4 facce calcolo:
(1/4 * x + 1/4 * x^2 + 1/4 * x^3 + 1/4 * x^4)^3 e vado a leggere il coefficiente di x^8 nel risultato che ottengo.
Una volta che abbiamo P
D,S(N) la media si trova sommando N * P
D,S(N) su tutti i valori di N e la varianza si trova ricordando che è pari alla media dei quadrati meno il quadrato della media. I valori di N significativi per la somma sono quelli compresi tra la (parte intera di ((S-1)/D)) + 1 (che corrisponde al caso in cui ogni dado precedente l'ultimo abbia fatto il massimo valore D) e S (nel caso tutti i dadi abbiano fatto 1).