Hráči určitého TRPG mají postavy se 6 skóre schopností, každé skóre schopností se pohybuje od 3 do 18. Jednou z metod jejich generování je házení nejnižšího 4d6 pro každé skóre. To znamená, že jsou hodeny čtyři kostky se šesti tvářemi a jsou přidány tři nejvyšší výsledky.
Jaký je očekávaný nejvyšší rozdíl v součtu skóre schopností mezi 2 z těchto 5 hráčů?
Související otázka zde ukazuje, jak dosáhnout nejnižší distribuce 4d3, ale jak se odtud dostanu k odpovědi na mou otázku výše?
Dobrá odpověď vysvětlí výsledek způsobem, který může následovat statistický nováček.
Odpovědět
$ \ newcommand {\ E} {\ mathbb {E}} $ (píšu to za předpokladu, že jste obeznámeni s manipulací rozdělení pravděpodobnosti a očekáváními, ale doufám, že nic moc fantazijního. Dejte mi vědět, pokud bych měl něco vysvětlit. Dělám to také poměrně výpočtovým způsobem, abych dostal odpověď, místo abych se pokoušel vše zvládnout ručně.)
Řekněme, že máme $ n = 5 $ hráčů, z nichž každý má jednu postavu s 6 skóre schopností, každé označeno jako $ X_ {ij} $. Definujte $ Y_i = \ sum_ {j = 1} ^ 6 X_ {ij} $ jako součet skóre schopností hráče $ i $ th. Pak se ptáte na očekávání $ Z = \ max_ {i , i „} \ lvert Y_i – Y_ {i“} \ rvert = Y _ {(n)} – Y _ {(1)} $, pomocí zápisu, že $ Y _ {(1)} $ je první seřazená hodnota z $ \ {Y_1, \ dots, Y_n \} $ (tj. Minimum) a $ Y _ {(n)} $ je $ n $ th (maximum).
Individuální skóre $ X_ {ij } $
Nejjednodušší způsob, jak najít distribuci $ X_ {ij} $, stejně jako v odpovědi, kterou jste propojili, je pouze hrubou silou, když vezmete v úvahu všechny možné role $ 6 ^ 4 = 1296 $. Tady je rychlý kód v Pythonu (pravděpodobně existuje lepší způsob, jak to udělat …):
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)
Celkové skóre schopností $ Y_i $
Nyní můžeme najít rozdělení součtu skóre schopností, $ Y_i = X_ {i1} + X_ {i2} + \ dots + X_ {i6} $.
Jaké je rozdělení součtu dvou nezávislých, diskrétních náhodných proměnných $ A + B $? No, $ \ Pr (A + B = c) = \ sum_ {k = – \ infty} ^ \ infty \ Pr (A = k) \ Pr (B = k – c) $. Ukázalo se, že tato operace je známá jako convolution a naštěstí má numpy funkci, která to za nás udělá. (Propojený článek na Wikipedii toho moc pro pravděpodobnost nemá, můžete zkusit toto kapitola Grinstead a Snell .)
Kód:
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)
Nejvyšší a nejnižší hodnoty $ Y $
Nyní, když známe distribuci pro $ Y_i $, naše otázka zní: jaká je maximální párová vzdálenost mezi dvěma prvky $ Y $? Jaký je rozdíl mezi nejvyšším a nejnižším $ Y $?
Při zápisu proměnné, na které nám záleží, jako $ Z = Y _ {(n)} – Y _ {(1)} $, máme že $ \ EZ = \ E Y _ {(n)} – \ E Y _ {(1)} $, protože očekávání je lineární. To šetří práci, kterou jsem udělal při původním psaní této odpovědi při výpočtu společné distribuce těchto dvou. 🙂
Nejprve definujme funkci kumulativní distribuce (cdf) $ \ Pr (Y \ le y) = \ sum_ {k = 0} ^ y \ Pr (Y = k) $. Potom CDF $ Y _ {(n)} $ je $$ \ 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 {zarovnat *} $$, protože $ Y_i $ jsou nezávislé. Poté, protože $ Y _ {(n)} $ přebírá nezáporné celočíselné hodnoty, můžeme vypočítat jeho očekávání jako $$ \ 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 *} $$ Kód:
n_players = 5 total_cdf = np.cumsum(total_pmf) exp_max = np.sum(1 - total_cdf ** n_players)
získání exp_max
přibližně 81 .5.
Podobně pro 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 {a} 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 *} $$ a jeho očekávání je: $$ \ E Y _ {( 1)} = \ sum_ {y = 0} ^ \ infty \ Pr (Y _ {(1)} > y) = \ sum_ {y = 0} ^ \ infty \ left (1 – \ Pr \ left (Y \ le y \ right) \ right) ^ n $$
Kód:
exp_min = np.sum((1 - total_cdf) ** n_players)
přibližně exp_min
přibližně 65,3.
Konečný očekávaný rozdíl mezi nejšťastnějším a nejnešťastnějším z 5 hráčů je pak celkem 16,2 bodů schopností. (To je hodně!)
Mimochodem, zmínil jsem se, že jsem vypočítal společnou distribuci $ Y _ {(1)} $ a $ Y _ {(n)} $ (jako $ \ Pr (Y_ {n} = y „) \ Pr (Y _ {(1)} = y \ mid Y _ {(n)} = y“) $). Ukazuje se, že pro pět hráčů je distribuce $ Y _ {(n)} – Y _ {(1)} $ vypadá takto:
Komentáře
- Všimněte si, že by mohlo být lepší hodnotit kvalitu sady schopností spíše na základě jejich celkového bodového skóre nákupu než podle jejich součtu. ' t point-buy skóre pod 7, takže ' to není vždy dobře definované ….