Набор игроков

Завершенные игры

Новые блоги

- Все активные блоги

Форум

- Для новичков (3749)
- Общий (17782)
- Игровые системы (6249)
- Набор игроков/поиск мастера (41607)
- Котёл идей (4311)
- Конкурсы (16074)
- Под столом (20428)
- Улучшение сайта (11248)
- Ошибки (4385)
- Новости проекта (14628)
- Неролевые игры (11855)

Расчет вероятности упеха/провала в самодельной системе

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


Классический подход к розыгрышу исхода события основан на суммировании положительных и отрицательных факторов и сравнении полученного числа с результатом броска. Такие системы могут быть линейными, когда используется один куб, или не линейными. 3д6 - нелинейная. Функции вероятности такого броска отдаленно напоминает гауссиан. Плотность функции вероятности максимальна в районе средних значений и резко спадает на краях. Получается эффект "обычности среднего". Именно его ты и имеешь ввиду, когда говоришь про бОльшую реалистичность. Наверное ты прав. <- это часть дискуссии из прошлой темы
Моя система построена по другому принципу. (Оговорюсь сразу, что я не претендую на супер-реалистичность и какое-то превосходство на другими. Это просто эксперимент.)
При проверке на исход события вычисляется вероятность успеха. Не ставится порог, который нужно перебросить тем или иным набором костей, а именно рассчитывается конкретное число (например 83%).
Разумеется после этого определить исход проще всего именно броском д100.
Как? Подробнее. И немного "для идиотов".
Ладно. Я попробую объяснить.
Что мы хотим? - Получить удобный способ пересчитать соотношение сложности задачи, навыка персонажа, всяких модификаторов в голую вероятность успеха или провала.
Фишка в том, что в "реалистичной" системе есть градации успеха кроме "да" и "нет".
Это верно, но об это чуть позже. Пока просто да/нет.
Для простоты учитывать влияние разных факторов будем простым суммированием. Это удобно и привычно.
Например персонаж хочет перепрыгнуть через яму.
Сила персонажа +3
Навык прыжков +2
Яма средней ширины -5 (минус потому, что мешает выполнению задачи)
Идет дождь -1
Персонаж бухой -2
------------------------------
Итого 3+2-4-1-2= -2
Понятно, что все числа определяются балансом системы. Пусть для удобства положительные соотношения скорее успешны, а отрицательные скорее провальные. Нолик 50 на 50. То есть наши -3 - это не очень...
Теперь важный момент. Удача. В некоторых случаях от нее зависит очень много, а в некоторых ничего. Например попытка поднять камень определяется наличием силы. Если силенок маловато - провал гарантирован. Другие задачи сильно зависят от удачи, а от навыков и модификаторов - слабо. Это тоже как-то хотелось бы учесть.
Рассмотрим крайний случай: задача, на которую удача не влияет совсем. Как будет выглядеть функция вероятности успеха? Вот так:

Это фигня в математике называется функцией Хевисайда. Ноль в минусе, единица в плюсе. Зачем нам это знать? А вот зачем! Мы же хотим функцию, а Хевисайда имеет несколько очень удобных приближений гармоническими функциями. Например:
y=0.5*(1+th(x/k))
при k стремящемся к нулю получим точную Хевисайду как на первой картинке. А при других k получим как раз то, что нам нужно.

В случае прыжка через яму из примера выше получаем вероятность успеха 12%. Если бы персонаж не бухал (убираем -2) - вероятность успеха 34%. А если рассмотреть благоприятную ситуацию с положительной суммой факторов например +5, то вероятность успеха аж 96%.
Здесь k=3. Это означает, что при отклонении на 3 от нуля результат с большой степенью определен: или удача или провал почти в 9 из 10 случаев. Если от удачи зависит много, берем больший k. Меньше - меньший. Вот картинка для разных k.


С помощью д100 мы удобно переходим к предельному значению кубика:
D = 50*(1-th(S / R)), где
D - предел броска, необходимый для успеха,
S - сумма всех факторов,
R - уровень случайности.
Теперь что касается разных степеней успеха вместо да/нет. Мне это тоже очень удобно сделать с помощью такого подхода. Например, я хочу четыре исхода:
Точно нет
Скорее нет
Скорее да
Точно да
Пусть старая функция D = 50*(1-th(S / R)) определяет уровень границы между "скорее нет" и "скорее да".
Две других границы определим как
D = 50*(1-th(S / R - 1))
D = 50*(1-th(S / R + 1))

