Как легко определить распределение результатов для нескольких кубиков?


21

Я хочу рассчитать распределение вероятностей для суммы комбинации костей.

Я помню, что вероятность - это количество комбинаций, которые составляют это число в общем количестве комбинаций (при условии, что кости имеют равномерное распределение).

Какие формулы для

  • Количество комбинаций всего
  • Количество комбинаций, которые составляют определенное количество

1
Я думаю, что вы должны рассматривать и как разные события. ( X 1 = 2 , X 2 = 1 )(X1=1,X2=2)(X1=2,X2=1)
Глубокий Север

Ответы:


15

Точные решения

Количество комбинаций в бросках, конечно, .n6n

Эти вычисления легче всего сделать, используя функцию генерации вероятности для одного кристалла,

p(x)=x+x2+x3+x4+x5+x6=x1x61x.

(На самом деле это в раз больше ПГФ - я позабочусь о коэффициенте в конце.)66

Pgf для рулонов - это . Мы можем вычислить это довольно напрямую - это не закрытая форма, но она полезна - используя Биномиальную теорему:np(x)n

p(x)n=xn(1x6)n(1x)N

знак равноИксN(ΣКзнак равно0N(NК)(-1)КИкс6К)(ΣJзнак равно0(-NJ)(-1)JИксJ),

Число способов получить сумму, равную на кубике, представляет собой коэффициент в этом произведении, который мы можем выделить какмИксм

6k+j=mn(nk)(nj)(1)k+j.

Сумма по всем неотрицательным и для которых ; следовательно, оно конечно и имеет только около членов. Например, число способов суммирования в бросках является суммой всего двух слагаемых, потому что можно записать только как и :kj6k+j=mn(mn)/6m=14n=311=14360+1161+5

(30)(311)+(31)(35)

=1(3)(4)(13)11!+3(3)(4)(7)5!

=1212133267=15.

(Вы также можете быть умным и заметить, что ответ будет таким же для по симметрии 1 <-> 6, 2 <-> 5 и 3 <-> 4, и есть только один способ расширить при , а именно при и , что даетмзнак равно77-36К+JКзнак равно0Jзнак равно4

(30)(-34)знак равно15,

Следовательно, вероятность равна = , около 14%.15/635/36

К тому времени, когда это становится болезненным, Центральная предельная теорема дает хорошие приближения (по крайней мере, к центральным слагаемым, где находится между и : на относительной основе приближения, которые он дает для значений хвоста, становятся все хуже и хуже при увеличении ).м7n23n7n2+3nn

Я вижу, что эта формула дается в ссылках Srikant на статью в Википедии, но не приводится никакого обоснования и не приводятся примеры. Если этот подход выглядит слишком абстрактным, запустите вашу любимую систему компьютерной алгебры и попросите ее расширить мощность : вы можете прочитать все набор значений сразу. Например , однострочник Mathematicanthx+x2++x6

With[{n=3}, CoefficientList[Expand[(x + x^2 + x^3 + x^4 + x^5 + x^6)^n], x]]

Будет ли этот код Mathematica работать с вольфрам альфа?

1
Это работает. Я попробовал вашу более раннюю версию, но не смог понять смысл вывода.

2
@Srikant: Expand [Sum [x ^ i, {i, 1,6}] ^ 3] также работает в WolframAlpha

1
@ A.Wilson Я полагаю, что многие из этих ссылок дают четкий путь к обобщению, которое в этом примере . Если вы хотите, чтобы код вычислял эти вещи, см. Stats.stackexchange.com/a/116913 для полностью реализованной системы. В качестве другого примера, код Mathematica(x+x2++x6)(x+x2+x3+x4)3RClear[x, d]; d[n_, x_] := Sum[x^i, {i, 1, n}]; d[6, x] d[4, x]^3 // Expand
whuber

1
Обратите внимание, что пояснение @ whuber относится к 1d6 + 3d4, и это должно помочь вам. Для произвольного wdn + vdm (x + x ^ 2 + ... + x ^ w) ^ n (x + x ^ 2 + ... + x ^ v) ^ m. Дополнительные члены - это многочлены, построенные и умноженные на произведение таким же образом.
А. Уилсон

8

Еще один способ быстро вычислить распределение вероятности броска костей - использовать специальный калькулятор, разработанный специально для этой цели.

У Торбена Могенсена , профессора CS в DIKU, есть превосходный ролик для игры в кости под названием Troll .

Ролик для игры в кости Тролля и калькулятор вероятности распечатывает распределение вероятности (pmf, гистограмма и, необязательно, cdf или ccdf), среднее значение, разброс и среднее отклонение для множества сложных механизмов броска костей. Вот несколько примеров, демонстрирующих язык броска игральных костей Тролля:

Раскатать 3 6 кубика и просуммировать их: sum 3d6.

Ролл 4 6-сторонние кости, держать высокий 3 и просуммировать их: sum largest 3 4d6.

Ролл в «взрывающейся» 6-сторонний кубик (т.е. каждый раз , когда «6» приходит, добавить 6 к общей сумме и рулон снова) sum (accumulate y:=d6 while y=6).

Исходный код Troll SML доступен, если вы хотите увидеть, как он реализован.

Профессор Моргенсен также имеет 29-страничный документ « Механизмы броска костей в ролевых играх », в котором он обсуждает многие механизмы бросания костей, реализованные Троллем, и некоторые математические разработки, стоящие за ними.

Аналогичное бесплатное программное обеспечение с открытым исходным кодом - Dicelab , которое работает как в Linux, так и в Windows.


7

Пусть первый кубик будет красным, а второй - черным. Тогда есть 36 возможных результатов:

12345611,11,21,31,41,51,623456722,12,22,32,42,52,634567833,13,23,33,43,53,645678944,14,24,34,44,54,6567891055,15,25,35,45,55,66789101166,16,26,36,46,56,6789101112

Каждый из этих 36 ( ) результатов одинаково вероятен.red,black

Когда вы суммируете числа на гранях (итоговое значение в ), некоторые из (красных, черных) результатов будут иметь одинаковую общую сумму - вы можете увидеть это в таблице в вашем вопросе.blue

Так, например, есть только один способ получить всего (т.е. только событие ( )), но есть два способа получить (т.е. элементарные события ( ) и ( )). Таким образом, всего в два раза больше, чем . Точно так же есть три способа получить , четыре способа получить и так далее.1 , 1 3 2 , 1 1 , 2 3 2 4 521,132,11,23245

Теперь, поскольку у вас есть 36 возможных (красный, черный) результатов, общее количество способов получить все разные итоги также составляет 36, поэтому вам нужно разделить на 36 в конце. Ваша общая вероятность будет 1, как и должно быть.


Вау, стол красивый!
Глубокий север

Очень симпатично
волки

6

Существует очень аккуратный способ вычисления комбинаций или вероятностей в электронной таблице (например, в Excel), которая напрямую вычисляет свертки.

Я сделаю это с точки зрения вероятностей и проиллюстрирую это для шестигранных костей, но вы можете сделать это для костей с любым числом сторон (включая добавление разных).

(кстати, это также легко в чем-то вроде R или Matlab, который будет делать свертки)

Начните с чистого листа, в несколько столбцов, и двигайтесь вниз по ряду строк сверху (более 6).

  1. поместите значение 1 в ячейку. Это вероятности, связанные с 0 кубиками. поставьте 0 слева; это столбец значений - продолжайте вниз с 1,2,3, насколько вам нужно.

  2. переместить один столбец вправо и вниз на строку от «1». введите формулу "= сумма (", затем стрелка вверх влево (чтобы выделить ячейку с 1 в нем), нажмите ":" (чтобы начать ввод диапазона) и затем стрелку вверх 5 раз, а затем ") / 6 "и нажмите Enter - так вы получите формулу =sum(c4:c9)/6 (где здесь C9ячейка с 1 в ней).

    введите описание изображения здесь

    Затем скопируйте формулу и вставьте ее в 5 ячеек под ней. Каждый из них должен содержать 0,16667 (ish).

    введите описание изображения здесь

    Не вводите ничего в пустые ячейки, к которым относятся эти формулы!

  3. переместитесь вниз 1 и вправо 1 от вершины этого столбца значений и вставьте ...

    введите описание изображения здесь

    ... в общей сложности еще 11 значений. Это будут вероятности для двух кубиков.

    введите описание изображения здесь

    Неважно, если вы вставите несколько слишком много, вы просто получите нули.

  4. повторите шаг 3 для следующего столбца для трех кубиков, и снова для четырех, пяти и т.д. кубиков.

    введите описание изображения здесь

    Здесь мы видим, что вероятность броска на 4d6 равна 0,096451 (если вы умножите на вы сможете записать это как точную дробь).4 61246

Если вы знакомы с Excel - например, копирование формулы из ячейки и вставка во многие ячейки в столбце, вы можете сгенерировать все таблицы, скажем, до 10d6 примерно за минуту (возможно, быстрее, если вы это сделали несколько раз).


Если вы хотите рассчитывать комбинации вместо вероятностей, не делите на 6.

Если вам нужны кости с разным количеством граней, вы можете сложить (а не 6) ячеек, а затем разделить на . Вы можете смешивать кубики по столбцам (например, сделать столбец для d6 и один для d8, чтобы получить функцию вероятности для d6 + d8):кkk

введите описание изображения здесь


5

Приблизительное решение

Я объяснил точное решение ранее (см. Ниже). Сейчас я предложу приблизительное решение, которое может лучше удовлетворить ваши потребности.

Позволять:

с я = 1 , . , , NXi быть результатом рулоне , с которыми сталкиваются в кости , где .si=1,...n

нS будет суммой всех кубиков.n

X¯ будет средним по выборке.

По определению имеем:

X¯=iXin

Другими словами,

X¯=Sn

Идея теперь состоит в том, чтобы визуализировать процесс наблюдения как результат бросания одной и той же кости раз вместо результата бросания игральных костей. Таким образом, мы можем вызвать центральную предельную теорему (игнорируя технические особенности, связанные с переходом от дискретного распределения к непрерывному), мы имеем как :Xinnn

X¯N(μ,σ2/n)

где,

μ=(s+1)/2 - среднее число бросков одной кости и

σ2=(s21)/12 - это связанная дисперсия.

Вышеприведенное, очевидно, является приблизительным, поскольку базовое распределение имеет дискретную поддержку.Икся

Но,

Sзнак равноNИкс¯ .

Таким образом, мы имеем:

S~N(Nμ,Nσ2) .

Точное решение

В Википедии есть краткое объяснение того, как рассчитать необходимые вероятности. Я более подробно остановлюсь на том, почему объяснение там имеет смысл. В максимально возможной степени я использовал подобные обозначения к статье Википедии.

Предположим, что у вас есть кубиков, каждый из которых имеет граней, и вы хотите вычислить вероятность того, что один бросок из всех кубиков в сумме составит . Подход заключается в следующем:NsNК

Определение:

Fs,N(К) : вероятность того, что вы получите всего за один бросок из кубиков с гранями.КNs

По определению имеем:

Fs,1(К)знак равно1s

Выше указано, что если у вас есть только одна игральная кость с гранями, вероятность получения полного между 1 и s является знакомой .sК1s

Рассмотрим ситуацию, когда вы бросаете два кубика. Вы можете получить сумму следующим образом: первый бросок - от 1 до а соответствующий бросок для второго - от до . Таким образом, мы имеем:КК-1К-11

Fs,2(К)знак равноΣязнак равно1язнак равноК-1Fs,1(я)Fs,1(К-я)

Теперь рассмотрим бросок из трех кубиков: вы можете получить сумму если вы бросите 1 к на первых кубиках, а сумма на оставшихся двух кубиках составит от до . Таким образом,КК-2К-12

Fs,3(К)знак равноΣязнак равно1язнак равноК-2Fs,1(я)Fs,2(К-я)

Продолжая приведенную выше логику, получаем уравнение рекурсии:

Fs,N(К)знак равноΣязнак равно1язнак равноК-N+1Fs,1(я)Fs,N-1(К-я)

Смотрите ссылку на Википедию для более подробной информации.


@Srikant Отличный ответ, но разрешает ли эта функция что-то арифметическое (т.е. не рекурсивное)?
К. Росс

@C. Росс К сожалению я так не считаю. Но я подозреваю, что рекурсия не должна быть такой сложной, если речь идет о достаточно малых n и малых s. Вы можете просто создать справочную таблицу и использовать ее повторно по мере необходимости.

1
На странице википедии, на которую вы ссылаетесь, есть простая нерекурсивная формула, представляющая собой единую сумму. Один вывод в ответе Уубера.
Дуглас Заре

Якорь вики-ссылки мертв, вы знаете о замене?
Полуночник

4

Характеристические функции могут сделать вычисления с участием сумм и разностей случайных величин действительно легкими. Mathematica имеет множество функций для работы со статистическими распределениями, включая встроенную функцию для преобразования распределения в его характеристическую функцию.

Я хотел бы проиллюстрировать это на двух конкретных примерах: (1) Предположим, что вы хотите определить результаты броска костей с разным числом сторон, например, бросить два шестигранных кубика плюс один восьмигранный кубик (т.е. , 2d6 + d8 )? Или (2) предположим, что вы хотели найти разницу между двумя бросками костей (например, d6-d6 )?

Простой способ сделать это - использовать характеристические функции лежащих в основе дискретных равномерных распределений. Если случайная величина имеет массовую функцию вероятности , то ее характеристическая функция является просто дискретным преобразованием Фурье от , то есть . Теорема говорит нам:f φ X ( t ) f φ X ( t ) = F { f } ( t ) = E [ e i t X ]Икс еφИкс(T)еφИкс(T)знак равноF{е}(T)знак равноЕ[еяTИкс]

Если независимые случайные величины и имеют соответствующие функции вероятности масс и , то pmf суммы этих RV является сверткой их pmfs .ИксYеграммчасИкс+Yчас(N)знак равно(е*грамм)(N)знак равноΣмзнак равно-е(м)грамм(N-м)

Мы можем использовать свойство свертки преобразований Фурье, чтобы переформулировать это более просто с точки зрения характеристических функций:

Характеристическая функция суммы независимых случайных величин и равна произведению их характеристических функций .φИкс+Y(T)ИксYφИкс(T)φY(T)

Эта функция Mathematica сделает характеристическую функцию для s-сторонней матрицы:

MakeCf [s_]: = 
 Модуль [{Cf}, 
  Cf: = CharacteristicFunction [DiscreteUniformDistribution [{1, s}], 
    т];
  Cf]

PMF распределения может быть восстановлен из его характеристической функции, потому что преобразования Фурье обратимы. Вот код Mathematica, чтобы сделать это:

RecoverPmf [Cf_]: = 
  Модуль [{F}, 
    F [y_]: = SeriesCoefficient [Cf /. t -> -I * Log [x], {x, 0, y}];
    F]

Продолжая наш пример, пусть F будет pmf, полученным в результате 2d6 + d8.

F := RecoverPmf[MakeCf[6]^2 MakeCf[8]]

Есть результатов. Область поддержки F: . Три минуты, потому что вы бросаете три кубика. А двадцать - это максимум, потому что . Если вы хотите увидеть изображение F, вычислить628знак равно288Sзнак равно{3,...,20}20знак равно26+8

In: = F / @ Range [3, 20]

Out = {1/288, 1/96, 1/48, 5/144, 5/96, 7/96, 13/144, 5/48, 1/9, 1/9, \
5/48, 13/144, 7/96, 5/96, 5/144, 1/48, 1/96, 1/288}

Если вы хотите узнать количество результатов, равное 10, вычислите

In: = 6 ^ 2 8 F [10]

Out = 30

Если независимые случайные величины и имеют соответствующие функции вероятности масс и , то pmf разности этих RV является взаимной корреляцией их pmfs .ИксYеграммчасИкс-Yчас(N)знак равно(еграмм)(N)знак равноΣмзнак равно-е(м)грамм(N+м)

Мы можем использовать свойство взаимной корреляции преобразований Фурье, чтобы переформулировать это более просто с точки зрения характеристических функций:

Характеристическая функция разности двух независимых случайных величин равна произведению характеристической функции и ( Примечание: отрицательный знак перед переменной t во второй характеристической функции).φИкс-Y(T)Икс,YφИкс(T)φY(-T)

Итак, используя Mathematica, найти pmf G d6-d6:

G := RecoverPmf[MakeCf[6] (MakeCf[6] /. t -> -t)]

Есть результатов. Область поддержки G: . -5 мин, потому что . И 5 это максимум, потому что . Если вы хотите увидеть изображение G, вычислить62знак равно36Sзнак равно{-5,...,5}-5знак равно1-66-1знак равно5

In: = G / @ Range [-5, 5]

Out = {1/36, 1/18, 1/12, 1/9, 5/36, 1/6, 5/36, 1/9, 1/12, 1/18, 1/36}

1
Конечно, для дискретных распределений, в том числе распределений с конечной поддержкой (например, рассматриваемых здесь), cf - это просто функция, генерирующая вероятность, вычисленная при x = exp (it), что делает ее более сложным способом кодирования той же информации.
whuber

2
@whuber: Как вы говорите, cf, mgf и pgf более или менее одинаковы и легко трансформируются друг в друга, однако Mathematica имеет встроенную функцию cf, которая работает со всеми известными ей распределениями вероятностей, тогда как она не у меня нет встроенного pgf. Это делает код Mathematica для работы с суммами (и различиями) костей с использованием cfs особенно элегантным для построения, независимо от сложности выражения костей, как я надеюсь, я продемонстрировал выше. Кроме того, не помешает узнать, как cfs, FT, свертки и взаимные корреляции могут помочь решить подобные проблемы.

1
@Елиша: Хорошие моменты, все они. Я думаю, что больше всего меня интересует то, действительно ли ваши десять или около того строк кода Mathematica более «изящны» или эффективны, чем единственная строка, которую я предложил ранее (или даже более короткая строка, которую Srikant передавал Wolfram Alpha). Я подозреваю, что внутренние манипуляции с характеристическими функциями более трудны, чем простые свертки, необходимые для умножения многочленов. Конечно, последние легче реализовать в большинстве других программных сред, как указывает ответ Glen_b. Преимущество вашего подхода заключается в большей общности.
whuber

4

Вот еще один способ вычислить распределение вероятности суммы двух кубиков вручную, используя свертки.

Чтобы сделать пример по-настоящему простым, мы рассчитаем распределение вероятностей суммы трехстороннего кристалла (d3), случайную переменную которого мы назовем X, и двустороннего кристалла (d2), случайную переменную которого мы будем позвони Ю.

Вы собираетесь сделать стол. В верхнем ряду напишите распределение вероятностей X (результаты проверки справедливости d3). Внизу в левом столбце запишите распределение вероятностей Y (результаты проверки справедливой d2).

Вы собираетесь построить внешнее произведение верхнего ряда вероятностей с левым столбцом вероятностей. Например, нижняя правая ячейка будет произведением Pr [X = 3] = 1/3 раза Pr [Y = 2] = 1/2, как показано на прилагаемом рисунке. В нашем упрощенном примере все ячейки равны 1/6.

Далее вы будете суммировать по наклонным линиям матрицы внешнего произведения, как показано на прилагаемой диаграмме. Каждая наклонная линия проходит через одну или несколько ячеек, которые я закрасил одинаково: верхняя линия проходит через одну синюю ячейку, следующая линия проходит через две красные ячейки и так далее.

альтернативный текст

Каждая из сумм вдоль наклонов представляет вероятность в полученном распределении. Например, сумма эритроцитов равна вероятности суммирования двух костей до 3. Эти вероятности показаны в правой части сопровождающей диаграммы.

Эту технику можно использовать с любыми двумя дискретными распределениями с конечной поддержкой. И вы можете применять его итеративно. Например, если вы хотите узнать распределение трех шестигранных кубиков (3d6), вы можете сначала вычислить 2d6 = d6 + d6; тогда 3d6 = d6 + 2d6.

Существует бесплатный (но закрытая лицензия) язык программирования под названием J . Это основанный на массивах язык с его корнями в APL. Он имеет встроенные операторы для выполнения внешних произведений и сумм вдоль наклонов в матрицах, что делает метод, который я иллюстрировал, довольно простым для реализации.

В следующем коде J я определяю два глагола. Сначала глагол dсоздает массив, представляющий pmf s-стороннего штампа. Например, d 6это pmf 6-стороннего штампа. Во-вторых, глагол convнаходит внешнее произведение двух массивов и сумм вдоль наклонных линий. Итак conv~ d 6, выведите PMF из 2d6:

д =: $%
ко =: + // @ (* /).
|: (2 + i.11) ,: conv ~ d 6
 2 0.0277778
 3 0.0555556
 4 0,0833333
 5 0.111111
 6 0,138889
 7 0,166667
 8 0,138889
 9 0.111111
10 0.0833333
11 0.0555556
12 0.0277778

Как видите, J загадочен, но лаконичен.


3

Это на самом деле удивительно сложный вопрос. К счастью для вас, существует точное решение, которое очень хорошо объяснено здесь:

http://mathworld.wolfram.com/Dice.html

Вероятность, которую вы ищете, определяется уравнением (10): «Вероятность получения p очков (бросок p) на n s-сторонних кубиках».

В вашем случае: p = наблюдаемый результат (сумма всех кубиков), n = количество кубиков, s = 6 (шестигранный кубик). Это дает вам следующую функцию вероятности массы:

п(ИксNзнак равноп)знак равно1sNΣКзнак равно0(п-N)/6(-1)К(NК)(п-6К-1N-1)

Добро пожаловать на наш сайт, Феликс!
whuber

1

Люблю имя пользователя! Отлично сработано :)

