Spillere af en bestemt TRPG har tegn med 6 evne-scoringer, hvor hver evnescore ligger fra 3-18. En metode til at generere dem er ved at rulle 4d6 drop lavest for hver af scores. Det betyder, at der rulles fire terninger med seks ansigter, og de tre højeste resultater tilføjes.
Hvad er den forventede højeste forskel i summen af evnescore mellem 2 af disse 5 spillere?
Det relaterede spørgsmål her viser, hvordan man får fordelingen af 4d3 drop lavest, men hvordan kommer jeg derfra til et svar på mit spørgsmål ovenfor?
Et godt svar ville forklare resultatet på en måde, som en nybegynder til statistik kan følge.
Svar
$ \ newcommand {\ E} {\ mathbb {E}} $ (Jeg skriver dette forudsat at du er fortrolig med at manipulere sandsynlighedsfordelinger og forventninger, men forhåbentlig ikke noget for fancy. Lad mig vide, hvis jeg skulle forklare noget mere. Jeg gør det også på en temmelig beregningsmæssig måde for bare at få et svar i stedet for at forsøge at gøre det hele med hånden.)
Sig, at vi har $ n = 5 $ spillere, der hver ruller op et tegn med 6 færdighedsresultater, hver betegnet som $ X_ {ij} $. Definer $ Y_i = \ sum_ {j = 1} ^ 6 X_ {ij} $ for at være summen af $ i $ th-spillerens evne til at score. Derefter spørger du om forventningen til $ Z = \ max_ {i , i “} \ lvert Y_i – Y_ {i”} \ rvert = Y _ {(n)} – Y _ {(1)} $ ved hjælp af notationen at $ Y _ {(1)} $ er den første sorterede værdi fra $ \ {Y_1, \ dots, Y_n \} $ (dvs. minimum) og $ Y _ {(n)} $ er $ n $ th (maksimum).
Individuelle score $ X_ {ij } $
Den nemmeste måde at finde fordelingen af $ X_ {ij} $ på, som i det svar, du linkede, er bare at tvinge den ved at overveje alle $ 6 ^ 4 = 1296 $ mulige ruller. Her er en hurtig Python-kode (der er sandsynligvis en bedre måde at gøre dette på …):
import numpy as np import matplotlib.pyplot as plt def as_kth_of(a, k, n): """vector a => shape (1, ..., 1, a.size, 1, ..., 1) where new shape is length n, a.size is in kth""" return a[(np.newaxis,) * k + (slice(None),) + (np.newaxis,) * (n - k - 1)] def pmf_drop_lowest(sides, number): rolls = np.arange(1, sides + 1) totals = sum(as_kth_of(rolls, k, number) for k in xrange(number)) mins = np.ones_like(totals) * 10000 for k in xrange(number): mins = np.minimum(mins, as_kth_of(rolls, k, number)) return np.bincount((totals - mins).ravel()) / totals.size score_pmf = pmf_drop_lowest(6, 4) plt.bar(np.arange(score_pmf.size) - .5, score_pmf)
Samlet evnescore $ Y_i $
Nu kan vi finde fordelingen af summen af evnescore, $ Y_i = X_ {i1} + X_ {i2} + \ dots + X_ {i6} $.
Hvad er fordelingen af summen af to uafhængige, diskrete tilfældige variabler $ A + B $? Nå, $ \ Pr (A + B = c) = \ sum_ {k = – \ infty} ^ \ infty \ Pr (A = k) \ Pr (B = k – c) $. Det viser sig, at denne operation er kendt som foldning , og heldigvis har numpy en funktion til at gøre det for os. (Den linkede Wikipedia-artikel har ikke meget om det for sandsynligheden; du kan prøve dette kapitel i Grinstead og Snell .)
Kode:
total_pmf = 1 for _ in xrange(6): total_pmf = np.convolve(total_pmf, score_pmf) plt.bar(np.arange(total_pmf.size) - .5, total_pmf)
Højeste og laveste værdier på $ Y $
Nu hvor vi kender fordelingen for $ Y_i $, er vores spørgsmål: hvad er den maksimale parvise afstand mellem to elementer af $ Y $? Alternativt, hvad er forskellen mellem den højeste og den laveste $ Y $?
Når vi skriver variablen, som vi holder af som $ Z = Y _ {(n)} – Y _ {(1)} $, har vi at $ \ EZ = \ E Y _ {(n)} – \ E Y _ {(1)} $, da forventningen er lineær. Dette sparer det arbejde, jeg oprindeligt skrev om dette svar til beregning af den fælles fordeling af de to. 🙂
Lad os først definere den kumulative fordelingsfunktion (cdf) $ \ Pr (Y \ le y) = \ sum_ {k = 0} ^ y \ Pr (Y = k) $. Derefter er cdfen for $ Y _ {(n)} $ $$ \ begin {align *} \ Pr (Y _ {(n)} \ le y) & = \ Pr \ left (Y_1 \ le y \ text {and} Y_2 \ le y \ text {and} \ dots \ text {and} Y_n \ le y \ right) \\ & = \ prod_ {i = 1} ^ n \ Pr \ left (Y_i \ le y \ right) \\ & = \ Pr (Y \ le y) ^ n \ end {align *} $$ da $ Y_i $ er uafhængige. Da $ Y _ {(n)} $ tager ikke-negative heltalværdier, kan vi beregne dens forventning som $$ \ begin {align *} \ E Y _ {(n)} & = \ sum_ {y = 1} ^ \ infty \ Pr (Y _ {(n)} \ ge y) = \ sum_ {y “= 0} ^ \ infty \ Pr (Y _ {(n)} > y”) \\ & = \ sum_ {y “= 0} ^ \ infty \ left (1 – \ Pr (Y _ {(n)} \ le y”) \ right) = \ sum_ {y “= 0} ^ \ infty \ left (1 – \ Pr (Y \ le y “) ^ n \ right). \ End {align *} $$ Kode:
n_players = 5 total_cdf = np.cumsum(total_pmf) exp_max = np.sum(1 - total_cdf ** n_players)
får exp_max
omkring 81 .5.
Tilsvarende for min: $$ \ begin {align *} \ Pr \ left (Y _ {(1)} \ le y \ right) & = 1 – \ Pr \ left (Y _ {(1)} > y \ right) \\ & = 1 – \ Pr \ left (Y_1 > y \ text {and} \ dots \ text {and} Y_n > y \ right) \\ & = 1 – \ Pr \ left (Y_i > y \ right) ^ n \\ & = 1 – \ left (1 – \ Pr \ left (Y \ le y \ right) \ right) ^ {n} \ end {align *} $$ og dens forventning er: $$ \ E Y _ {( 1)} = \ sum_ {y = 0} ^ \ infty \ Pr (Y _ {(1)} > y) = \ sum_ {y = 0} ^ \ infty \ left (1 – \ Pr \ venstre (Y \ le y \ højre) \ højre) ^ n $$
Kode:
exp_min = np.sum((1 - total_cdf) ** n_players)
får exp_min
omkring 65.3.
Den endelige forventede forskel mellem den heldigste og ulykkeligste af 5 spillere er i alt 16,2 point. (Det er meget!)
Forresten nævnte jeg, at jeg beregnede den fælles fordeling af $ Y _ {(1)} $ og $ Y _ {(n)} $ (som $ \ Pr (Y_ {n} = y “) \ Pr (Y _ {(1)} = y \ mid Y _ {(n)} = y”) $). Det viser sig, at for fem spillere er distribution af $ Y _ {(n)} – Y _ {(1)} $ ser således ud:
Kommentarer
- Bemærk, at det måske er bedre at evaluere kvaliteten af et sæt evner baseret på deres samlede point-købsscore i stedet for deres sum. Det irriterende ved det er, at du kan ' t point-buy en score under 7, så den ' er ikke altid veldefineret ….