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

Геймдизайнер Nival Анатолий Шестов опубликовал в своем блоге перевод очередной лекции курса «Принципы игрового баланса» игрового дизайнера Яна Шрайбера, который работал над такими проектами, как Marvel Trading Card Game и Playboy: the Mansion.

Редакция vc.ru публикует перевод с разрешения Шестова.

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

До сегодняшнего дня почти всё, о чем мы говорили, было детерминированным, и на прошлой неделе мы внимательно изучили транзитивную механику, разобрав её настолько подробно, насколько детально я могу объяснить. Но до сих пор мы не обращали внимание на другие аспекты многих игр, а именно на недетерминированные моменты — другими словами, случайность.

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

Игральные кости

Давайте начнем с чего-то простого — с бросания игральных костей. Когда большинство людей думает об игральных костях, они представляют себе шестигранный кубик, известный как d6. Но большинство геймеров видели множество других игральных костей: четырёхгранные (d4), восьмигранные (d8), двенадцатигранные (d12), двадцатигранные (d20). Если вы настоящий гик, у вас, может быть, где-то найдутся 30-гранные или 100-гранные кости.

Если вы не знакомы с данной терминологией, d означает игральную кость, а число, стоящее после него, — количество её граней. Если число стоит перед d, то оно обозначает количество игральных костей при бросании. Например, в игре «Монополия» вы бросаете 2d6.

Итак, в данном случае словосочетание «игральная кость» — условное обозначение. Существует огромное количество других генераторов случайных чисел, которые не выглядят как фигуры из пластика, но выполняют ту же функцию — генерируют случайное число от 1 до n. Обычную монету можно также представить в виде двугранной игральной кости d2.

Я видел два дизайна семигранной кости: одна из них выглядела как игральный кубик, а вторая была больше похожа на семигранный деревянный карандаш. Четырехгранный дрейдл, также известный как титотум, — аналог четырехгранной кости. Игровое поле с крутящейся стрелкой в игре Chutes & Ladders, где результат может быть от 1 до 6, соответствует шестигранной кости.

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

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

Сумма значений всех граней для стандартного шестигранного кубика равна 1 + 2 + 3 + 4 + 5 + 6 = 21. Делим 21 на количество граней и получаем среднее значение броска: 21 / 6 = 3,5. Это особый случай, потому что мы предполагаем, что все исходы равновероятны.

Что если у вас особенные игральные кости? Например, я видел игру с шестигранной игральной костью со специальными наклейками на гранях: 1, 1, 1, 2, 2, 3, поэтому она ведет себя как странная трехгранная игральная кость, с которой больше шансов, что выпадет число 1, чем 2, и скорее выпадет 2, чем 3. Какое среднее значение броска для этой кости? Итак, 1 + 1 + 1 + 2 + 2 + 3 = 10, делим на 6 — получается 5 / 3, или примерно 1,66. Таким образом, если у вас особенная игральная кость и игроки будут бросать три кости, а затем суммировать результаты — вы знаете, что сумма их броска будет равна примерно 5, и можете балансировать игру, основываясь на этом предположении.

Игральные кости и независимость

Как я уже говорил, мы исходим из предположения, что выпадение каждой грани равновероятно. Здесь неважно, сколько игральных костей вы бросаете. Каждый бросок кости независим — это означает, что предыдущие броски не влияют на результаты последующих. При достаточном количестве испытаний вы обязательно заметите серию чисел — например, выпадение в основном более крупных или меньших значений — или другие особенности, но это не значит, что игральные кости «горячие» или «холодные». Позже мы об этом поговорим.

Если вы бросаете стандартный шестигранный кубик, и два раза подряд выпадает число 6 — вероятность того, что результатом следующего броска будет 6, точно так же равна 1 / 6. Вероятность не повышается от того, что кубик «нагрелся». В то же время вероятность не понижается: неверно рассуждать, что уже два раза подряд выпадало число 6, а значит, теперь должна выпасть другая грань.

Конечно, если вы бросаете кубик двадцать раз и каждый раз выпадает число 6 — шанс того, что в двадцать первый раз выпадет 6, довольно высок: возможно, у вас просто неправильный кубик. Но если кубик правильный, вероятность выпадения каждой из граней одинакова, независимо от результатов других бросков. Вы можете также представить себе, что мы каждый раз заменяем игральную кость: если два раза подряд выпало число 6, уберите «горячий» кубик из игры и замените его на новый. Прошу прощения, если кто-то из вас уже знал об этом, но мне необходимо было это прояснить, прежде чем двигаться дальше.

Как сделать выпадение игральных костей более или менее случайным

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

Например, в случае 1d6 + 4 (то есть если вы один раз бросаете стандартную шестигранную игральную кость и прибавляете к результату 4), средним значением будет число от 5 до 10. Если вы бросаете 5d2, средним значением также будет число от 5 до 10. Результатом бросания 5d2 будут в основном числа 7 и 8, реже другие значения. Та же серия, даже то же среднее значение (в обоих случаях 7,5), но природа случайности разная.

Подождите минутку. Разве я только что не говорил, что игральные кости не «нагреваются» и не «охлаждаются»? А теперь я говорю: если бросать много игральных костей, результаты бросков приближаются к среднему значению. Почему?

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

Это не потому, что выпавшее число «заставляет» выпасть другое число, которое ещё не выпадало. А потому, что небольшая серия выпадения числа 6 (или 20, или другого числа) в итоге не так уж повлияет на результат, если вы бросите игральные кости ещё десять тысяч раз и в основном будет выпадать среднее значение. Сейчас у вас выпадет несколько больших чисел, а позже несколько маленьких — и со временем они приблизятся к среднему значению.

Это происходит не потому, что предыдущие броски влияют на игральные кости (серьёзно, игральная кость сделана из пластика, у неё нет мозгов, чтобы подумать: «Ой, давно не выпадало 2»), а потому, что так обычно происходит при большом количестве бросков игральных костей.

Таким образом, произвести расчеты для одного случайного броска игральной кости довольно несложно — по крайней мере, вычислить среднее значение броска. Есть также способы вычислить, «насколько случайно» что-либо происходит, и сказать, что результаты бросания 1d6 + 4 будут «более случайными», чем 5d2. Для 5d2 выпавшие результаты будут распределяться более равномерно. Для этого нужно вычислить среднеквадратическое отклонение: чем больше будет значение, тем более случайными окажутся результаты. Мне бы не хотелось сегодня приводить столько расчётов, эту тему я объясню позже.

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

Как вычислить вероятность при помощи подсчёта

Возможно, у вас возник вопрос: как мы можем вычислить точную вероятность выпадения определённого результата? На самом деле, это довольно важно для многих игр: если вы изначально бросаете игральную кость — скорее всего, есть какой-то оптимальный результат. Отвечаю: нам нужно посчитать два значения. Во-первых, общее число исходов при бросании игральной кости, а во вторых, число благоприятных исходов. Разделив второе значение на первое, вы получите нужную вероятность. Чтобы получить процентное соотношение, умножьте полученный результат на 100.

Примеры