Результатами, которые вы должны посчитать, являются броски костей, все из них, как показано в вашей таблице.6×6знак равно36

Например, времени, когда сумма равна , и времени, когда сумма равна , и времени, когда сумма является суммой. это , и так далее.136223634364


Я действительно смущен этим. Я ответил на очень недавний вопрос новичка от кого-то по имени die_hard, которого, очевидно, больше не существует, а затем нашел мой ответ, прикрепленный к этой древней ветке!
креозот

Ваш ответ на вопрос по адресу stats.stackexchange.com/questions/173434/… был объединен с ответами на этот дубликат.
whuber

1

Вы можете решить это с помощью рекурсивной формулы. В этом случае вероятности бросков с кубиками рассчитываются по броскам с кубиком.NN-1

aN(L)знак равноΣL-6КL-1 и N-1К6(N-1)aN-1(К)

Первым пределом для k в сумме являются шесть предыдущих чисел. Например, если вы хотите бросить 13 с 3 кубиками, то вы можете сделать это, если ваши первые два кубика выпадут между 7 и 12.

Вторым пределом для k в сумме являются пределы того, что вы можете бросить с n-1 кубиком.

Результат:

1 1 1  1  1   1
1 2 3  4  5   6   5  4   3   2   1
1 3 6  10 15  21  25 27  27  25  21  15  10  6    3   1
1 4 10 20 35  56  80 104 125 140 146 140 125 104  80  56  35  20  10   4   1
1 5 15 35 70 126 205 305 420 540 651 735 780 780 735 651 540 420 305 205 126 70 35 15 5 1  

