Основы игрового баланса: Интранзитивные механики на примере игры «Камень — ножницы — бумага»

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

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

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

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

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

В ММО и настольных РПГ зачастую имеются определенные классы персонажей, которые особенно успешно сражаются с другими классами, и так далее. Так что, как видите, интранзитивные механики применяются буквально повсюду.

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

Иногда это всё — чистая математика. В Magic: the Gathering существо ⅓ проиграет существу 3/2, которое проиграет существу 2/1 с первым ударом, которое, наконец, проиграет изначальному существу ⅓.

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

Решения непереходных механик

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

Что в данном случае подразумевается под «решением»? Это не может быть кривая стоимости, потому что каждый вариант иногда выигрывает, а иногда — проигрывает. Это соотношение того, насколько часто вы выбираете каждый доступный вариант, и того, насколько часто вы ожидаете, что противник выберет каждый из своих вариантов. К примеру, сбор армии, на 30% состоящей из лучников, на 50% — из пехоты, и на 20% — из летающих бойцов (или 3:5:2) может быть решением к непереходной игре с этими юнитами (при определённых условиях).

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

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

Да какая разница?

Стоит спросить: если все игры с непереходной механикой — всего лишь продвинутые версии «Камень-Ножницы-Бумага», в чём их привлекательность? Немногие играют в «Камень-Ножницы-Бумага» для удовольствия, так зачем им играть в игру, которая использует такую же механику, лишь немного её маскируя?

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

В играх с блефом участники могут принимать решения, основанные на том, что, по их наблюдениям, ранее делали другие игроки, и пытаться предсказать дальнейшие шаги других. Это особенно интересно в играх, где информация дается не вся и не сразу (к примеру, в покере). Так что, надеюсь, вы понимаете, что, если в игре присутствует непереходная механика, эта игра вовсе не обязательно такая же скучная, как «Камень-Ножницы-Бумага».

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

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

Решение стандартной КНБ

Давайте начнем с того, что решим стандартную игру КНБ (камень-ножницы-бумага), чтобы посмотреть на принцип её работы. Поскольку любая фигура теоретически хороша, мы можем ожидать, что соотношение будет 1:1:1, что означает, что вы одинаково часто будете выбирать каждую фигуру. И так оно и получится, но важно понимать, как мы дошли до этого, чтобы решать более сложные задачи в дальнейшем.

Для начала давайте взглянем на результаты. Давайте обозначим фигуры противника буквами «к», «н», «б», а наши — «К», «Н», «Б» (нам достались прописные буквы, потому что они клёвые). Поскольку выигрыш и проигрыш одинаково вероятны и противоположны друг другу (таким образом, один выигрыш и один проигрыш взаимонейтрализуются), а ничья — где-то посередине. Давайте обозначим выигрыш »+1», проигрыш — »-1», а ничью — »0» очков. Математический подход был бы применим здесь к любым числам, но так будет проще. Теперь сконструируем таблицу результатов:

к н б
К 0 -1 +1
Н +1 0 -1
Б -1 +1 0

Конечно, это с нашей точки зрения — например, если мы выбросим (к)амень, а противник — (н)ожницы, мы выиграем и добавим +1 к нашему счету. У противника же таблица будет выглядеть ровно противоположным образом.

А теперь давайте немного переиграем это всё и назовем «к», «н» и «б» вероятностями, которые будет создавать противник при каждой соответствующей фигуре. К примеру, предположим, что вы заранее знаете, что ваш противник использует стратегию, где «к» равен 0,5, «б» равна «н», которые равны 0,25 (то есть на каждые ножницы или бумагу он два раза выбрасывает камень). Какова наилучшая контрстратегия?

Чтобы ответить на этот вопрос, мы можем вывести систему из трех уравнений, которая укажет ваши выигрыши для каждой из трех фигур:

  • Выигрыш для К = 0 * к + (-1) * б + 1 * н = н — к
  • Выигрыш для Б = 1 * к + 0 * б + (-1) * н = к — н
  • Выигрыш для Н = (-1) * к + 1 * б + 0 * н = б — к

Так что, основываясь на вероятностях, вы можете просчитать выигрыши. В случае нашего упрямого противника выигрыши будут следующие: К = 0, Б = 0,25, Н = -0,25.

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

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

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