Вот очень простой пример. Вы хотите, чтобы выпало число 4 или выше, и один раз бросаете шестигранную игральную кость. Максимальное число исходов составляет 6 (1, 2, 3, 4, 5, 6). Из них 3 исхода (4, 5, 6) являются благоприятными. Значит, чтобы посчитать вероятность, делим 3 на 6 и получаем 0,5 или 50%.

Вот пример немного сложнее. Вы хотите, чтобы при бросании 2d6 выпало чётное число. Максимальное число исходов — 36 (по 6 вариантов для каждой игральной кости, одна кость не влияет на другую, поэтому умножаем 6 на 6 и получаем 36). Сложность вопроса данного типа заключается в том, что легко посчитать дважды. Например, при бросании 2к6 есть два варианта результата 3: 1+2 и 2+1. Они выглядят одинаково, но разница в том, какое число отображено на первой игральной кости и какое — на второй.

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

  • 2 (1+1);
  • 4 (1+3);
  • 4 (2+2);
  • 4 (3+1);
  • 6 (1+5);
  • 6 (2+4);
  • 6 (3+3);
  • 6 (4+2);
  • 6 (5+1);
  • 8 (2+6);
  • 8 (3+5);
  • 8 (4+4);
  • 8 (5+3);
  • 8 (6+2);
  • 10 (4+6);
  • 10 (5+5);
  • 10 (6+4);
  • 12 (6+6).

Оказывается, что есть 18 вариантов для благоприятного исхода из 36 — как и в предыдущем случае, вероятность равна 0,5 или 50%. Возможно, неожиданно, но довольно точно.

Моделирование методом Монте-Карло

Что если для такого подсчёта у вас слишком много игральных костей? Например, вы хотите знать, какова вероятность того, что выпадет сумма, равная 15 или больше, при броске 8d6. Для восьми игральных костей существует огромное множество разных результатов, и их подсчёт вручную займёт очень много времени — даже если мы найдем какое-нибудь хорошее решение, чтобы сгруппировать разные серии бросков игральных костей.

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

Если вы не разбираетесь в программировании и вам нужен не точный, а примерный ответ, вы можете смоделировать данную ситуацию в Excel, где вы подбросите 8d6 несколько тысяч раз и получите ответ. Чтобы бросить 1d6 в Excel, используйте формулу =FLOOR(RAND()*6)+1.

Существует название для ситуации, когда вы не знаете ответа и просто много раз пробуете — моделирование методом Монте-Карло. Это отличное решение, к которому можно прибегнуть, когда посчитать вероятность слишком сложно. Самое замечательное, что в данном случае нам не нужно понимать, как происходит математический расчёт, и мы знаем, что ответ будет «довольно хорошим», потому что, как мы уже знаем, чем больше бросков, тем больше результат приближается к среднему значению.

Как объединить независимые испытания

Если вы спросите о нескольких повторяющихся, но независимых испытаниях, то исход одного броска не влияет на исходы других бросков. Есть ещё одно более простое объяснение данной ситуации.

Как различить что-либо зависимое и независимое? В принципе, если вы можете выделить каждый бросок (или серию бросков) игральной кости как отдельное событие, то он независим. Например, мы бросаем 8к6 и хотим, чтобы выпала сумма, равная 15. Данное событие нельзя разделить на несколько независимых бросков игральных костей. Чтобы получить результат, вы вычисляете сумму всех значений, поэтому результат, выпавший на одной игральной кости, влияет на результаты, которые должны выпасть на других.

Вот пример независимых бросков: перед вами игра с игральными костями, и вы несколько раз бросаете шестигранные кубики. Чтобы вы остались в игре, при первом броске должно выпасть значение 2 или выше. Для второго броска — 3 или выше. Для третьего требуется 4 или выше, для четвертого — 5 или выше, для пятого — 6. Если все пять бросков успешные, вы выиграли. В данном случае все броски независимы. Да, если один бросок будет неудачным, он повлияет на результат всей игры, но один бросок не влияет на другой. Например, если ваш второй бросок игральных костей очень удачный, это никак не означает, что следующие броски будут так же хороши. Поэтому мы можем рассматривать вероятность каждого броска игральных костей отдельно.

Если у вас независимые вероятности и вы хотите знать, какова вероятность того, что все события наступят, вы определяете каждую индивидуальную вероятность и перемножаете их. Другой способ: если вы, чтобы описать несколько условий, используете союз «и» (например, какова вероятность наступления какого-то случайного события и какого-то другого независимого случайного события?) — посчитайте отдельные вероятности и перемножьте их.

Неважно, что вы считаете, — никогда не суммируйте независимые вероятности. Это распространённая ошибка. Чтобы понять, почему это неправильно, представьте себе ситуацию, когда вы подбрасываете монету и хотите знать, какова вероятность того, что два раза подряд выпадет «орёл». Вероятность выпадения каждой из сторон — 50%. Если вы суммируете эти две вероятности, вы получите 100% шанс того, что выпадет «орёл», но мы знаем, что это неправда, ведь два раза подряд могла бы выпасть «решка». Если вместо этого вы перемножите две вероятности, у вас получится 50% * 50% = 25% — это правильный ответ для расчёта вероятности выпадения «орла» два раза подряд.

Пример

Давайте вернёмся к игре с шестигранной игральной костью, где нужно, чтобы сначала выпало число больше чем 2, затем больше чем 3 — и так далее до 6. Каковы шансы того, что в данной серии из пяти бросков все исходы будут благоприятными?

Как говорилось выше, это независимые испытания, поэтому мы подсчитываем вероятность для каждого отдельного броска, а затем перемножаем их. Вероятность того, что исход первого броска будет благоприятным, равна 5/6. Второго — 4/6. Третьего — 3/6. Четвертого — 2/6, пятого — 1/6. Умножаем все результаты друг на друга и получаем примерно 1,5%. Победы в данной игре случаются довольно редко, поэтому, если вы добавите этот элемент в вашу игру, вам нужен будет довольно большой джекпот.

Отрицание

Вот ещё одна полезная подсказка: иногда сложно посчитать вероятность того, что событие наступит, зато легче определить шансы, что событие не наступит. Например, предположим, у нас есть ещё одна игра: вы бросаете 6d6 и выигрываете, если хотя бы один раз выпадет 6. Какова вероятность выигрыша?

В данном случае нужно учесть много вариантов. Возможно, выпадет одно число 6, то есть на одной из игральных костей выпадет число 6, а на других — числа от 1 до 5, тогда есть 6 вариантов того, на какой из игральных костей будет 6. Вам может выпасть число 6 на двух игральных костях, или на трёх, или на ещё большем количестве, и каждый раз нужно будет делать отдельный подсчёт, поэтому здесь легко запутаться.

Но давайте посмотрим на задачу с другой стороны. Вы проиграете, если ни на одной из игральных костей не выпадет число 6. В данном случае у нас есть 6 независимых испытаний. Вероятность того, что на каждой из игральных костей выпадет число, не равное 6, составляет 5/6. Перемножьте их — и получите примерно 33%. Таким образом, вероятность проигрыша составляет один к трём. Следовательно, вероятность выигрыша — 67% (или два к трём).

