Выигрышная стратегия камень ножницы бумага. Как выигрывать в игре камень-ножницы-бумага? (реализация оптимальной стратегии в Wolfram Mathematica)

Перевод поста Джона Маклуна (Jon Mcloone, директор департамента международного бизнеса и стратегического развития Wolfram Research). Оригинал поста: How to Win at Rock-Paper-Scissors
Скачать пост в виде документа Mathematica

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

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

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

Я думал о создании алгоритма в качестве одной из тем нашего курса статистики в рамках концепции Computer-Based Math . Но первая же статья, на которую я наткнулся в поисках предсказательных алгоритмов, рассматривала решение при помощи сложной конструкции на основе копула-распределений. Это решение было трудным для понимания школьника (а возможно, и для меня), поэтому я решил разработать более простое решение, которое я мог бы объяснить простыми словами. И пусть даже оно уже и было разработано ранее, намного веселее создавать вещи по-своему, чем находить их готовую реализацию.

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

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

Где 1 соответствует камню, 2 - бумаге и 3 - ножницам. Это оптимальное решение. Как бы вы ни играли, вы выиграете столько же игр, сколько и компьютер, и ваш показатель побед будет колебаться в районе нуля.

Итак, теперь было бы интересно переписать функцию chooseGo чтобы осуществлять предсказание касаемо вашего выбора, используя данные о последних играх, хранящиеся в переменной history . Первым шагом будет анализ совершённых в течение последних нескольких игр выборов и поиск всех случаев вхождения какой-либо последовательности. Наблюдая за тем, что человек делал в каждой следующей игре, мы можем обнаружить некий шаблон поведения.

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

Второй аргумент это количество последних элементов истории, по которым и будет вестись поиск. В данном случае в качестве аргумента функции передано число 1, что осуществляет поиск в данных только случаев вхождения {1,2}. Если мы выберем 2, то функция будет искать вхождения последовательности {3,2}, {1,2} и вернёт пустой список, поскольку такая последовательность ранее не встречалась.

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

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

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

Таким образом из этих двух проверок мы можем обнаружить, что первый даёт оценку в 100%, что следующим выбором человека будет камень, а второй показывает, что с 75% вероятностью человек выберет камень и с 25% вероятностью - ножницы.

И здесь я несколько застопорился в решении задачи.

В данном случае два предсказания по крайне мере более менее близки по результату, хотя и расходятся в численных значениях вероятностей. Но если вы проводите поиск по трём «срезам» данных c рядом различных длин истории, и результаты предсказаний противоречивы - как их объединить?

Я поместил заметку об этой проблеме в папку «Написать про это в блог» и забыл о ней до тех пор, пока несколько недель назад не произошёл спор о том, как осветить концепцию "статистической значимости " в курсе Computer-Based Math.

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

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

Теперь, если мы возьмём последний полученный нами результат, обнаруживается, что лучшее предсказание - камень, имеющее p-значение 0.17. Это значит, что лишь с вероятностью 0.17, данные, используемые для данного предсказания, отклоняются от дискретного равномерного распределения (DiscreteUniformDistribution[{1,3}] ), причём скорее случайно, чем из-за систематической ошибки, производимой человеческом или по какой-либо другой причине, которая могла изменить распределение.

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

И делаем такой выбор, который побьёт выбор человека.

Здесь вы видите результат. Вы можете скачать и самостоятельно опробовать его с сайта Wolfram Demonstrations.

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

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

Такой подход ведёт к началу некой «гонки вооружений», соревнований по написанию алгоритмов, которые будут выигрывать в камень-ножницы-бумагу у алгоритма соперника, и единственный способ прекратить это - вернуться к стратегии равновесия Нэша, осуществляя выбор через RandomInteger[{1,3}] .

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

Благодарю за помощь, оказанную в переводе данного поста.

Ребята, мы вкладываем душу в сайт. Cпасибо за то,
что открываете эту красоту. Спасибо за вдохновение и мурашки.
Присоединяйтесь к нам в Facebook и ВКонтакте

Если вы постоянно проигрываете в крестики-нолики или в «камень, ножницы, бумага», то, возможно, все потому, что вы не знаете выигрышной стратегии. Или ее знает ваш соперник.

сайт расскажет про способы, которые помогут вам побеждать в 5 самых популярных играх и одерживать верх в спорах.

1. Крестики-нолики

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

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

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

2. «Монополия»

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

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

  1. Не беспокойтесь об отелях. После того как вы собрали одну из цветовых территорий, постройте как можно скорее 3 дома. 3 дома - это точка, в которой вы находите лучшее применение своим деньгам. Их несложно построить, и они приносят высокий доход.
  2. Лучшие территории - это оранжевые, светло-голубые и красные. У них хорошее расположение, они принесут вам высокий доход и помогут выиграть.

3. Армрестлинг

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

    Наклонитесь к столу, выдвиньте правую ногу вперед и поставьте правый локоть на стол. Если вы используете левую руку, то выдвигайте левую ногу.

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

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

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

  • Для решающего удара немного разверните корпус и навалитесь плечом в нужном направлении. Теперь осталось только тащить соперника к себе и давить вниз. Вы победили!

4. Бильярд

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

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

  1. Не торопитесь. Звучит банально, но большинство людей проигрывают, потому что торопятся ударить по шару. Потренируйтесь, прицельтесь, присмотритесь. Не обращайте внимания, если вас торопят. В этой игре важно терпение.
  2. Бейте правильно. Если ваш шар отклоняется от намеченной траектории, значит, вы бьете не в центр шара. Поставьте кий так, чтобы он совпадал с линией будущего удара. Если вы правша, то отставьте правую ногу перпендикулярно этой линии, левая нога выставлена вперед. Плечо, бедро, локоть и подбородок должны находиться в одной плоскости.