редактировать: приведенный выше ответ был ответ от другого вопроса, который был объединен в вопрос С.Росс

Приведенный ниже код показывает, как вычисления для этого ответа (на вопрос, требующий 5 кубиков) были выполнены в R. Они аналогичны суммированию, выполненному в Excel в ответе Глена Б.

# recursive formula
nextdice <- function(n,a,l) {
  x = 0
  for (i in 1:6) {
    if ((l-i >= n-1) & (l-i<=6*(n-1))) {
      x = x+a[l-i-(n-2)]
    }
  }
  return(x)  
}  

# generating combinations for rolling with up to 5 dices
a_1 <- rep(1,6)
a_2 <- sapply(2:12,FUN = function(x) {nextdice(2,a_1,x)})
a_3 <- sapply(3:18,FUN = function(x) {nextdice(3,a_2,x)})
a_4 <- sapply(4:24,FUN = function(x) {nextdice(4,a_3,x)})
a_5 <- sapply(5:30,FUN = function(x) {nextdice(5,a_4,x)})

@ user67275 Ваш вопрос объединен с этим вопросом. Но мне интересно, что ваша идея была за вашей формулой: «Я использовал формулу: нет способов получить 8: 5_H_2 = 6_C_2 = 15» ?
Секст Эмпирик

1

ИксNзнак равноКИксК

(Икс6+Икс5+Икс4+Икс3+Икс2+Икс16)Nзнак равно(Икс(1-Икс6)6(1-Икс))N

Так, например, с шестью кубиками и цельюКзнак равно22 , вы найдете . Эта ссылка (на вопрос math.stackexchange) дает и другие подходып(Икс6знак равно22)знак равно1066

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.