Как это выглядит? А вот так:

Все, что выше зеленой кривой - абсолютный успех,
между синей и зеленой - "скорее да",
между красной и синей - "скорее нет",
ниже красной - полный провал.
Как выглядят вероятности исходов? А вот так:

Здесь посчитана вероятность отдельного исхода. Видно, что в районе ниже -3 почти всегда полный провал. -2, -1 доминирует "скорее нет".. ну и так далее...

Как это работает на практике?
У меня есть табличка в екселе:

Я заполняю все факторы и получаю пороговые значения. В правой части генерится текст для вставки в пост. Кстати, хороший повод проверить, как это работает:

Прыжок через яму => 13 / 51 / 89


Здесь 13/51/89 - пороговые значения кубика для разных степеней успеха/неудачи.
Меньше 13 - полный провал. Упал в яму и расшибся.
От 13 до 50 - частичный провал. Упал, но смог смягчить падение.
От 51 до 88 - частичный успех. Не упал, но ободрался о край.
89 и более - полный успех.
Автор: dmitry1204 [offline] , 08.12.2018 19:17 | Отредактировано 11.01.2019 в 23:26 1

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

Чтобы это было работающей системой, это ядро системы должно быть снабжено несколькими огромными списками. Первый -- какая дисперсия соответствует каждому действию. Например:
Подъем тяжестей -- 0
Прыжок в длину -- 3
Стрельба в цель -- ??
Починка сгоревшего электронного транклюкатора -- ??
Убеждение бармена, что тебе уже исполнилось 18 -- ??
и т.д. Обращаю внимание, это не то что можно оставлять на "ну ясно же". Нельзя из общих знаний о мире понять, чему должно быть равно значение этого параметра для конкретной задачи.
Далее, нужен большой список модификаторов:
яма шириной 1 метр -- ??
яма шириной 2 метра -- ??
яма шириной 3 метра -- ??
...
Выпил -- ??
Идет дождь -- ??
Под рукой нет осциллографа -- ??

И т.д. Опять же, эти величины не вытаксиваются пользователем системы из знаний о мире, они могут только сообщаться системой.

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

А вот когда все это будет прописано
Автор: bookwarrior [offline] , 08.12.2018 19:56 2

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

PS избыточная сложность и не применимость системы для настольной игры не является фатальным недостатком. Тот же S.P.E.C.I.A.L., например, тоже сложен и кроме как в компьютерной игре его использовать нереально, но при этом он крут и известен. Ну да, возможно, что бы сделать систему dmitry1204 известной ему придется сделать отдельную игру или громадную онлайн таблицу для пользователей ДМа(вместо книжки-рулбука), что бы и прочие могли по ней играть\мастерить, но это все же не повод считать её изначально мертворожденной.
Автор: Edvard Lori [offline] , 08.12.2018 20:13 3

Чтобы это было работающей системой, это ядро системы должно быть снабжено несколькими огромными списками.
Все верно. А списки эти составляются и уточняются путем тестирования игровой механики на практике.
Встала перед персонажами необходимость прыгать через яму, мастер почесал маковку и выкатил первую редакцию таблицы сложностей разных ям. Игроки перепрыгнули (или нет). Мастер табличку подкорректировал. И так далее.
Я не вижу смысла писать том уровня гурпс. Мне он просто не нужен, я не планирую игры, в которых игроки будут препарировать систему и вычислять оптимальные билды. Но и совсем без системы не хочу. Мне нравятся числа, и я люблю всякие эксперименты с ними.
Хотя конечно что-то предварительно написать нужно. Основные таблицы должны быть представлены игрокам на момент генережки персонажей, но их не так много.
Автор: dmitry1204 [offline] , 08.12.2018 20:19 4

новаторский подход
Спасибо за теплые слова.
Кстати, идея с онлайн таблицами и автоматизированными расчетами, доступными для всех, мне очень нравится. Но сперва все это надо потестировать в модуле. Еще не известно, как оно себя покажет.
Автор: dmitry1204 [offline] , 08.12.2018 20:25 5

С первого прочтения не сильно вчитывался и потому задам возможно глупый вопрос.

Я правильно понимаю, что выпивание бутылки водки более пагубно (в смысле уменьшения вероятности успеха) для человека прыгающего через яму под дождём, ночью с огнестрельным ранением, чем для человека прыгающего через яму ярким солнечным днём в полном здравии?
Автор: LOKY1109 [M] [offline] , 09.12.2018 10:15 6

С первого прочтения не сильно вчитывался и потому задам возможно глупый вопрос.

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


Давай посмотрим. Вот несколько случаев.
Задача средней сложности, посильная для персонажа, но может не получиться.

Прыжок через яму трезвым => 13 / 51 / 89


Прыжок через яму пьяным => 35 / 80 / 98


При прыжке трезвым вероятность успеха 50%. После бутылки - 21% Вероятность снизилась на 29% или в 2.38 раза.

Второй случай. Очень неблагоприятные условия.

Прыжок через яму трезвым ночью под дождем с ранением => 67 / 95 / 100


Прыжок через яму пьяным ночью под дождем с ранением => 89 / 99 / 101


Вероятность успеха 6%, после бутылки она упала до 2%.

Третий случай. Очень благоприятные условия.

Прыжок через яму в волшебных трусах трезвым => 1 / 1 / 4


Прыжок через яму в волшебных трусах пьяным => 1 / 3 / 13


Общая вероятность успеха 100%, после выпивки - 98%.

Получается, что влияние небольшого негативного фактора (Алкоголь -2) велико тогда, когда остальные факторы находятся в балансе, а их сумма не очень далеко от нуля. Если же положительные или отрицательные факторы сильно перевешивают и приближают исход к стопроцентному провалу или успеху, то небольшая поправка погоды не делает.

Наглядно это можно увидеть взяв производную от функции вероятности.

Производная показывает скорость роста функции. Чем производная выше, тем сильнее небольшая поправка (например Алкоголь -2) влияет на вероятность. В районе 0 производная максимальна, аж 16%. А по бокам производная убывает, делая мелкие факторы незначительными.
Автор: dmitry1204 [offline] , 09.12.2018 13:00 | Отредактировано 09.12.2018 в 13:11 7

Что, где-то и правильно. Если ты не умеешь водить вертолет рюмка погоды не сделает, ты и так и так влетишь в дерево. Если ты водишь машину как бог - то та же самая рюмка будет полностью проигнорирована, ибо алкоголю не тягаться с божественным водилой.

Кстати, мощный анализ. Еще бы научиться избегать таблиц, сделав общего рода шпору.
Автор: Roloroma [offline] , 09.12.2018 14:12 8

Люблю аутирование на тему вероятностей. Дмитрий, пиши ещё - с удовольствием читаю :)
Автор: alexpsi [offline] , 09.12.2018 14:20 9

Люблю аутирование на тему вероятностей. Дмитрий, пиши ещё - с удовольствием читаю :)
Вот да, подобного теоретизирования очень не хватало. Да, 3D6 на графике гауссианы глаже 1D100, а 5D10 еще глаже, но всегда возникал вопрос «а нахрена мне это нужно?» И вот теперь вроде бы нарисовался ответ)
Автор: user1107 [offline] , 09.12.2018 14:42 | Отредактировано 09.12.2018 в 14:45 10

но всегда возникал вопрос

странно, что ответ не возникал, — не квантовая механика, чай...
Автор: August_Leaves [offline] , 13.12.2018 18:32 11

      Вот вам еще серия формул и графиков, мои маленькие любители теории вероятности.
      На этот раз я решил заняться более конкретными вещами и развить наработки системы. Сегодня я напишу, как в этой системе можно играть нанесение физического (или какого другого) урона.
      Итак, как мы помним, предлагаемая система опирается на расчет вероятностей тех или иных исходов. По определенным формулам вычисляются пороговые значения кубика для броска d100. Как мы будем учитывать урон, получаемый персонажем? Скажу сразу, я не люблю хитпоинты, хотя это самый логичный и естественный подход. Попытаемся обойтись без них. Пусть все повреждения, получаемые персонажем, бывают четырех типов:
  • Легкое ранение
  • Среднее ранение
  • Тяжелое ранение
  • Критическое ранение

      Легкие ранения - это всякие царапины, ссадины, ушибы. Все, что не представляет никакой угрозы здоровью и жизни само по себе. Средние ранения - это ранения, не угрожающие жизни, но мешающие (добавляющие эффекты боли, кровотечения, головокружения...) и требующие лечения. Тяжелые ранения - это то, что угрожает жизни и делает персонажа намного слабее, чем он был. Критическое ранение - пограничное состояние между жизнью и смертью.
      Здесь стоит отметить, что характер любого ранения зависит от базовой выносливости каждого персонажа. То есть, дыра в пузе одного и того же диаметра и глубины для амбала и для школьницы - ранения разных классов. И наоборот ранения одного класса у персонажей с разной базовой выносливостью - это разные ранения. Класс ранения отражает то, каким образом данная травма воздействует на данного персонажа.
      Думаю, для полноты картины необходима кумулятивность ранений. Т.е. своеобразные пороги для накопления каждого класса ранений. Что-то в таком духе. Легких ранений можно получить только 8, девятое становится средним. Средних может быть максимум 4, пятое - тяжелое. Тяжелых - не больше двух. Критическое - только одно, второе - смерть.
      Каждый раз получая урон, игрок должен бросить проверку своей выносливости против рейтинга физической (или еще какой) угрозы. Напомню, что выносливость для подавляющего большинства персонажей людей в моих набросках лежит в диапазоне от -3 до 3. Тройка - это экстремальное значение (3 - супер-лось, -3 - одной ногой в могиле). Ноль - средний человек. Соответственно и рейтинг угрозы может быть как положительным, так и отрицательным числом. Получается что-то в таком роде:
  • -2 - Удар кулаком
  • -1 - Удар дубинкой
  • 0 - Мелкокалиберный пистолет
  • 1-2 - легкое стрелковое оружие
  • 3-4 - военное стрелковое оружие
  • 5 и выше - слонобои, крупнокалиберные пулеметы, танковые пушки...

      Давайте посмотрим на картинку. Здесь показана вероятность различных ранений для среднего персонажа с выносливостью 0 для различных уровней угрозы от -3 до 6.

      Обозначения УР - рейтинг урона, ВЫ - выносливость, БР - броня (про это будет чуть дальше). Видно, что слабые источники урона наносят преимущественно легкие травмы, а с ростом рейтинга угрозы растет и вероятность более тяжелых ранений.
      Сейчас напишу про механику брони.
Автор: dmitry1204 [offline] , 11.01.2019 21:46 12

      Самый простой и естественный способ "навесить" на персонажа броню - это просто дать ему положительный модификатор выносливости в бросках против урона. И это будет работать. Однако есть ряд причин, почему я хочу сделать иначе. Не буду углубляться в детали, вкратце - такая система окажется слишком "одномерной". Моя идея чуть позаковыристей.
      Пробитие брони - это отдельная проверка. Вся броня аналогично урону имеет свой показатель рейтинга. Он, кстати, тоже может быть отрицательным. "-2" - это что-то вроде плотной куртки, "-1" - пуховик, "0" - кевларовый жилет ну и так далее.
      Как и раньше, у проверки есть 4 возможных исхода:
  • Совсем не пробил
  • Почти не пробил
  • Пробил
  • Хорошо пробил

      Первое понятно. Полная блокировка урона. Второе означает, что броня не пробита, но ее носитель рискует получить "заброневую" травму. На практике это проявляется в добавлении к урону модификатора (-4). Это очень большой модификатор, который сводит на нет почти любую угрозу, которая слабее серьезного огнестрельного оружия. Простое "пробил" - это урон, ослабленный броней на (-2). Ну и полное пробитие брони - полный урон.
      Еще один важный момент. Как вы наверняка помните, при расчете пороговых значений кубика кроме прочего используется некое число k, показатель случайности. Чем больше k, тем сильнее результат зависит от удачи и слабее от соотношения факторов. При большинстве бросков k=3. Но как раз здесь мы берем другое значение k=1. Дело в том, что броня обычно "держит" или "не держит" урон достаточно стабильно. Если показатель брони ниже рейтинга угрозы - пробитие почти неизбежно. Если выше - вероятность пробития быстро падает к нулю.
      Итак, давайте наконец посмотрим на цветные картиночки!

      Обозначения старые. Здесь показаны две серии для Урона (0) и для Урона (2). В каждой серии броня меняется от (0) до (3). Прочерк (-) - это отсутствие брони, то есть всегда полное пробитие. Когда показатель урона равен показателю брони - 50 на 50 (точнее 12 на 38 на 38 на 12). Вы можете видеть, как усиление брони быстро обезопасивает обезопаснивает обезопашивает защищает своего носителя. Ну и наоборот, если персонаж пришел на перестрелку с ножом в ночнушке своей мамаши (БР -3), особых бонусов она ему не даст.
      Но самое интересное - посмотреть, как же ношение брони влияет на вероятности получение тех или иных ранений.

      Здесь просуммированы вероятности по всем исходам. То есть, график показывает полную вероятность получить каждый тип ранения при всех возможных способах пробития брони. Показаны две серии, как на рисунке выше. "Нет" наступает тогда, когда броня была не пробита по типу "совсем не пробил". Можно видеть, что рост брони не только повышает вероятность полностью избежать урона, но и в оставшихся случаях перераспределяет вероятность в сторону менее тяжелых ранений.
      Интересно обратить ваше внимание на два случая: второй и девятый на этом рисунке. Второй случай это УР 0 БР 0, девятый УР 2, БР 2, то есть показатель урона равен показателю брони. И там, и там Выносливость 0. Что мы видим? Вероятность полного блокирования урона 12% в каждом из случаев. Однако распределение вероятностей ранений отличается: в случае УР 2 БР 2 шансы схлопотать серьезную травму выше. И это правильно, ради этого эффекта весь сыр-бор и затевался!