Немного математических теорем

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

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

Во-вторых, каждый выигрыш должен быть таким же, как и остальные; таким образом, К = Б = Н. Если какую-либо стратегию вообще стоит выбирать, она будет предоставлять такой же выигрыш, как и все остальные, потому что, если бы выигрыш был меньше, чем в других таких же стратегиях, её уже не стоило бы выбирать (вы бы просто взяли какую-нибудь стратегию с большим выигрышем). Если бы выигрыш в ней был больше, чем в других, вы бы выбирали только её и игнорировали остальные стратегии. Таким образом, все потенциальные ходы, которые можно выбрать, имеют одинаковый выигрыш.

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

Подытожим:

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

Заканчиваем решение КНБ

Давайте вернёмся к нашим уравнениям. «Камень-Ножницы-Бумага» — это симметричная игра с нулевой суммой, так что:

К = Б = Н = 0.

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

к + б + н= 1

С этого момента мы можем решить систему уравнений методом замены:

  • К = 0 = н — б, таким образом, б = н
  • Б = 0 = к — н, таким образом, к = н
  • Н = 0 = б — к, таким образом, б = к
  • к + б + н = к + к + к = 1, таким образом, к = ⅓
  • Поскольку к = б = н, б = ⅓, н = ⅓

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

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

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

Решаем КНБ с неравным счетом

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

Вот вам пример. Предположим, что я ввёл в игру новое правило: если игрок побеждает, показав камень, это засчитывается, как два выигрыша. Так же легко вы можете вообразить это: в файтинге атаки наносят обычный ущерб, а блоки наносят столько же ущерба (давайте предположим, что успешный блок допускает контратаку), но при этом броски наносят вдвое больше ущерба, чем атака или блок. Но давайте все упростим и скажем, что «каждая победа с камнем засчитывается как две». Как же это повлияет на наши вероятности?

И снова начнём с таблицы выигрышей:

к б н
К 0 -1 +2
Б +1 0 -1
Н -2 +1 0

Затем используем её, чтобы составить наши три уравнения выигрышей:

  • К = 2 * н — б
  • Б = к — н
  • Н = б — 2 * к

И снова наша игра симметрична и с нулевой суммой, и мы с противником должны выбрать только по одной фигуре, так что у нас по-прежнему:

  • К = Б = Н = 0
  • к + б + н = 1

Опять решаем:

  • К = 0 = 2 * н — б, таким образом, 2 * н = б
  • Б = 0 = к — н, таким образом, к = н
  • Н = 0 = б — 2 * к, таким образом, 2 * к = б
  • к + б + н = к + 2 * к + к = 1, таким образом, к = ¼
  • к = н, таким образом, н = ¼
  • 2 * к = б, таким образом, б = ½

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

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

Решаем КНБ с неполными победами

Предположим, что мы учтём со всем вышеперечисленным расходы на ресурсы. В файтингах обычно нет «расходов», ассоциирующихся с выполнением какого-то движения (в отличие от времени, возможно), но в стратегиях в реальном времени обычно действительно имеются настоящие расходы на ресурсы для производства юнитов.

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

Допустим, что когда рыцари атакуют лучников, они побеждают, но они всё ещё теряют 20% здоровья из-за того, что не успели сомкнуть шеренги до того, как на них посыпался град стрел. И, к примеру, лучники, выступив против летающих бойцов, теряют 40% здоровья при контратаках. Но летающие бойцы вообще не получают урона от рыцарей, потому что последние только и могут, что стоять и «отхватывать» (их мечи не очень-то годятся против бойцов, которые парят на высоте сотни футов над ними, прицельно кидаясь камнями). И, наконец, предположим, что рыцарь стоит 50 единиц золота, лучник — 75, а летающий боец — 100. И как теперь это всё будет работать?

Начнём с таблицы выигрышей:

р лучн лет
Р 50 − 50 = 0 (-50×0,2) + 75 = +65 -50
Лучн -75 + (0,2×50) = -65 75 − 75 = 0 (-75×0,4) + 100 = +70
Лет +50 -100 + (75×0,4) = -70 100 − 100 = 0

