0

Игра ним с тремя кучами камней

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

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

Содержание

История игры [ править | править код ]

Китайская игра ним упоминалась европейцами ещё в XVI веке. Имя «ним» было дано игре американским математиком Чарльзом Бутоном (англ. Charles Bouton ), описавшим в 1901 году выигрышную стратегию игры. Существует несколько вариантов происхождения названия игры:

  • от немецкого глагола nehmen или от староанглийского глагола Nim, имеющих значение «брать»;
  • ананим от английского глагола Win («побеждать»).

Игрушка «Доктор Ним», небольшой шариковый компьютер, придуманный в 1960-х, играл не в ним, а в игру Баше.

Стратегия игры [ править | править код ]

В общем случае рассматривается p <displaystyle p> кучек предметов с N 1 , N 2 , ⋯ N p <displaystyle N_<1>,N_<2>,cdots N_

> предметами. Игроки ходят по очереди. Ход заключается в том, что игрок берёт из кучки i ∈ [ 1 , p ] <displaystyle iin [1,p]> n ∈ [ 1 , N i ] <displaystyle nin [1,N_]> предметов. Каждой позиции игры ставится в соответствие ним-сумма этой позиции — результат сложения размеров всех кучек в двоичной системе счисления без учёта переноса разрядов, то есть сложение двоичных разрядов чисел в поле вычетов по модулю 2: S = N 1 ⊕ N 2 ⊕ ⋯ ⊕ N p <displaystyle S=N_<1>oplus N_<2>oplus cdots oplus N_

>

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

Пример: предположим, в игре три кучки, в них соответственно 2 (0010 в бинарном представлении), 8 (1000) и 13 (1101) предметов. Ним-сумма этой позиции — 7 (0111). Следовательно, выигрышная стратегия состоит в том, чтобы взять 3 предмета из третьей кучки — там останется 10 (1010) предметов, и ним-сумма позиции станет 0 (0000). Предположим, после вашего хода противник забирает все предметы из первой кучки — выигрышная стратегия будет заключаться в том, чтобы забрать 2 предмета из третьей кучки. В таком случае после вашего хода в кучках будет соответственно 0 (0000), 8 (1000) и 8 (1000) предметов, ним-сумма по прежнему будет равняться 0.

Варианты игры [ править | править код ]

Шоколадка [ править | править код ]

Есть шоколадка m×n, одна долька «отравленная». Игрок своим ходом разламывает шоколадку по линии и съедает неотравленную часть. Проигрывает тот, кому останется отравленная долька. Игра эквивалентна ниму с четырьмя кучками.

Мизер [ править | править код ]

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

Читайте также:  Бездисковые рабочие станции windows

Мультиним [ править | править код ]

Более общий случай игры Ним был предложен Элиакимом Муром. В игре N i m i <displaystyle Nim_> игрокам разрешается брать предметы из максимум i <displaystyle i> кучек. Легко видеть, что обычная игра ним является N i m 1 <displaystyle Nim_<1>> . Для решения необходимо записать размеры каждой кучки в двоичной системе счисления и просуммировать эти числа в ( i + 1 ) <displaystyle (i+1)> -ичной системе счисления без переносов разрядов. Если получилось число 0, то текущая позиция проигрышная, иначе — выигрышная и из неё есть ход в позицию с нулевой величиной.

Форкед-ним [ править | править код ]

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

(Тут будет о истории Ним и подобных играх, так что если лень, листайте сразу до "Об определении стратегии" (Это под 2 картинкой))

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

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

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

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

Читайте также:  Задолженность акционерам по дивидендам актив или пассив

подобного типа был впервые опубликован в 1902 году математиком Гарвардского университета Чарльзом Леонардом Боутоном.

Эта игра приобрела популярность в Европе в 70-е годы XX века благодаря фильму французского режиссера Алена Рене «В прошлом году в Мариенбаде» (1961). Герои фильма несколько раз играют в один из вариантов этой игры. Поэтому версия игры из фильма (она будет рассматриваться в следующих постах под названием «Игра 5») иногда называется Мариенбад — по имени маленького курортного города в Чехии, где происходит действие картины.

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

Об определении стратегии

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

Игра 1: выигрывает первый

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

Сыграв несколько партий, вы быстро обнаружите, что если кто-то из игроков оставил на столе 3 фишки, то следующим ходом он обязательно выигрывает. Верно подмечено, но это не поможет нам всегда выигрывать: мы не знаем, какие ходы нужно совершать, чтобы на столе осталось 3 фишки. Но теперь мы знаем, что выигрывает тот, кто взял фишку номер 17. Таким образом, число фишек в игре сокращается. Сделав еще один подобный шаг, мы увидим, что игрок, оставивший на столе 6 фишек, тоже будет всегда выигрывать. В общем, всегда выигрывает тот, кто оставляет на столе число фишек, кратное 3. Это позволяет сформулировать выигрышную стратегию: когда в начальной позиции на столе 20 фишек, первый игрок будет всегда выигрывать, если будет брать первым ходом 2 фишки и затем всегда оставлять на столе количество фишек, кратное 3 (если второй игрок снимает одну

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

Изменение начального количества фишек может частично повлиять на эту стратегию и даже на то, какой из игроков будет иметь преимущество. Теперь мы знаем, что выигрышная стратегия состоит в том, чтобы оставлять на столе число фишек, кратное 3. Чтобы узнать, на чьей стороне преимущество, достаточно разделить начальное количество фишек на 3 и посмотреть, каков остаток от деления. Если остаток равен 2 (как в исходном случае), то первый игрок всегда выигрывает, если берет первым ходом 2 фишки, а затем оставляет на столе число фишек, кратное 3 (если противник берет одну фишку, первый игрок берет две, и наоборот). Если остаток от деления равен 1 (например, число фишек равно 19, 25, 100 или 2017), то первый игрок также выигрывает. Для этого достаточно взять первым ходом одну фишку. Наконец, если остаток равен (количество фишек делится на 3), то выигрывает второй игрок: ему нужно взять две фишки, если первый игрок взял одну, и наоборот. В этом случае первый игрок никогда не сможет оставить на столе число фишек, кратное 3.

Читайте также:  Выбор мультиметра для радиолюбителя

Таким образом, мы обобщили игру для любого начального числа фишек. Игру

можно обобщить и дальше, изменив число фишек, которые можно брать на каждом

Игра 2: выигрывает второй

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

Как уже предлагалось ранее, будет удобно сыграть несколько партий самому, чтобы попытаться определить выигрышную стратегию для одного из игроков и понять, как эта игра связана с предыдущей. Будем анализировать игру следующим образом: если проигрывает тот, кто напишет 100, выигрывает тот, кто напишет 99. Какое число нужно написать до этого, чтобы гарантированно получить 99 на следующем ходу? Это 88, так как в этом случае противник напишет любое число между 89 и 98, после чего первый игрок легко получит 99. Как и в прошлой игре, продолжая подобные рассуждения (перейдя к числу 88, затем 77, 66, . 11), мы увидим, что на этот раз нужно формировать группы по 11. Теперь нам известна выигрышная стратегия: тот, кто первым записывает 11 и последующие числа, кратные 11, первым получит 99 и выиграет. Если противник прибавляет n, нужно прибавлять 11 – n. Так как на первом ходу первый игрок не может получить 11, а второй может, это означает, что существует выигрышная стратегия для второго игрока. Как и в прошлой игре, при изменении конечного числа будет выигрывать первый игрок, если это число не будет кратно 11. Если это число будет делиться на 11, всегда будет побеждать второй игрок.

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

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

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

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

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *