Gente Che Gioca > Sotto il cofano

Problema di matematica/statistica: quanti dadi servono per raggiungere X?

<< < (2/3) > >>

Seretur:
Ogni singolo d6 ti da un risultato da 1 a 6 ed è distribuito uniformemente, quindi possiamo dire che ogni dado ti da come media 3.5

Sapendo che la media di ogni dado è 3.5, possiamo facilmente ragionare sul fatto che tirando n dadi, la loro somma totale si avvicinerà a 3.5n, e possiamo ragionevolmente pensare che più n è grande, più il risultato empirico si avvicinerà al valore 3.5n che abbiamo predetto. Quindi una prima stima del numero di dadi possiamo ottenerla facendo 3.5n > X quindi n> X/3.5 Un ragionamento decisamente a tentoni comunque ^^''

Mattia Bulgarelli:
@Federico: infatti sono partito da lì!

Poi mi sono accorto che meno dadi ci sono, più la campana è ripida e quindi prevedibile.

Per raggiungere un certo numero, conviene aggiungere dei valori fissi più che affidarsi a grandi numeri di dadi (Draghi di D&D 3.X... sto guardando voi... >_< ): è più comodo e non cambia tanto.

Per esempio: http://anydice.com/program/16aa (cliccate su "graph" e sarà evidente la differenza).

Mr. Mario:
Beh, sì, questo è normale.

In effetti l'ampiezza della campana vorrebbe scelta in base a quanto vuoi che sia ampio tutto lo spettro dei possibili risultati, e a quanto vuoi che siano probabili le frange.

O ancora meglio, in generale, dovrebbero dipendere da qualcosa di aleatorio come i dadi solo cose che in concreto beneficiano dall'avere un margine di imprevedibilità. Se si parte dai dadi, e poi ci si trova a correggerli perché sono troppo 'selvaggi', forse vale la pena di ripensarci. ;)

Luca Bonisoli:
Mattia, prova a cliccare qui: http://anydice.com/program/16ae

Ti ho preparato una serie di output da 1 a 30 dadi dello stesso tipo.
Cambia il valore di "X" e clicca "Calculate" per cambiare il valore soglia (l'ho impostato a 10 giusto per metterci un valore predefinito)
Cambia il valore di "Y" e clicca "Calculate" per cambiare il numero di facce dei dadi (l'ho impostato a 6 giusto per metterci un valore predefinito).

Per ogni output Anydice ti restituisce la probabilità di ottenere 1 (VERO, cioè il lancio di dado è maggiore del valore soglia) oppure 0 (FALSO, cioè il lancio di dado non è maggiore del valore soglia).

Spero ti sia utile.  ;D

Leonardo:

--- Citazione da: Mattia Bulgarelli - 2012-09-10 16:35:05 ---@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).
--- Termina citazione ---

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.


--- Codice: ---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)$

--- Termina codice ---

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à PD,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 YK(Z) la probabilità di ottenere esattamente Z dalla somma di K dadi:

PD,S(N) =  1/D * YN-1(S-D) + 2/D * YN-1(S-(D-1)) + ... + (D-2)/D * YN-1(S-3) + (D-1)/D * YN-1(S-2) + YN-1(S-1)

A questo punto per calcolare PD,S(N) basta calcolare YK(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à YK(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 PD,S(N) la media si trova sommando N * PD,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).

Navigazione

[0] Indice dei post

[#] Pagina successiva

[*] Pagina precedente

Vai alla versione completa