Из этого примера очевидно: если вы считаете вероятность того, что событие не наступит, нужно вычесть результат из 100%. Если вероятность выиграть равна 67%, то вероятность проиграть — 100% минус 67%, или 33%, и наоборот. Если сложно посчитать одну вероятность, но легко посчитать противоположную, посчитайте противоположную, а затем вычтите это число из 100%.

Соединяем условия для одного независимого испытания

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

Если вы хотите вычислить вероятность для нескольких не связанных между собой благоприятных исходов одного испытания, суммируйте вероятности каждого благоприятного исхода. Например, вероятность выпадения чисел 4, 5 или 6 на 1d6 равна сумме вероятности выпадения числа 4, вероятности выпадения числа 5 и вероятности выпадения числа 6. Данную ситуацию можно представить так: если вы в вопросе о вероятности используете союз «или» (например, какова вероятность того или иного исхода одного случайного события?) — подсчитайте отдельные вероятности и просуммируйте их.

Обратите внимание: когда вы вычислите все возможные исходы игры, сумма вероятностей их наступления должна быть равна 100%, иначе ваш расчёт был сделан неверно. Это хороший способ перепроверить свои вычисления. Например, вы проанализировали вероятность выпадения всех комбинаций в покере. Если вы просуммируете все полученные результаты, у вас должно получиться ровно 100% (или, по крайней мере, значение довольно близкое к 100%: если вы пользуетесь калькулятором, может возникнуть маленькая ошибка при округлении, но если суммируете точные числа вручную, всё должно сойтись). Если сумма не сходится, значит, вы, скорее всего, не учли какие-то комбинации или посчитали вероятности некоторых комбинаций неверно, и вычисления нужно перепроверить.

Неравные вероятности

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

Например, в одном из дополнений карточной игры Nuclear War есть игровое поле со стрелкой, от которого зависит результат запуска ракеты. Чаще всего она наносит обычный урон, более сильный или более слабый, но иногда урон усиливается в два или три раза, или ракета взрывается на стартовой площадке и причиняет вам вред, или происходит какое-то другое событие. В отличие от игрового поля со стрелкой в Chutes & Ladders или A Game of Life результаты игрового поля в Nuclear War неравновероятны. Некоторые секции игрового поля больше по размеру и стрелка останавливается на них гораздо чаще, в то время как другие секции очень маленькие и стрелка останавливается на них редко.

Итак, на первый взгляд, кость выглядит примерно следующим образом: 1, 1, 1, 2, 2, 3 — мы о ней уже говорили, она представляет из себя что-то вроде утяжелённой 1d3. Следовательно, нам нужно разделить все эти секции на равные части, найти самую маленькую единицу измерения, делитель, которому всё кратно, и затем представить ситуацию в виде d522 (или какой-то другой), где множество граней игральной кости будет отображать ту же ситуацию, но с большим количеством исходов. Это один из способов решения задачи, и он технически выполним, но есть более простой вариант.

Давайте вернёмся к нашей стандартной шестигранной игральной кости. Мы говорили, что для вычисления среднего значения броска для нормальной игральной кости нужно суммировать значения на всех гранях и разделить их на количество граней, но как именно происходит расчёт? Можно выразить это иначе. Для шестигранной игральной кости вероятность выпадения каждой грани равна точно 1/6. Теперь мы умножаем исход каждой грани на вероятность этого исхода (в данном случае 1/6 для каждой грани), а затем суммируем полученные значения. Таким образом, суммируя (1 * 1/6) + (2 * 1/6) + (3 * 1/6) + (4 * 1/6) + (5 * 1/6) + (6 * 1/6), получаем тот же результат (3,5), как и при расчёте выше. На самом деле мы считаем так каждый раз: умножаем каждый исход на вероятность этого исхода.

Можем ли мы произвести такой же расчёт для стрелки на игровом поле в игре Nuclear War? Конечно, можем. И если мы суммируем все найденные результаты, то получим среднее значение. Всё, что нам нужно сделать, — вычислить вероятность каждого исхода для стрелки на игровом поле и умножить на значение исхода.

Другой пример

Упомянутый метод расчёта среднего значения также подходит, если результаты равновероятны, но имеют разные преимущества — например, если вы бросаете игральную кость и выигрываете больше при выпадении одних граней, чем других. Например, возьмём игру, которая бывает в казино: вы делаете ставку и бросаете 2d6. Если выпадут три числа с наименьшим значением (2, 3, 4) или четыре числа с высоким значением (9, 10, 11, 12) — вы выиграете сумму, равную вашей ставке. Особенными являются числа с самым низким и самым высоким значением: если выпадет 2 или 12, вы выиграете в два раза больше, чем ваша ставка. Если выпадет любое другое число (5, 6, 7, 8), вы проиграете вашу ставку. Это довольно простая игра. Но какова вероятность выигрыша?

Начнем с того, что посчитаем, сколько раз вы можете выиграть. Максимальное число исходов при бросании 2d6 составляет 36. Каково количество благоприятных исходов?

  • Есть 1 вариант, что выпадет 2, и 1 вариант, что выпадет 12.
  • Есть 2 варианта, что выпадет 3 и 2 варианта, что выпадет 11.
  • Есть 3 варианта, что выпадет 4, и 3 варианта, что выпадет 10.
  • Есть 4 варианта, что выпадет 9.

Просуммировав все варианты, получаем 16 благоприятных исходов из 36. Таким образом, при нормальных условиях вы выиграете 16 раз из 36 возможных — вероятность выигрыша немного меньше, чем 50%.

Но в двух случаях из этих шестнадцати вы выиграете в два раза больше — это как выиграть дважды. Если вы будете играть в эту игру 36 раз, каждый раз делая ставку в $1, и каждый из всех возможных исходов выпадет один раз, вы выиграете в сумме $18 (на самом деле вы выиграете 16 раз, но два из них будут считаться как два выигрыша). Если вы играете 36 раз и выигрываете $18, не значит ли это, что вероятности равные?

Не торопитесь. Если вы посчитаете количество раз, когда можете проиграть, то у вас получится 20, а не 18. Если вы будете играть 36 раз, каждый раз делая ставку в $1, вы выиграете общую сумму в $18 при выпадении всех благоприятных исходов. Но вы проиграете общую сумму в $20 при выпадении всех 20 неблагоприятных исходов. В результате вы будете немного отставать: вы теряете в среднем $2 нетто за каждые 36 игр (вы также можете сказать, что теряете в среднем 1/18 доллара в день). Теперь вы видите, как легко в данном случае допустить ошибку и посчитать вероятность неправильно.

Перестановка

До сих пор мы предполагали, что порядок расположения чисел при бросании игральных костей не имеет значения. Выпадение 2 + 4 — это то же самое, что и выпадение 4 + 2. В большинстве случаев мы вручную подсчитываем число благоприятных исходов, но иногда данный способ непрактичен и лучше использовать математическую формулу.

Пример данной ситуации из игры с игральными костями Farkle. Для каждого нового раунда вы бросаете 6d6. Если вам повезет и выпадут все возможные результаты 1-2-3-4-5-6 (стрейт), вы получите большой бонус. Какова вероятность того, что это произойдет? В данном случае есть множество вариантов выпадения данной комбинации.

Решение выглядит следующим образом: на одной из игральных костей (и только на одной) должно выпасть число 1. Сколько вариантов выпадения числа 1 на одной игральной кости? Вариантов 6, так как есть 6 игральных костей, и на любой из них может выпасть число 1. Соответственно, возьмите одну игральную кость и отложите её в сторону. Теперь на одной из оставшихся игральных костей должно выпасть число 2. Для этого есть 5 вариантов. Возьмите ещё одну игральную кость и отложите её в сторону. Затем на 4 из оставшихся игральных костей может выпасть число 3, на 3 из оставшихся игральных костей может выпасть число 4, на 2 костях — число 5. В итоге у вас остаётся одна игральная кость, на которой должно выпасть число 6 (в последнем случае игральная кость одна, и выбора нет).

Чтобы посчитать количество благоприятных исходов для выпадения комбинации «стрейт», мы умножаем все разные независимые варианты: 6 x 5 x 4 x 3 x 2 x 1=720 — похоже, есть довольно большое количество вариантов того, что выпадет эта комбинация.

Чтобы посчитать вероятность выпадения комбинации «стрейт», нам нужно разделить 720 на количество всех возможных исходов для бросания 6d6. Каково число всех возможных исходов? На каждой игральной кости может выпасть 6 граней, поэтому мы умножаем 6 x 6 x 6 x 6 x 6 x 6 = 46656 (число намного больше, чем предыдущее). Делим 720 на 46656 и получаем вероятность, равную примерно 1,5%. Если бы вы занимались дизайном этой игры, вам было бы полезно это знать, чтобы вы могли создать соответствующую систему подсчёта очков. Теперь мы понимаем, почему в игре Farkle вы получите такой большой бонус, если вам выпадет комбинация «стрейт»: это ситуация довольно редкая.

Результат также интересен и по другой причине. На примере видно, насколько редко за короткий период выпадает результат, соответствующий вероятности. Конечно, если бы мы бросали несколько тысяч игральных костей, разные грани игральных костей выпадали бы довольно часто. Но когда мы бросаем только шесть игральных костей, почти никогда не случается так, чтобы выпала каждая из граней. Становится понятно, что глупо ожидать, что сейчас выпадет грань, которой ещё не было, потому что «нам давно не выпадало число 6». Слушай, твой генератор случайных чисел сломался.

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

Если вы когда-либо раньше работали над онлайн-игрой с каким-нибудь генератором случайных чисел, то, скорее всего, сталкивались с ситуацией, когда игрок пишет в службу технической поддержки с жалобой, что генератор случайных чисел не показывает случайные числа. Он пришёл к такому выводу, потому что убил 4 монстров подряд и получил 4 совершенно одинаковые награды, а эти награды должны выпадать только в 10% случаев, поэтому такое, очевидно, почти никогда не должно происходить.

Вы делаете математический расчёт. Вероятность равна 1/10 * 1/10 * 1/10 * 1/10, то есть 1 исход из 10 тысяч — довольно редкий случай. Именно это пытается вам сказать игрок. Есть ли в данном случае проблема?

Всё зависит от обстоятельств. Сколько игроков сейчас на вашем сервере? Предположим, у вас достаточно популярная игра, и каждый день в неё играет 100 тысяч человек. Сколько игроков убьют четырёх монстров подряд? Возможно, все, несколько раз за день, но давайте предположим, что половина из них просто обменивается разными предметами на аукционах, переписывается на RP-серверах, или выполняет другие игровые действия — таким образом, на монстров охотится только половина из них. Какова вероятность, что кому-то выпадет одна и та же награда? В данной ситуации можно ожидать, что это произойдет как минимум несколько раз за день.

Кстати, поэтому кажется, что каждые несколько недель кто-нибудь выигрывает в лотерею, даже если этим кем-то никогда не были вы или ваши знакомые. Если достаточное количество людей регулярно играет — есть вероятность, что где-то найдется хотя бы один счастливчик. Но если в лотерею играете вы сами, то вы вряд ли выиграете, уж скорее вас пригласят на работу в Infinity Ward.

Карты и зависимость

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

Если у вас стандартная колода в 52 карты, вы вынимаете из нее 10 червей и хотите знать вероятность того, что следующая карта будет той же масти, — вероятность изменилась по сравнению с первоначальной, потому что вы уже убрали одну карту масти черви из колоды. Каждая карта, которую вы убираете, изменяет вероятность появления следующей карты в колоде. В данном случае предыдущее событие влияет на следующее, поэтому мы называем такую вероятность зависимой.

Обратите внимание: когда я говорю «карты», я имею в виду любую игровую механику, в которой есть набор объектов и вы убираете один из объектов, не заменяя его. «Колода карт» в данном случае — аналог мешочка с фишками, из которого вы вынимаете одну фишку, или урны, из которой вынимают цветные шарики (я никогда не видел игр с урной, из которой бы вынимали цветные шарики, но преподаватели теории вероятностей по какой-то причине предпочитают данный пример).

Свойства зависимости

Хотелось бы уточнить, что, когда речь идет о картах, я предполагаю, что вы вынимаете карты, смотрите на них и убираете из колоды. Каждое из этих действий — важное свойство. Если бы у меня была колода, скажем, из шести карт с числами от 1 до 6, я бы перетасовал их и вынул одну карту, затем перетасовал все шесть карт снова — это было бы аналогично бросанию шестигранной игральной кости, ведь один результат здесь не влияет на последующие. А если я вынимаю карты и не заменяю их, то, вынув карту 1, повышаю вероятность того, что в следующий раз выну карту с числом 6. Вероятность будет повышаться, пока я в итоге не выну эту карту или не перетасую колоду.

Факт того, что мы смотрим на карты, также важен. Если я выну карту из колоды и не посмотрю на неё — у меня не будет дополнительной информации и на самом деле вероятность не изменится. Это может прозвучать нелогично. Как простое переворачивание карты может волшебным образом изменить вероятность? Но это возможно, потому что вы можете посчитать вероятность для неизвестных предметов только исходя из того, что вы знаете.

Например, если вы перетасуете стандартную колоду карт, откроете 51 карту и ни одна из них не будет трефовой дамой, то вы можете быть на 100% уверены, что оставшаяся карта — это трефовая дама. Если же вы перетасуете стандартную колоду карт и вынете 51 карту, не глядя на них, то вероятность того, что оставшаяся карта — трефовая дама, всё равно останется 1/52. Открывая каждую карту, вы получаете больше информации.

Подсчёт вероятности для зависимых событий выполняется по тем же принципам, как и для независимых, за исключением того, что это немного сложнее, так как вероятности меняются, когда вы открываете карты. Таким образом, вам нужно перемножить много разных значений, вместо умножения одного и того же значения. На самом деле это значит, что нам нужно соединить все расчёты, которые мы делали, в одну комбинацию.