Автор: dmitry1204 [offline] , 11.01.2019 22:47 | Отредактировано 11.01.2019 в 22:48 13

  Как большой любитель велосипедов, хочу задать такой вопрос к автору этой системы. Какое кредо системы, в чем идея, в чем суть? Просто если уж дело доходит до использования таблиц экселя с вшитыми формулами содержащими достаточно сложные математические функции, то почему бы не пользоваться физикой? Кому-то гиперболический тангенс конечно не сложно, но где гиперболический тангенс там и PID, там и преобразования Фурье, а оттуда недалеко до преобразований Лапласа, векторной алгебры и все остального математического веселья. Если движет стремление к реализму, отчего в таком случае не использовать систему данную природой (описываемую физикой и математикой), плюс генератор псевдослучайных чисел способный моделировать распределения с равномерным, гауссовым и лоренцевым распределением плотности вероятности. Если не углубляться в детали происходящего на квантовом уровне и не заигрывать с сильной гравитацией, то текущего аппарата физики (если до нее вообще дойдет, когда есть здравый смысл и целый интернет прецедентов на все случае жизни) на примитивном уровне хватит для подавляющего большинства ситуаций, реализм будет максимален, сложность расчетов почти такая же (учебник физики 10-11 класс или лекции Фейнмана вместо рулбука+маткад, матлаб, питон или эксель на худой конец), а с наличием большого количества таблиц на все случаи жизни - может даже и меньше. Кроме того, можно и нужно ограничить себя разумной относительной точностью. Разумеется, сложно будет водить какой-нибудь психоделический кошмар, где вся физика не та и все не так (имею в виду мультивселенные и альтернативные реальности со своими правилами принципиально отличными от того, что мы наблюдаем в нашей Вселенной, я бы кстати почитал что то такое), но если вам в такой игре будет интересно именно наличие четкой и понятной для всех системы, то мне кажется, что хотя это не реально организовать на высоком уровне из-за антропности мышления, на уровне достаточном для игры вполне можно прописать "свою физику" и играть уже по ней, тогда вместо учебника физики у вас будет опять же набор четких правил, законов по которым с помощью генератора случайных чисел вполне можно все определять и играть.
  Если задача сделать интересный геймплей, то он обычно при реализме скатывается в никуда, как уже кто то отмечал выше или в предыдущей теме. Кто-то, конечно, определенно словит кайф от прям совсем-совсем реализма, есть такие (не от антуража реализма и именно от вот него), но не от интересного геймплея. И хотя я в этом глубоко убежден, я с превеликим удовольствием признаю свою неправоту как только появится первый прецедент.
  Если стоит задача разработать хорошую систему под какие-то конкретные условия (например, с учетом специфики вождения ролевых игр на форумах, чем я пытаюсь заниматься), то эти условия вроде бы не были озвучены и было бы интересно их узнать.
  Я к чему. Это ни в коем случае не призыв немедленно бросать конструирование велосипеда и не попытка убеждения в том, что "все уже сделано до нас". Просто интересна философия автора, чего именно он хочет достичь собирая вот это все. Это по крайней мере помогло бы мне понять, какое у меня мнение на тему того, что я увидел и прочитал, а возможно и почерпнуть что-то для себя. Спасибо!
Автор: Zendel [offline] , 11.04.2019 21:40 | Отредактировано 11.04.2019 в 21:43 14