Probabilità di vittoria in un incontro in un gioco di ruolo con i dadi

Messaggioda Heart of Mama » 15/04/2017, 21:32

Il problema nasce dal fatto che, da qualche mese, gioco a Dungeons and Dragons e mi sono sempre chiesto se ci fosse un metodo, partendo dalle statistiche dei vari componenti delle fazioni di uno scontro, di calcolare la probabilità di vittoria in uno scontro.
Mi piacerebbe, inoltre, generalizzare la questione.
Mi spiego meglio, proponendo un modello MOLTO semplificato del problema che, tuttavia, non riesco a risolvere.

PROBLEMA

Siano A e B due giocatori che si sfidano ad un gioco a turni; ogni giocatore possiede quattro valori che dovrà utilizzare nel gioco:

- Bonus di attacco: $ b_A $ (associato al giocatore A) e $ b_B $ (associato B); entrambi rappresentano due numeri interi;
- Insieme di danno: $ D_A $ e $ D_B $ che rappresentano due insiemi numerici finiti di numeri interi positivi;
- Classe Armatura: $ c_A $ e $ c_B $; due numeri interi positivi;
- Punti ferita: $ p_A $ e $ p_B $; due numeri interi positivi.

Inoltre sia dato un terzo insieme di numeri interi positivi $ F $.

Per semplicità si potrebbero immaginare gli insiemi $ D_A $, $ D_B $ e $ F $ come dei dadi a $ n_I $ facce (con $ n_I $ la cardinalità del rispettivo insieme; un numero naturale finito) oppure come dei barattoli con dentro $ n_I $ palline sopra ognuna delle quali è scritto un numero.

Il gioco si svolge nel modo seguente:

SVOLGIMENTO DEL k-esimo TURNO

$ A_1 $ Il giocatore A estrae casualmente un numero dall'insieme $ F $; chiamiamo questo numero $ F_(i^(kA)) $ ovvero l'i-esimo elemento dell'insieme $ F $ estratto al k-esimo turno dal giocatore A.
$ A_2 $ Il giocatore A somma questo numero al suo bonus di attacco $ b_A $ ottenendo $ F_(i^(kA)) + b_A $.
$ A_3a $ Se $ F_(i^(kA)) + b_A>= c_B $ allora il giocatore A estrae un numero casuale dall'insieme $ D_A $ (chiamiamo questo numero $ D_(A(i^(kA))) $, ovvero l'i-esimo elemento dell'insieme $ D_A $ estratto al k-esimo turno dal giocatore A); successivamente si passa al punto $ B $
$ A_3b $ Se $ F_(i^(kA)) + b_A< c_B $ allora si passa direttamente al punto $ B_1 $.

$ B_1 $ Il giocatore B estrae casualmente un numero dall'insieme $ F $; chiamiamo questo numero $ F_(i^(kB)) $ ovvero l'i-esimo elemento dell'insieme $ F $ estratto al k-esimo turno dal giocatore B.
$ B_2 $ Il giocatore B somma questo numero al suo bonus di attacco $ b_B $ ottenendo $ F_(i^(kB)) + b_B $.
$ B_3a $ Se $ F_(i^(kB)) + b_B>= c_A $ allora il giocatore B estrae un numero casuale dall'insieme $ D_B $ (chiamiamo questo numero $ D_(B(i^(kB))) $, ovvero l'i-esimo elemento dell'insieme $ D_B $ estratto al k-esimo turno dal giocatore B); successivamente si passa al (k+1)-esimo turno ripetendo ogni passo dal punto $ A_1 $
$ B_3b $ Se $ F_(i^(1B)) + b_B< c_A $ allora si passa direttamente al (k+1)-esimo turno ripetendo ogni passo dal punto $ A_1 $.

Il gioco finisce quando si verifica una di queste due condizioni:
1) $ sum_(k=1)^(N_A)D_(A(i^(kA)))>=p_B $ con $ N_A $ il numero di turni giocati in questo primo caso; oppure
2) $ sum_(k=1)^(N_B)D_(B(i^(kB)))>=p_A $ con $ N_B $ il numero di turni giocati in questo secondo caso.

Ovviamente, se si verifica prima la condizione 1 (quindi $ N_A<N_B $), il vincitore sarà A; se si verifica prima la condizione 2 (quindi $ N_B<N_A $), il vincitore sarà B.

La domanda è:

Quanto valgono le probabilità che si verifichino i seguenti eventi:
- $ N_A>N_B $;
- $ N_A=N_B $;
- $ N_A<N_B $?

ESEMPIO PRATICO PER CAPIRCI MEGLIO

Giorgio e Piero si sfidano al suddetto gioco:

Interpretiamo l'insieme $ F $ come un dado a 20 facce, ovvero un insieme di numeri naturali da 1 a 20.

Giorgio ha $ b_G=2 $; $ c_G=15 $; $ p_G=21 $ e interpretiamo l'insieme $ D_G $ come una coppia di dadi a 8 facce da tirare contemporaneamente; dunque $ D_G $ sarà un insieme di numeri naturali da 1+1=2 a 8+8=16.