Пример

Вы тасуете стандартную колоду в 52 карты и вынимаете две карты. Какова вероятность того, что вы вынете пару? Есть несколько способов вычислить эту вероятность, но, пожалуй, самый простой выглядит следующим образом: какова вероятность того, что, вынув одну карту, вы не сможете вынуть пару? Эта вероятность равна нулю, поэтому не так важно, какую первую карту вы вынули, при условии, что она совпадает со второй. Неважно, какую именно карту мы вынем первой, у нас всё равно есть шанс вынуть пару. Поэтому вероятность вынуть пару после того, как вынули первую карту, равна 100%.

Какова вероятность того, что вторая карта совпадет с первой? В колоде остается 51 карта, и 3 из них совпадают с первой картой (вообще-то их было бы 4 из 52, но вы уже убрали одну из совпадающих карт, когда вынули первую карту), так что вероятность равна 1/17. Поэтому в следующий раз, когда за игрой в техасский холдем парень напротив вас за столом скажет: «Круто, ещё одна пара? Мне сегодня везет», вы будете знать, что с высокой долей вероятности он блефует.

Что если мы добавим два джокера, так что у нас в колоде будет 54 карты, и захотим узнать, какова вероятность вынуть пару? Первой картой может оказаться джокер, и тогда в колоде будет только одна карта, которая совпадёт, а не три. Как найти вероятность в данном случае? Мы разделим вероятности и перемножим каждую возможность.

Нашей первой картой может быть джокер или какая-нибудь другая карта. Вероятность вынуть джокер равна 2/54, вероятность вынуть какую-то другую карту — 52/54. Если первая карта — джокер (2/54), то вероятность того, что вторая карта совпадет с первой, равна 1/53. Перемножаем значения (мы можем перемножить их, потому что это отдельные события, и мы хотим, чтобы оба события произошли) и получаем 1/1431 — меньше чем одну десятую процента.

Если первой вы вынимаете какую-то другую карту (52/54), вероятность совпадения со второй картой равна 3/53. Перемножаем значения и получаем 78/1431 (немного больше, чем 5,5%). Что мы делаем с этими двумя результатами? Они не пересекаются, и мы хотим знать вероятность каждого из них, поэтому суммируем значения. Получаем окончательный результат 79/1431 (всё равно примерно 5,5%).

Если бы мы хотели быть уверенными в точности ответа, мы могли бы посчитать вероятность всех остальных возможных результатов: вынимание джокера и несовпадение со второй картой или вынимание какой-то другой карты и несовпадение со второй картой. Просуммировав эти вероятности и вероятность выигрыша, мы бы получили ровно 100%. Я не буду приводить здесь математический расчёт, но вы можете попробовать посчитать, чтобы перепроверить.

Парадокс Монти Холла

Это приводит нас к довольно известному парадоксу, который часто приводит многих в замешательство, — парадокс Монти Холла. Парадокс назван в честь ведущего телешоу Let's Make a Deal. Для тех, кто никогда не видел это телешоу, скажу, что оно было противоположностью The Price Is Right.

В The Price Is Right ведущий (раньше ведущим был Боб Баркер, кто сейчас, Дрю Кэри? Неважно) — ваш друг. Он хочет, чтобы вы выиграли деньги или классные призы. Он пытается предоставить вам все возможности для выигрыша, при условии, что вы сможете угадать, сколько на самом деле стоят предметы, приобретенные спонсорами.

Монти Холл вел себя иначе. Он был как злой близнец Боба Баркера. Его целью было сделать так, чтобы вы в эфире национального телевидения выглядели как идиот. Если вы участвовали в шоу, он был вашим противником, вы играли против него, и шансы на выигрыш были в его пользу. Возможно, я слишком резко высказываюсь, но, глядя на шоу, в которое больше шансов попасть, если носить нелепый костюм, я прихожу именно к таким выводам.

Один из самых известных мемов шоу был такой: перед вами три двери, дверь номер 1, дверь номер 2 и дверь номер 3. Вы можете бесплатно выбрать какую-то одну дверь. За одной из них находится великолепный приз — например, новый легковой автомобиль. За двумя другими дверьми нет никаких призов, обе они не представляют из себя никакой ценности. Они должны вас унизить, поэтому за ними не просто ничего, а что-то глупое, например, козёл или огромный тюбик зубной пасты — что угодно, только не новый легковой автомобиль.

Вы выбираете одну из дверей, Монти уже собирается открыть её, чтобы вы узнали, выиграли или нет… но подождите. Прежде чем узнать, давайте посмотрим на одну из тех дверей, которые вы не выбрали. Монти знает, за какой дверью находится приз, и он всегда может открыть дверь, за которой нет приза. «Вы выбираете дверь номер 3? Тогда давайте откроем дверь номер 1, чтобы показать, что за ней не было приза». А теперь он из щедрости предлагает вам возможность обменять выбранную дверь номер 3 на то, что находится за дверью номер 2.

В этот момент и возникает вопрос о вероятности: повышает ли эта возможность вашу вероятность выиграть, или понижает, или она остаётся неизменной? Как вы думаете?

Верный ответ: возможность выбрать другую дверь увеличивает вероятность выигрыша с 1/3 до 2/3. Это нелогично. Если раньше вы не сталкивались с данным парадоксом, то, скорее всего, вы думаете: подождите, как это: открыв одну дверь, мы волшебным образом изменили вероятность? Как мы уже видели на примере с картами, именно это и происходит, когда мы получаем больше информации. Очевидно, что, когда вы выбираете в первый раз, вероятность выигрыша равна 1/3. Когда открывается одна дверь, это совершенно не меняет вероятность выигрыша для первого выбора: всё равно вероятность равна 1/3. Но вероятность того, что другая дверь правильная, теперь равна 2/3.

Давайте посмотрим на этот пример с другой стороны. Вы выбираете дверь. Вероятность выигрыша равна 1/3. Я предлагаю вам поменять две другие двери, что и делает Монти Холл. Конечно, он открывает одну из дверей, чтобы показать, что за ней нет приза, но он всегда может так поступить, поэтому на самом деле это ничего не меняет. Конечно, вам захочется выбрать другую дверь.

Если вы не совсем разобрались с вопросом и нужно более убедительное объяснение, нажмите на эту ссылку, чтобы перейти к замечательному маленькому Flash-приложению, которое позволит вам изучить этот парадокс более подробно. Вы можете играть, начиная с примерно 10 дверей, и затем постепенно перейти к игре с тремя дверьми. Есть также симулятор, где вы можете играть с любым количеством дверей от 3 до 50 или запустить несколько тысяч симуляций и посмотреть, сколько раз вы бы выиграли, если бы играли.

Выбираете одну из трех дверей — вероятность выиграть равна 1/3. Теперь у вас есть две стратегии: поменять выбор после открытия неверной двери или нет. Если вы не меняете свой выбор, то вероятность так и останется 1/3, так как выбор идет только на первом этапе, и надо сразу угадать. Если же меняете, то выиграть вы можете, если выберете сперва неверную дверь (потом откроют другую неверную, останется верная — меняя решение, вы как раз её и берете). Вероятность выбрать в начале неверную дверь составляет 2/3 — вот и получается, что, поменяв свое решение, вы в два раза увеличиваете вероятность выигрыша.

Ремарка от преподавателя высшей математики и специалиста по игровому балансу Максима Солдатова — её, разумеется, не было у Шрайбера, но без неё понять это волшебное превращение достаточно трудно

И снова о парадоксе Монти Холла

Что касается самого шоу: даже если соперники Монти Холла не были сильны в математике, то он разбирался в ней хорошо. Вот что он делал, чтобы немного изменить игру. Если вы выбирали дверь, за которой находился приз, вероятность чего равна 1/3, он всегда предлагал вам возможность выбрать другую дверь. Вы выбрали легковой автомобиль, а затем поменяете его на козла и будете выглядеть довольно глупо — а это именно то, что нужно, ведь Холл своего рода злой парень.

Но если вы выберете дверь, за которой не будет приза, то он предложит вам выбрать другую только в половине случаев, либо же просто покажет вам вашего нового козла, и вы уйдете со сцены. Давайте проанализируем эту новую игру, в которой Монти Холл может решать, предлагать вам шанс выбрать другую дверь или нет.

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

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

Из оставшихся двух вариантов из трёх (вы изначально выбираете дверь без приза) в половине случаев ведущий предложит вам поменять решение, а в другой половине случаев — нет.

Половина от 2/3 — это 1/3, то есть в одном случае из трёх вы получите козла, в одном случае из трёх выберете неправильную дверь и ведущий предложит вам выбрать другую, и в одном случае из трёх вы выберете правильную дверь, но он опять же предложит другую.

Если ведущий предлагает выбрать другую дверь, мы уже знаем, что тот один случай из трёх, когда он дарит нам козла и мы уходим, не произошёл. Это полезная информация: она означает, что наши шансы на выигрыш изменились. Два случая из трёх, когда у нас есть возможность выбрать: в одном случае это значит, что мы угадали правильно, а в другом, что мы угадали неправильно, поэтому, если нам вообще предложили возможность выбрать, значит, вероятность нашего выигрыша равна 1/2, и c точки зрения математики неважно, оставаться при своём выборе или выбирать другую дверь.

Как и покер, это игра психологическая, а не математическая. Почему Монти предложил вам выбор? Он думает, что вы простофиля, который не знает, что выбрать другую дверь — «правильное» решение и будет упорно держаться за свой выбор (ведь психологически сложнее ситуация, когда вы выбрали автомобиль, а затем его потеряли)?

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

Таким образом, Монти удается иногда предлагать выбор, и при этом общая вероятность выигрыша остается равной 1/3. Помните, что вероятность того, что вы проиграете сразу, равна 1/3. Вероятность того, что вы сразу угадаете правильно, равна 1/3, и в 50% этих случаев вы выиграете (1/3 x 1/2 = 1/6).

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

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

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

Парадокс мальчика и девочки

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

Задача: у меня есть друг с двумя детьми, хотя бы один ребёнок из них — девочка. Какова вероятность того, что второй ребёнок тоже девочка? Давайте предположим, что в любой семье шансы рождения девочки и мальчика составляют 50/50, и это справедливо для каждого ребёнка.

На самом деле, в сперме некоторых мужчин больше сперматозоидов с X-хромосомой или Y-хромосомой, поэтому вероятность немного меняется. Если вы знаете, что один ребёнок — девочка, вероятность появления второй девочки немного выше, кроме того, есть и другие условия, например, гермафродитизм. Но для решения этой задачи мы не будем принимать это во внимание и предположим, что рождение ребёнка — это независимое событие и рождение мальчика и девочки равновероятны.

Так как речь идёт о шансе 1/2, интуитивно мы ожидаем, что ответ будет, скорее всего, 1/2 или 1/4, или в знаменателе будет какое-то другое число, кратное двум. Но ответ — 1/3. Почему?

Сложность в данном случае в том, что информация, которая у нас есть, сокращает количество возможностей. Предположим, родители — фанаты «Улицы Сезам» и независимо от пола детей назвали их A и B. При нормальных условиях есть четыре равновероятные возможности: A и B — два мальчика, A и B — две девочки, A — мальчик и B — девочка, A — девочка и B — мальчик. Так как мы знаем, что хотя бы один ребёнок — девочка, мы можем исключить возможность, что A и B — два мальчика. Таким образом, у нас остается три возможности — всё ещё равновероятных. Если все возможности равновероятны и их три, то вероятность каждой из них равна 1/3. Только в одном из этих трёх вариантов оба ребёнка девочки, поэтому ответ — 1/3.

И снова о парадоксе мальчика и девочки

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

Вы можете подумать, что ответ всё равно будет 1/3: какое значение имеет вторник? Но и в этом случае интуиция нас подводит. Ответ — 13/27, что не просто не интуитивно, а очень странно. В чём дело в данном случае?

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

  • A — девочка, которая родилась во вторник, B — мальчик (в данной ситуации есть 7 возможностей, по одной для каждого дня недели, когда мог родиться мальчик).
  • В — девочка, которая родилась во вторник, А — мальчик (также 7 возможностей).
  • A — девочка, которая родилась во вторник, В — девочка, которая родилась в другой день недели (6 возможностей).
  • В — девочка, которая родилась во вторник, А — девочка, которая родилась не во вторник (также 6 вероятностей).
  • А и В — две девочки, которые родились во вторник (1 возможность, нужно обратить на это внимание, чтобы не посчитать дважды).

Суммируем и получаем 27 разных равновозможных комбинаций рождения детей и дней с хотя бы одной возможностью рождения девочки во вторник. Из них 13 возможностей, когда рождаются две девочки. Это также выглядит совершенно нелогично — похоже, данная задача была придумана только для того, чтобы вызвать головную боль. Если вы до сих пор озадачены, на сайте игрового теоретика Йеспера Юла есть хорошее объяснение этого вопроса.

Если сейчас вы работаете над игрой

Если в игре, дизайном которой вы занимаетесь, есть случайность, это отличный повод её проанализировать. Выберите какой-нибудь элемент, который вы хотите проанализировать. Сначала спросите себя, какова, по вашим ожиданиям, вероятность для данного элемента, какой она должна быть в контексте игры.

Например, если вы создаёте RPG и думаете, какой должна быть вероятность, что игрок победит монстра в битве, спросите себя, какое процентное отношение побед кажется вам правильным. Обычно в случае с консольными RPG игроки очень расстраиваются при поражении, поэтому лучше, чтобы они проигрывали нечасто — в 10% случаев или меньше. Если вы дизайнер RPG, вы, наверно, знаете лучше, чем я, но нужно, чтобы у вас была базовая идея, какой должна быть вероятность.

Затем спросите себя, зависимые ли у вас вероятности (как с картами) или независимые (как с игральными костями). Разберите все возможные результаты и их вероятности. Убедитесь, что сумма всех вероятностей равна 100%. И, конечно, сравните полученные результаты со своими ожиданиями. Получается ли бросать игральные кости или вынимать карты так, как вы задумали, или видно, что значения нужно корректировать. И, конечно, если вы найдете недостатки, можете использовать те же расчёты, чтобы определить, насколько нужно поменять значения.

Задание на дом

Ваше «домашнее задание» на этой неделе поможет вам отточить навыки работы с вероятностью. Вот две игры в кости и карточная игра, которые вам предстоит анализировать, используя вероятность, а также странная механика игры, которую я когда-то разрабатывал, — на её примере вы проверите метод Монте-Карло.

Игра №1 — Драконьи кости

Это игра в кости, которую мы как-то раз придумали с коллегами (спасибо Джебу Хевенсу и Джесси Кингу), — она специально выносит мозг людям своими вероятностями. Это простая игра казино, которая называется «Драконьи кости», и это азартное соревнование в кости между игроком и заведением.

Вам дается обычный кубик 1d6. Цель игры — выбросить число больше, чем у заведения. Тому дается нестандартный 1d6 — такой же, как и у вас, но на одной из его граней вместо единицы — изображение дракона (таким образом, у казино кубик дракон-2-3-4-5-6). Если заведению выпадает дракон, оно автоматически выигрывает, а вы проигрываете. Если обоим выпадает одинаковое число — это ничья, и вы кидаете кости снова. Победит тот, кто выбросит большее число.

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

Предположим, что выигрыш составляет 2 к 1. Таким образом, если вы побеждаете, вы сохраняете свою ставку и получаете её удвоенную сумму. К примеру, если вы ставите 1 доллар и выигрываете — вы сохраняете этот доллар и получаете еще 2 сверху, итого 3 доллара. Если проигрываете — теряете только свою ставку. Сыграли бы вы? Чувствуете ли вы интуитивно, что вероятность больше, чем к 2 к 1, или все же считаете, что меньше? Другими словами, в среднем за 3 игры вы рассчитываете выиграть больше одного раза, или меньше, или один раз?

Как только разобрались с интуицией, применяйте математику. Для обеих игральных костей существует лишь 36 возможных положений, так что вы без проблем можете просчитать их все. Если вы не уверены в этом предложении «2 к 1», подумайте вот о чем: предположим, вы сыграли в игру 36 раз (каждый раз ставя по 1 доллару). Из-за каждой победы вы получаете 2 доллара, из-за проигрыша теряете 1, а ничья ничего не меняет. Посчитайте все свои вероятные выигрыши и проигрыши и решите, потеряете ли вы некоторую сумму долларов или же приобретете. Затем спросите себя, насколько права оказалась ваша интуиция. А затем осознайте, какой же я злодей.

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

Игра №2 — Бросок на удачу

Это азартная игра в кости, которая называется «Бросок на удачу» (также «Птичья клетка», потому что иногда кости не бросают, а помещают в большую проволочную клетку, напоминающую клетку из «Бинго»). Игра простая, суть сводится примерно вот к чему: поставьте, скажем, 1 доллар на число от 1 до 6. Затем вы бросаете 3d6. За каждую кость, на которой выпадает ваше число, вы получаете 1 доллар (и сохраняете свою изначальную ставку). Если ни на одной кости ваше число не выпадает, казино получает ваш доллар, а вы — ничего. Таким образом, если вы ставите на 1 и вам трижды выпадает единица на гранях, вы получаете 3 доллара.

Интуитивно кажется, что в этой игре равные шансы. Каждая кость — это индивидуальный шанс выиграть в 1 случае из 6, так что в сумме трех бросков ваш шанс выиграть равен 3 к 6. Однако, разумеется, помните, что вы слагаете три отдельные кости, и вам разрешено складывать только при условии, что мы говорим об отдельных выигрышных комбинациях одной и той же кости. Что-то вам нужно будет умножить.

Как только вы вычислите все возможные результаты (вероятно, это будет легче сделать в Excel, чем от руки, ведь их 216), игра на первый взгляд всё ещё выглядит четно-нечетной. На самом деле, у казино всё же больше шансов выиграть — насколько больше? В частности, сколько в среднем вы рассчитываете проиграть денег за каждый раунд игры?

Всё, что вам нужно сделать, — суммировать выигрыши и проигрыши всех 216 результатов, а затем разделить на 216, что должно быть довольно просто. Но, как видите, тут можно попасть в несколько ловушек, именно поэтому я и говорю: если вам кажется, что в этой игре равные шансы на выигрыш, вы всё неправильно поняли.

Игра №3 — 5-карточный стад покер

Если вы уже размялись на предыдущих играх, давайте проверим, что мы знаем об условной вероятности, на примере данной карточной игры. Давайте представим себе покер с колодой на 52 карты. Давайте также представим 5-карточный стад, где каждый игрок получает только по 5 карт. Нельзя сбросить карту, нельзя вытянуть новую, никакой общей колоды — вы получаете всего лишь 5 карт.

Роял-флеш — это 10-J-Q-K-A в одной комбинации, всего их четыре, таким образом, существует четыре возможных способа получить роял-флеш. Рассчитайте вероятность того, что вам выпадет одна такая комбинация.

Я должен предупредить вас об одном: помните, что вы можете вытянуть эти пять карт в любом порядке. То есть сначала вы можете вытянуть туза, или десятку, неважно. Так что, проводя расчеты, имейте в виду, что на самом деле существует более четырех способов получить роял-флэш, если предположить, что карты выдавались по порядку.

Игра №4 — Лотерея IMF

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

Я уже упоминал ранее игру Chron X, над которой когда-то работал, и там была одна очень интересная карта — лотерея IMF. Вот как она работала: вы использовали её в игре. После того как раунд завершался, карты перераспределялись, и была возможность в 10%, что карта выйдет из игры и что случайный игрок получит 5 единиц каждого типа ресурса, фишка которого присутствовала на этой карте. Карта вводилась в игру без единой фишки, но каждый раз, оставаясь в игре в начале следующего раунда, она получала одну фишку.

Таким образом, существовал 10% шанс того, что вы введете её в игру, раунд закончится, карта покинет игру, и никто ничего не получит. Если этого не произойдет (с вероятностью 90%), появляется 10% шанс (вообще-то 9%, поскольку это 10% из 90%), что в следующем раунде она покинет игру, и кто-то получит 5 единиц ресурсов. Если карта покинет игру через один раунд (10% от имеющихся 81%, так что вероятность — 8,1%), кто-то получит 10 единиц, ещё через раунд — 15, ещё — 20, и так далее. Вопрос: каково вообще ожидаемое значение числа ресурсов, которые вы получите от этой карты, когда она наконец покинет игру?

Обычно мы бы пытались решить эту задачу, вычислив возможность каждого исхода и умножив на количество всех исходов. Есть вероятность в 10%, что вы получите 0 (0,1 * 0 = 0). 9%, что вы получите 5 единиц ресурсов (9% * 5 = 0,45 ресурсов). 8,1% того, что вы получите 10 (8,1%*10=0,81 ресурсов — в целом, ожидаемое значение). И так далее. А потом мы бы всё это суммировали.

А теперь вам очевидна проблема: всегда есть шанс, что карта не покинет игру, она может остаться в игре навсегда, на бесконечное число раундов, так что возможности просчитать всякую вероятность не существует. Методы, изученные нами сегодня, не дают нам возможности просчитать бесконечную рекурсию, так что нам придется создать её искусственным путем.

Если вы достаточно хорошо разбираетесь в программировании, напишите программу, которая будет симулировать эту карту. У вас должна быть временная петля, которая приводит переменную в исходное положение нуля, показывает случайное число и с вероятностью 10% переменная выходит из петли. В противоположном случае она добавляет к переменной 5, и цикл повторяется. Когда она наконец выйдет из петли, увеличьте общее число пробных пусков на 1 и общее число ресурсов (насколько — зависит от того, на каком значении остановилась переменная). Затем сбросьте переменную и начните заново.

Запустите программу несколько тысяч раз. В конце концов разделите общее количество ресурсов на общее количество пробегов — это и будет ваше ожидаемое значение метода Монте-Карло. Запустите программу несколько раз, чтобы удостовериться, что числа, которые вы получили, примерно одинаковы. Если разброс все еще велик, увеличьте число повторов во внешней петле, пока не начнете получать соответствия. Можете быть уверены: какие бы числа вы в итоге ни получили, они будут приблизительно верны.

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

Сейчас вам очень пригодятся функции if и rand. Rand не требует значений, она всего лишь выдает случайное десятичное число от 0 до 1. Обычно мы совмещаем его с floor и плюсами и минусами, чтобы симулировать бросок кости, о чем я уже упоминал ранее. Впрочем, в этом случае мы всего лишь оставляем вероятность в 10%, что карта покинет игру, так что мы можем просто проверить, не составляет ли значение rand меньше 0,1, и больше не забивать себе этим голову.

If имеет три значения. По порядку: условие, которое либо верно, либо нет, затем значение, которое возвращается, если условие верно, и значение, которое возвращается, если условие неверно. Так что следующая функция будет возвращаться 5% времени, и 0 остальных 90% времени: =IF(RAND()<0.1,5,0).

Существует много способов установить эту команду, но я бы использовал такую формулу для ячейки, которая представляет первый раунд, скажем, это ячейка A1: =IF(RAND()<0.1,0,-1).

Здесь я использую негативную переменную в значении «эта карта не покинула игру и пока не отдала никаких ресурсов». Так что, если первый раунд завершился и карта покинула игру, A1 — это 0; в противоположном случае это –1.

Для следующей ячейки, представляющей второй раунд: =IF(A1>-1, A1, IF(RAND()<0.1,5,-1)). Так что, если первый раунд завершился, и карта сразу покинула игру, A1 — это 0 (число ресурсов), и эта ячейка просто скопирует это значение. В противоположном случае A1 — это –1 (карта еще не покинула игру), и эта ячейка продолжает случайное движение: 10% времени она будет возвращать 5 единиц ресурсов, в остальное время ее значение будет по-прежнему равняться –1. Если применять эту формулу к добавочным ячейкам, мы получим добавочные раунды, и, какая бы ячейка ни выпала вам в конце, вы получите конечный результат (или –1, если карта так и не покинула игру после всех разыгранных вами раундов).

Возьмите этот ряд ячеек, который представляет собой единственный раунд с этой картой, и копируйте и вставьте несколько сотен (или тысяч) рядов. Возможно, у нас и не получится сделать бесконечный тест для Excel (существует ограниченное количество ячеек в таблице), но, по крайней мере, мы можем рассмотреть большинство случаев. Затем выделите одну ячейку, в которой вы поместите среднее значение результатов всех раундов — Excel любезно предоставляет для этого функцию average().

В Windows вы хотя бы можете нажать F9 для пересчета всех случайных чисел. Как и раньше, сделайте это несколько раз и посмотрите, одинаковые ли величины вы получаете. Если разброс слишком велик, удвойте число пробегов и попробуйте снова.

Нерешенные задачи

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

Нерешенная задача №1: Лотерея IMF

Первая нерешенная задача — предыдущее задание на дом. Я легко могу применить метод Монте-Карло (с помощью С++ или же Excel) и буду уверен в ответе на вопрос «сколько ресурсов получит игрок», но я не знаю точно, как предоставить точный доказуемый ответ математически (это же бесконечная серия).

Нерешенная задача №2: Последовательности фигур

Эту задачу (она тоже выходит далеко за пределы задач, которые решаются в этом блоге) мне подкинул один знакомый геймер более десяти лет тому назад. Во время игры в блэкджек в Вегасе он заметил одну интересную особенность: вынимая карты из башмака на 8 колод, он видел десять фигур подряд (фигура или фигурная карта — 10, Джокер, Король или Королева, так что всего их 16 в стандартной колоде на 52 карты или 128 в башмаке на 416 карт).

Какова вероятность того, что в этом башмаке по меньшей мере одна последовательность десяти или более фигур? Предположим, что их тасовали честно, в случайном порядке. Или же, если вам больше нравится, какова вероятность того, что нигде не встречается последовательность из десяти или более фигур?

Можем упростить задачу. Вот последовательность из 416 частей. Каждая часть — 0 или 1. Есть 128 единиц и 288 нулей, случайно разбросанных по всей последовательности. Сколько существует способов в случайном порядке перемежить 128 единиц 288 нулями и сколько раз в этих способах встретится как минимум одна группа десяти или более единиц?

Всякий раз, как только я принимался за решение этой задачи, она казалась мне лёгкой и очевидной, но стоило углубиться в детали, как она внезапно разваливалась на части и представлялась просто-таки невозможной.

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

11
31 комментарий

Парадокс Монти Холла (лично для меня) объяснен многословно и непонятно. Если бы раньше не прочел объяснение в русской вики - ничего бы не понял.
Вот оно, кстати: https://ru.wikipedia.org/wiki/Парадокс_Монти_Холла
И ссылка на флешку - битая.

1

UPD: имхо, тервер для геймдизайнера это что-то сродни высшей математики для разработчика 2д клиентских приложений.
То есть - знание не лишнее, но и не обязательное.

Так же, как средний флешер может обойтись теоремой пифагора, арктангенсом и кривой безье для решения 99.9% задач, так же и геймдизу достаточно запомнить формулу рейтов (брать из любой онлайн игры, например ВоВа), научится работать с прогрессиями и (вишенкой на тортике) выучить распределение Пуассона.
А так практически все задачи игрового баланса - не математические, а логические и аналитические.

1

"Основы теорвера для самых маленьких"

1

вся книга для самых маленьких, в этом ее смысл

Вспомнил Форест Гамп, момент про блюда из креветок или чего-то похожего.

Люблю увлеченных людей, если что

На сколько генератор случайных чисел независимый на покерных сайта? Ведь заработок "оператора" напрямую зависит от количества денег в банке, т.е. розданных комбинациях на руках и на борде? Чем чаще игрок входит в игру, тем больше зарабатывает "оператор" игр...