Объясню: если мы с противником возьмём одного и того же юнита, мы оба получим ноль, как подсказывает здравый смысл, но что происходит на самом деле: мы оба играем одним и тем же количеством юнитов и оба их теряем. Так что у нас обоих, по сути, чистый проигрыш, но по отношению друг к другу это всё ещё игра с нулевой суммой (например, по результатам боя рыцарь против рыцаря мы получаем 50 единиц золота, так как рыцарь противника защищается, но в то же время теряем эти же 50 единиц, поскольку наш рыцарь тоже умирает; суммируя эти результаты, мы получим чистый ноль).

А что насчет ситуации, в которой наш рыцарь встречает вражеского лучника? Итак, мы убиваем лучника, что дает нам 75 единиц золота, но это также уменьшает здоровье нашего рыцаря на 20%, так что, можно сказать, мы теряем 20% от стоимости нашего рыцаря (которая составляет 50 единиц золота, напомню), то есть в переводе на золото мы теряем 10 единиц. В итоге получаем 65 единиц золота.

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

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

  • Р = 0 * р + 65 * лучн + (-50) * лет = 65 * лучн — 50 * лет
  • Лучн = (-65) * р + 0 * лучн + 70 * лет = 70 * лет — 65 * р
  • Лет = 50 * р + (-70) * лучн + 0 * лет = 50 * р — 70 * лучн
  • Р = Лучн = Лет = 0
  • р + лучн + лет = 1

Решив это, мы получим:

  • Р = 0 = 65 * лучн — 50 * лет, таким образом, 65 * лучн = 50 * лет
  • Лучн = 0 = 70 * лет — 65 * р, таким образом, 70 * лет = 65 * р, таким образом, лет = (13/14) * р
  • Лет = 0 = 50 * р — 70 * лучн, таким образом, 50 * P = 70 * лучн, таким образом, лучн = (10/14) * р
  • р + лучн + лет = Р + (10/14) * Р + (13/14) * Р = (37/14) * Р = 1, таким образом, Р = 14/37
  • лет = (13/14) * Р= (13/14) * (14/37), таким образом, лет = 13/37
  • лучн = (10/14) * Р= (10/14) * (14/37), таким образом, лучн = 10/37

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

Решаем КНБ с неравным соотношением

До настоящего момента мы по умолчанию считали, что игра симметрична: и у игрока, и у противника одинаковое количество ходов, и мы оба выигрываем или теряем одинаковое количество очков или единиц чего-либо, и всё это подчиняется единому своду правил. Но не все интранзитивные игры одинаково симметричны.

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

Вообще-то это здорово усложняет ситуацию, поскольку теперь оба игрока должны просчитывать вероятности фигур противника, а эти вероятности уже могут измениться. Скажем, игрок А получает бонус в виде двух очков за победу с камнем, а игрок Б — нет. Какова оптимальная стратегия для обоих игроков? И какое преимущество у игрока А, и есть ли оно вообще? Давайте выясним это, составив две таблицы выигрышей.

Таблица игрока А будет выглядеть так:

кБ бБ нБ
КА 0 -1 +2
БА +1 0 -1
НА -1 +1 0

Таблица игрока Б будет выглядеть так:

кА бА нА
КБ 0 -1 +1
ББ +1 0 -1
НБ -2 +1 0

Здесь мы можем предположить, что КА = БА = НА и КБ = ББ = НБ, а также, что кА + БА + нА = кБ + бБ + нБ = 1. Тем не менее, мы не можем предположить, что КA = БA = НA = КБ = ББ = НБ = 0, потому что мы на самом деле не знаем, равны ли выигрыши для игрока А и игрока Б. Более того, интуиция подсказывает нам, что они скорее всего неравны. И вот мы получили устрашающую систему уравнений:

  • КA = 2 * нБ — бБ
  • БA = кБ — нБ
  • НA = бБ — кБ
  • КБ = нA — бA
  • ББ = кA — нA
  • НБ = бA — 2 * кA
  • КA = БA = НA
  • КБ = ББ = НБ
  • кA + бA + нA = 1
  • кБ + бБ + нБ = 1

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

КА 0 -1 +2
[БА +1 0 -1]
НА -1 +1 0

Столбец представляет левую сторону первых трех уравнений выше, строка — это кА, третий — бА, а четвертый — нА. Давайте для того, чтобы было более понятно, внесём два изменения: во-первых, сместим столбец вправо, что облегчить работу с ним; во-вторых, поскольку КА = БА = НА, давайте просто заменим их все одной переменной Х, которая будет представлять чистый выигрыш игрока А:

0 -1 +2 Х
[+1 0 -1 Х]
-1 +1 0 Х

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

0 * кБ — 1 * бБ + 2 * нБ = X

1 * кБ + 0 * бБ — 1 * нБ = X

-1 * кБ + 1 * бБ + 0 * нБ = X

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

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

* ? ? ?
[0 * ? ?]
0 0 * ?

Итак, сначала мы перестроим их, поменяв местами верхнюю и среднюю строки:

-1 +1 0 X
[0 -1 +2 X]
+1 0 -1 X

Чтобы избавиться от +1 в нижнем ряду, мы сложим верхнюю и среднюю строки и заменим результатом:

-1 +1 0 X
+1 0 -1 X
0 +1 -1 2 * X

Теперь наша матрица выглядит так:

-1 +1 0 X
[0 -1 +2 X]
0 +1 -1 2 * X

Теперь нам нужно избавиться от +1 в нижнем ряду, так что мы складываем среднюю и нижнюю строки и заменяем нижнюю строку результатом:

-1 +1 0 X
[0 -1 +2 X]
0 0 +1 3 * X

Теперь мы можем записать всё в виде стандартных уравнений и решить, начиная снизу вверх, с помощью метода замены:

  • +1 * (нБ) = 3 * X, таким образом, нБ = 3 * X
  • -1 * (бБ) +2 * (нБ) = X, таким образом, -1 * (бБ) + 2 * (3 * X) = X, таким образом, бБ = 5 * X
  • -1 * (кБ) + 1 * (бБ) = X, таким образом, кБ = 4 * X

На данном этапе нам необязательно знать значение Х, но что мы знаем, так то, что соотношение для игрока Б таково: 3 Ножниц к 5 Бумаги к 4 Камням. Поскольку нБ + бБ + кБ = 1, это означает:

кБ = 4/12 бБ = 5/12 нБ = 3/12

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

кА бА нА
КБ 0 -1 +1
ББ +1 0 -1
НБ -2 +1 0

Матрица будет выглядеть следующим образом:

0 -1 +1 КБ
[+1 0 -1 ББ]
-2 +1 0 НБ

Мы снова перестраиваем всё, и, поскольку КБ = ББ = НБ, давайте введём для них новую переменную Y (X не будем использовать, чтобы избежать путаницы с предыдущим случаем; помните, что в этом случае выигрыш для одного и другого игроков может различаться). Давайте на этот раз поменяем местами верхнюю и нижнюю строки, а также заменим выигрыши Y:

-2 +1 0 Y
[+1 0 -1 Y]
0 -1 +1 Y

Чтобы избавиться от +1 в центральной строке, перед тем, как складывать центральную строку с верхней, мы должны умножить эту строку на 2 (или же умножить верхнюю строку на ½, но мне кажется, что умножать на целые числа легче, чем на дроби):

-2 +1 0 Y
+1×2 0×2 -1×2 Y * 2
0 +1 -2 Y * 3

Теперь наша матрица выглядит так:

-2 +1 0 Y
[0 +1 -2 Y * 3]
0 -1 +1 Y

Сложив вторую и третью строки, чтобы избавиться от -1 в нижней, мы получим:

-2 +1 0 Y
[0 +1 -2 Y * 3]
0 0 -1 Y * 4

Опять пойдем снизу вверх и используем замену:

  • нA = -Y * 4
  • бA — 2 * нA = Y * 3, таким образом, бA = -Y * 5
  • -2 * кA + бA = Y, таким образом, -2 * кA = 6 * Y, таким образом, кA = -Y * 3

Итак, может показаться немного странным, что у нас тут сплошные отрицательные числа вместо положительных в прошлом случае. Возможно, это всего лишь побочный эффект того факта, что средний выигрыш для игрока А скорее всего положителен, тогда как выигрыш игрока Б скорее всего отрицателен. Так или иначе, это все выносится за скобки, так как всё, что нас интересует, это относительное соотношение камня к ножницам к бумаге. Для игрока А это соотношение — 3 камня к 4 ножницам к 5 бумаги.

кА = 3/12 бА = 5/12 нА = 4/12

Это слегка отличается от оптимального варианта для игрока Б:

кБ = 4/12 бБ = 5/12 нБ = 3/12

Итак, мы можем использовать эти данные для того, чтобы вычислить конкретное преимущество для игрока А. Мы могли бы сделать это, нарисовав таблицу 12 × 12 и проверив все 144 комбинации, высчитав их все при помощи вероятности, или мы могли бы применить метод Монте-Карло, или просто вставить эти величины в существующие уравнения. Мне представляется наиболее лёгким последний метод, поскольку у нас уже есть пара уравнений из более ранних примеров, которые прямо относятся к этим:

  • нA = — Y * 4, таким образом, Y = -1/12
  • кБ = X * 4, таким образом, X = +1/12

Мы знаем, что КA = БA = НA и что КБ = ББ = НБ, значит, выигрыш для игрока А равен +1/12, а для игрока Б — -1/12. Это весьма логично и действует как дополнительная проверка: поскольку это всё ещё игра с нулевой суммой, мы знаем, что выигрыш А должен быть равен отрицательному результату Б. В симметричной игре у них обоих бы получился 0, но эта игра несимметрична. Таким образом, если оба игрока играют оптимально, преимущество удивительно мало: всего лишь один лишний выигрыш из 12 раундов.

Решаем КНБ с дополнениями

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

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

к б н я с
К 0 -1 +1 +1 -1
Б +1 0 -1 -1 +1
Н -1 +1 0 +1 -1
Я -1 +1 -1 0 +1
С +1 -1 +1 -1 0

Также нам известно, что к + б + н + я + с = 1, и К = Б = Н = Я = С = 0. Можно посчитать это вручную, как и в предыдущих примерах, но есть и другой способ — использовать Excel, который иногда здорово облегчает жизнь.

Сначала нужно ввести вышеуказанную матрицу в сетку 5 × 5. Также вам понадобится добавить справа от этой сетки колонку 1 × 5, заполненную единицами (или любыми другими числами, не равняющимися нулю), представляющую собой переменную Х (выигрыш). Затем выберите новую пустую колонку 1 × 5, и введите следующую формулу в строке формул:

= MMULT (MINVERSE (A1: E5), F1: F5)

Для параметра MINVERSE используйте область ячеек от верхней левой до нижней правой (я, к примеру, использую область A1: E5, если моя таблица начинается в самом начале листа). Для итоговых значений (я в данном случае использую F1: F5) выделите отдельный столбец на пять строк. Наконец — и это важно — нажмите Ctrl + Shift + Enter, когда закончите вписывать формулу (а не просто Enter). Это скопирует формулу во все выделенные вами пять ячеек и будет работать с ними, как с единым массивом, что для нас важно.

Считаю необходимым предупредить, что этот метод срабатывает не всегда; в частности, если решений нет или они бесконечны, Excel в результате выдаст вам #NUM! вместо собственно числа. По сути, если вы введёте вышеупомянутую таблицу выигрышей, он выдаст вам эту ошибку; лишь слегка подправив одну из ячеек (скажем, заменив одну +1 на +0.999 999), вы создадите уникальное решение, которое отличается всего лишь на небольшую дробную часть, так что округлите несколько знаков после запятой под «настоящий» ответ. Еще одно предупреждение: любой, кто действительно разбирается в математике, содрогнётся, когда вы поступите подобным образом, потому что это в некотором роде жульничество, и вообще-то так матрицу решать нельзя.

Excel дает нам решение для 0,2 каждой из пяти переменных, это означает, что в равной степени вероятно, что противник выберет любую из пяти вариантов. Мы можем убедиться, что да, в самом деле, К = Б = Н = Я = С = 0, так что не имеет значения, какую фигуру мы выбираем, в данном случае они все годятся, если противник играет случайно и шансы выбрасывания каждой фигуры равны.

Решаем КНБ с дополнениями и неравными взаимоотношениями

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

Давайте рассмотрим в качестве примера несбалансированную игру «Камень-ножницы-бумага-динамит». Идея заключается в том, что при наличии четвёртой фигуры, динамит побеждает камень (взрывает), а ножницы побежд

©  vc.ru