5. «Камень, ножницы, бумага»

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

Исследователи из Чжэцзянского университета провели огромное количество экспериментов, результаты которых показали некоторые закономерности.

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

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

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

Между тем, не многие знают, что данная игра зародилась в Китае, позднее, в 19-20 веках, приобрела популярность во многих странах мира, в том числе и России. А в начале 21-го века появились и первые чемпионаты по этом «виду спорта» со значительными призовыми фондами.

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

1. Мужчины имеют тенденцию первым выбрасывать «камень», потому что он воспринимается как сила и решительность. Поэтому на этом можно подловить сильную половину человечества, они достаточно часто на этом попадаются. Используя эту особенность легко можно победить, показывая «бумагу». Но помните, что с опытными игроками такой трюк не сработает.

2. Если вам «повезло» играть с опытным игроком, он вряд ли первый раз покажет «камень» - это слишком очевидно. Поэтому «ножницы» - довольно оптимальный вариант.

3. Скажите своему оппоненту, что собираетесь показать и затем…покажите, что сказали. Почему? До тех пор, пока в не играете с кем-то, кто не знает о вашей наглости, вы можете, сообщив о своих намереньях, получить выгодный для вас бросок. Например, если вы заявите «камень», то ваш противник не будет выбрасывать «бумагу», посчитав, что вы покажете «ножницы». Данный ход может принести вам победу или ничью.


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

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

6. Случаются ситуации, когда вы не знаете, что выкинуть. В таком случае советую вам показать «бумагу». По статистике, «ножницы» показывают несколько реже всего остального.

Впрочем, не так давно британские ученые, установили, что самая выигрышная стратегия в игре - это показывать «ножницы». Дело в том, что чаще всего оппонент подсознательно ожидает жеста «камень», поэтому и показывает «бумагу».

В игре “камень-ножницы-бумага” два соперника трясут рукой и произвольно выдают жесты, причем каждый может выиграть, проиграть или попадает вничью с одинаковой вероятностью. Тут вроде бы играет роль исключительно удача, а не навыки. И действительно, если бы люди могли действовать 100% произвольно, то выигрывали все c одинаковой частотой.

Но тут есть одна проблема: люди совершенно не могут действовать произвольно.

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

Грэхэм Уолкер, ветеран в этой игре, 5-кратный организатор Чемпионата мира по игре в “камни-ножницы-бумага”, утверждает, что есть два пути к победе. Первый состоит в ограничении возможностей оппонента — например, можно повлиять, чтобы соперник не играл бумагой. Второй способ — заставить совершить предсказуемый ход. В обоих случаях, как писал Уолкер на своем сайте Мирового сообщества КНБ, “суть в том, что нужно незаметно манипулировать соперником”.

Непобедимый камень

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

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

Двойной удар

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

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

Фокусы мышления

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

Это тенденция имитировать действия другого человека отлично работает. Недавнее исследование о принятии решений в игре “камень-ножницы-бумага”, опубликованное в журнале Proceedings of the Royal Society B за июль 2011 года, показало, что игроки часто имитируют последние ходы своих соперников. Это происходит непроизвольно.

Объявление следующего хода перед началом тура — также эффективный ментальный прием. Но он работает только один раз. Уокер поясняет: “Если вы скажете сопернику, что будете ходить бумагой, соперник подумает, что вы блефуете. Подсознательно он не выберет ход ножницами (которые побьют бумагу), и выберет ход камнем или бумагой. Если вы таки походите бумагой, как обещали, вы заработаете победу или ничью”.

Не ждите возмездия

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

Забавно, обезьяны демонстрируют ту же схему поведения. В исследовании, опубликованном в журнале Neuron за май 2011, ученые из Йельского университета тренировали макак-резусов играть в “камень-ножницы-бумагу”. Животные реагировали на проигрыш также, как люди. Обезьяны повторяли последний выигрышный код. Это говорит о том, что обезьяны, как и люди, способны анализировать прошлые результаты и также думают, что повторный ход принесет им уже другой, противоположный результат.

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

Удар ниже пояса

Есть еще один трюк — если честность победы для вас не так важна, как сама победа. Уолкер советует: “Когда предлагаете кому-то сыграть, не говорите о том, сколько раундов хотите сыграть. Сыграйте первый матч и, если победите, то на этом и закончите. Если проиграете, сразу начинайте “следующий” раунд. Без сомнения, вы услышите протесты со стороны соперника, но стойте на своем, потому что нельзя определить победителя всего по одной партии”. Может и нечестно, зато как умно.

Не догадывались о таком изобилии стратегий в простой игре “камень-ножницы-бумага”? Правила самой игры может и просты, но человеческий разум устроен куда сложнее.

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

Психология

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

Слово исследователям

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

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

Игры разума

Точно так же, как и в игре в покер, вы можете легко победить соперника, использовав макиавеллевскую силу внушения. Извечная тактика объявления, какой рукой вы будете играть, может оказаться полезным трюком. До тех пор, пока вы не играете с кем-то, кто на самом деле думает, что вы достаточно смелы, чтобы говорить о своем ходе, а затем делаете его на самом деле, вы можете изменить ход на тот, который победит ранее объявленный вами. Итак, если вы скажете, что выбросите «камень», ваш противник использует «бумагу». Это значит, что «ножницы» дадут вам в худшем случае ничью, а в лучшем - победу.

И, наконец, когда остальные шансы потеряны, вашей самой безопасной ставкой может быть «бумага», поскольку статистически ее выбирают только в 29,6% случаев, а не в 33,33%, как того можно было бы ожидать.