Maksymalna oczekiwana różnica między graczami przy użyciu najniższego spadku 4k6

Gracze określonego TRPG mają postacie z 6 punktami umiejętności, każda z nich w przedziale 3-18. Jedną z metod ich generowania jest wypadnięcie 4k6 najniższej dla każdego z wyników. Oznacza to, że rzucane są czterema sześciokątnymi kośćmi i sumowane są trzy najwyższe wyniki.

Jaka jest oczekiwana największa różnica w sumie wyników umiejętności między 2 z tych 5 graczy?

Powiązane pytanie tutaj pokazuje, jak uzyskać rozkład najniższego spadku 4k3, ale jak mogę stamtąd przejść do odpowiedzi na moje pytanie powyżej?

Dobra odpowiedź wyjaśniłaby wynik w sposób, który może śledzić nowicjusz od statystyki.

Odpowiedź

$ \ newcommand {\ E} {\ mathbb {E}} $ (Piszę to zakładając, że jesteś zaznajomiony z manipulowaniem rozkładami prawdopodobieństwa i oczekiwaniami, ale mam nadzieję, że nic nadzwyczajnego. Daj mi znać, jeśli mam coś więcej wyjaśnić. Robię to również w dość obliczeniowy sposób, aby uzyskać odpowiedź, zamiast próbować zrobić to wszystko ręcznie.)

Powiedzmy, że mamy $ n = 5 $ graczy, z których każdy zwija jeden znak 6 punktów umiejętności, każda oznaczona jako $ X_ {ij} $. Zdefiniuj $ Y_i = \ sum_ {j = 1} ^ 6 X_ {ij} $ jako sumę wyników umiejętności gracza $ i $. Następnie pytasz o oczekiwaną wartość $ Z = \ max_ {i , i „} \ lvert Y_i – Y_ {i”} \ rvert = Y _ {(n)} – Y _ {(1)} $, używając notacji, że $ Y _ {(1)} $ jest pierwszą posortowaną wartością z $ \ {Y_1, \ dots, Y_n \} $ (czyli minimum), a $ Y _ {(n)} $ to $ n $ th (maksimum).

Indywidualne wyniki $ X_ {ij } $

Najłatwiejszym sposobem znalezienia rozkładu $ X_ {ij} $, tak jak w podanej odpowiedzi, jest po prostu brutalne wymuszenie tego, biorąc pod uwagę wszystkie 6 ^ 4 = 1296 $ możliwych rzutów. Oto krótki kod w Pythonie (prawdopodobnie jest lepszy sposób na zrobienie tego …):

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) 

Całkowity wynik umiejętności $ Y_i $

Teraz możemy znaleźć rozkład sumy wyników umiejętności, $ Y_i = X_ {i1} + X_ {i2} + \ dots + X_ {i6} $.

Jaki jest rozkład sumy dwóch niezależnych, dyskretnych zmiennych losowych $ A + B $? No cóż, $ \ Pr (A + B = c) = \ sum_ {k = – \ infty} ^ \ infty \ Pr (A = k) \ Pr (B = k – c) $. Okazuje się, że ta operacja jest znana jako splot i na szczęście numpy ma funkcję, która zrobi to za nas. (Prawdopodobny artykuł w Wikipedii nie zawiera zbyt wielu informacji; możesz spróbować rozdział Grinstead i Snell .)

Kod:

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) 

Najwyższe i najniższe wartości $ Y $

Teraz, gdy znamy rozkład $ Y_i $, nasze pytanie brzmi: jaka jest maksymalna odległość parami między dwoma elementami $ Y $? Alternatywnie, jaka jest różnica między najwyższym a najniższym $ Y $?

Zapisując zmienną, na której nam zależy, jako $ Z = Y _ {(n)} – Y _ {(1)} $, mamy że $ \ EZ = \ E Y _ {(n)} – \ E Y _ {(1)} $, ponieważ oczekiwanie jest liniowe. Oszczędza to pracy, którą wykonałem przy pierwotnym pisaniu tej odpowiedzi, przy obliczaniu wspólnego rozkładu tych dwóch. 🙂

Najpierw zdefiniujmy funkcję dystrybucji skumulowanej (cdf) $ \ Pr (Y \ le y) = \ sum_ {k = 0} ^ y \ Pr (Y = k) $. Następnie cdf $ Y _ {(n)} $ to $$ \ 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 *} $$, ponieważ $ Y_i $ są niezależne. Wówczas, ponieważ $ Y _ {(n)} $ przyjmuje nieujemne wartości całkowite, możemy obliczyć jego oczekiwanie 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 *} $$ Kod:

n_players = 5 total_cdf = np.cumsum(total_pmf) exp_max = np.sum(1 - total_cdf ** n_players) 

pobieranie exp_max około 81 .5.

Podobnie dla 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 *} $$, a jego oczekiwanie to: $$ \ 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 $$

Kod:

exp_min = np.sum((1 - total_cdf) ** n_players) 

otrzymuję exp_min około 65.3.

Ostateczna spodziewana różnica między najszczęśliwszymi i najgorszymi z 5 graczy to w sumie 16,2 punktów umiejętności. (To trochę dużo!)


Przy okazji wspomniałem, że obliczyłem wspólny rozkład $ Y _ {(1)} $ i $ Y _ {(n)} $ (as $ \ Pr (Y_ {n} = y „) \ Pr (Y _ {(1)} = y \ mid Y _ {(n)} = y”) $). Okazuje się, że dla pięciu graczy rozkład $ Y _ {(n)} – Y _ {(1)} $ wygląda następująco:

Komentarze

  • Zwróć uwagę, że może lepiej ocenić jakość zestawu umiejętności na podstawie ich łącznej liczby punktów, a nie ich sumy. Irytujące jest to, że możesz ' t punkt-kup wynik poniżej 7, więc ' nie zawsze jest dobrze zdefiniowany ….

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *