Здравствуйте, Гость

Автор Тема: К расчёту вероятностей бросков вида NdM  (Прочитано 1066 раз)

Оффлайн agentgoblin

  • Гость
  • *
  • Сообщений: 21
    • Просмотр профиля
При расчёте вероятностей для броска вида NdM я применяю такую методику:

1. Для такого броска есть M в степени N (MN) различных комбинаций выпадения.
Диапазон сумм составит от N до N*M включительно.
Пример:
Цитировать
Для 1d6 это будет 61=6 вариантов. Диапазон от 1 до 6
Для 3d2 это будет 23=8 вариантов. Диапазон от 3 до 6
Для 4d8 это будет 84=4096 вариантов. Диапазон от 4 до 32
Эти числа понадобятся в дальнейшем.

2. Составляется "пирамида вероятностей". Идея мне пришла в голову после прочтения про "треугольник Паскаля".
В чистом виде треугольник является точным описанием вероятностей распределения сумм броска d2:
1d2   1   1
2d2   1   2   1
3d2   1   3   3   1
4d2   1   4   6   4   1
Для сумм чисел вероятность равна соответствующему числу в строке делённому на сумму строки.
Для приведённого выше 3d2 сумма строки равна 8 (или 23, как уже считали выше). Вероятности:
3 - 1/8 = 0,125 = 12,5%
4 - 3/8 = 0,375 = 37,5%
5 - 3/8 = 0,375 = 37,5%
6 - 3/8 = 0,125 = 12,5%

Для большего числа граней построение пирамиды несколько усложняется (элементы суммируются по M штук):
1d8   1   1   1   1   1   1   1   1
2d8   1   2   3   4   5   6   7   8   7   6   5   4   3   2   1
3d8   1   3   6   10   15   21   28   36   42   46   48   48   46   42   36   28   21   15   10   6   3   1
4d8   1   4   10   20   35   56   84   120   161   204   246   284   315   334   344   334  ...и т.д.
Соответствующим образом рассчитываем вероятности (например, для 4d8):
4 - 1/4096
5 - 4/4096
6 - 10/4096
7 - 20/4096
и т.д.

Эту методику я использовал в программе, генерирующей броски кубиков. Программа может генерировать броски от 1 до 20 кубиков с числом граней от 1 до 100 с бонусом к броску от -100 до +100. Дополнительные функции вызываются ПКМ (к сожалению, реализованы не все).
Для работы с программой может понадобиться .NET Framework 2.0 и ОС семейства Windows.

Замеченные ошибки: из-за большого числа комбинаций для некоторых видов бросков (вроде 15d30) возникает переполнение и вместо вероятностей фиксируется "бесконечность" либо неверный результат.

[Вложение удалено администратором]

Оффлайн Pigmeich

  • UR-D&D
  • Старожил
  • *
  • Сообщений: 2 375
  • Therefore I declare you...
    • Pigmeich
    • Просмотр профиля
    • RPG Awards
Привет ламерам от программирования!

А у меня в простеньком модуле на питоне никакого переполнения в жизнь не возникает. Интересно почему? Потому что я плавающую точку использую?
Everything I say, write, or post, doesn't constitute an official information. Ditto.

Всё что я говорю и пишу, не является официальной информацией. Я предупредил.

Оффлайн agentgoblin

  • Гость
  • *
  • Сообщений: 21
    • Просмотр профиля
Привет, великий гуру от программирования!

Реально, стоило мне использовать плавающую запятую. Почему я этого не делал? А хрен знает. Я вообще, забросил это дело, не доработав.

Кстати, вся эта ерунда интересна прежде всего алгоритмом, который имеет большую скорость и точность по сравнению с генерацией распределения путём ста тысяч бросков.
« Последнее редактирование: Июль 28, 2010, 18:43 от agentgoblin »

 

KW IP Stats