Piero ha $ b_P=1 $; $ c_P=18 $; $ p_P=15 $ e interpretiamo l'insieme $ D_P $ come tre dadi a 3 facce da tirare contemporaneamente; dunque $ D_P $ sarà un insieme di numeri naturali da 1+1+1=3 a 3+3+3=9.

PRIMO TURNO

$ G_1 $ Giorgio lancia il dado a 20 facce ottenendo 7;
$ G_2 $ Giorgio somma questo numero a $ b_G=2 $ ottenendo 9;
$ G_3 $ Siccome $ 9<18 $, che sarebbe $ c_P=18 $, allora si passa direttamente al punto $ P_1 $.

$ P_1 $ Piero lancia il dado a 20 facce ottenendo 14;
$ P_2 $ Piero somma questo numero a $ b_P=1 $ ottenendo 15;
$ P_3 $ Siccome $ 15>= 15 $, che sarebbe $ c_G=15 $ allora Piero lancia i 3 dadi a 3 facce ottenendo $ D_(P(5^(1P)))=7 $; successivamente si passa al secondo turno ripetendo ogni passo dal punto $ G_1 $

SECONDO TURNO

$ G_1 $ Giorgio lancia il dado a 20 facce ottenendo 17;
$ G_2 $ Giorgio somma questo numero a $ b_G=2 $ ottenendo 19;
$ G_3 $ Siccome $ 19>= 18 $, che sarebbe $ c_P=18 $ allora Giorgio lancia i 2 dadi a 8 facce ottenendo $ D_(G(11^(2G)))=12 $; successivamente si passa al punto $ P_1 $

$ P_1 $ Piero lancia il dado a 20 facce ottenendo 9;
$ P_2 $ Piero somma questo numero a $ b_P=1 $ ottenendo 10;
$ P_3 $ Siccome $ 10<15 $, che sarebbe $ c_G=15 $, allora si passa direttamente al terzo turno ripetendo ogni passo dal punto $ G_1 $

TERZO TURNO

$ G_1 $ Giorgio lancia il dado a 20 facce ottenendo 19;
$ G_2 $ Giorgio somma questo numero a $ b_G=2 $ ottenendo 21;
$ G_3 $ Siccome $ 21>= 18 $, che sarebbe $ c_P=18 $ allora Giorgio lancia i 2 dadi a 8 facce ottenendo $ D_(G(3^(3G)))=4 $.

Il gioco è finito, visto che si è verificata la seguente condizione:

$ sum_(k=1)^(3)D_(G(i^(kG)))>=p_P $ ovvero $ D_(G(0^(1G)))=0 + D_(G(11^(2G)))=12 + D_(G(3^(3G)))=4 rarr 0+12+4=16 ^^ 16>15$.

Quindi, quanto sarebbe valsa la probabilità delle vittoria di Giorgio; della vittoria di Piero o del pareggio?

Grazie delle risposte! (Ci giro intorno da qualche settimana, ma nulla...)
Heart of Mama
Starting Member
Starting Member
 
Messaggio: 4 di 8
Iscritto il: 04/04/2017, 12:57

Re: Probabilità di vittoria in un incontro in un gioco di ruolo con i dadi

Messaggioda Dobrogost » 16/04/2017, 10:49

Alcune cose che magari possono esserti di aiuto.

Anzitutto, non ho capito bene a cosa serve il bonus di attacco se tanto lo sommi in ogni caso al numero ottenuto in F. A questo punto conviene definire $c_A := c_A-b_B$, ovvero la classe armatura diventa la classe armatura che avresti tolto in bonus di attacco. In questo modo elimini un parametro dal modello mantenendo la stessa informazione, che è bene.

In secondo luogo, anche se è schifosamente ingegneristico da dire (ma sono in parte ingegnere, checcipossofa) per darti un'idea della probabilità in questo caso non sembra difficile implementare in C/Matlab il modello e fare qualche migliaio di simulazioni per usare il metodo Montecarlo.

Infine, il modello è semplice, ma secondo me devi semplificare ancora un po' per avere un'idea di come funziona. Comincia usando le Bernoulli e immagina che i giocatori lancino una moneta anzichè dei dadi e vedi cosa esce fuori. A quel punto puoi passare a distribuzioni più complesse, anche se mi sembra strano che possa uscire una soluzione "analitica" da un modello relativamente complicato come quello da te proposto.

Buona Pasqua :)

Edit: Un'altra cosa che mi è venuta in mente... Potresti provare, anzichè a calcolare le probabilità di vittoria basandoti sui punti ferita di un giocatore, a guardare come "crescono" i danni fatti nel tempo. In pratica, potresti definire una funzione "Danni al turno k" e vedere a cosa è asintotica per k che tende a infinito
Dobrogost
New Member
New Member
 
Messaggio: 3 di 68
Iscritto il: 04/04/2017, 17:03


Torna a Pensare un po' di più

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite