Pull to refresh

Comments 19

Зануда моде он: «Сумма технологии» все же у Лема
Будем считать, что я упустил «птичку» над «и».
Прикольно, хотя в шахматных вариациях побеждается легко.



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



У Platform Chess, надо доделывать оценку. То что сейчас — это полуфабрикат (но всех старых ботов рвёт как тузик грелку). Манкала меня самого порадовала. Удачно получилась.
Ирония заключается в том, что если первый игрок всё делает правильно — он выигрывает.

Так ли это? Второй игрок может загнать игру в цикл и таким образом не проиграть. Мне удалось 2 раза выиграть, но это, похоже, баг алгоритма. Алгоритм иногда делает разные ходы из одинаковых состояний. Можно пользоваться кнопкой назад и повторять ход и получать разные результаты. Или не получать, я не разобрался от чего это зависит. Немного странно, учитывая то, что автор писал про сложность (отсутствие) рандомизации.


Буду обозначать ход игрока буквами L и R — брать шарики из левой лунки или правой соответственно. Состояние игры буду обозначать четырьмя цифрами [ЛевыйВерх, ПравыйВерх, ЛевыйНиз, ПравыйНиз].


Перовые ходы из состояния [2222] должны быть такие:
L[3014] L[0116] R[0332 или 3032].
Если мы попали в состояние [0332], то нужно делать такие ходы, опять же обязательно:
R[0440*] L[3122] L[4013] L[1115] R[0332 или 3032].
В результате попадаем в одно из тех двух состояний, которые были после третьего хода.
Второй игрок может всегда сводить игру к состоянию [0322] и никогда не проигрывать.
* Иногда на этом ходу можно получить состояние [2141] вместо [0440]. Один раз я выиграл из этого состояния. Потом несколько раз в него попадал, но довести до победы не удавалось.


Состояние [3032] более сложное, там гораздо больше вариантов. Один раз удалось победить через эту комбинацию, но стратегию не нашел. Да это и не важно. Второй игрок не обязан допускать такое состояние.


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

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

Анализ проводить не буду, для этого придется более глубоко разобраться в теме.


Но я попробовал нажимать стрелку вперед. В одной игре раз 5 прошел цикл (не совсем цикл, ходы немного отличались, но в итоге в игре несколько раз были одинаковые состояния, например [0440]). Надоело. А один раз я проиграл, но тогда первые 3 хода я сделал сам, чтобы не ждать.


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

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

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


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

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

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

Да, не проиграть первому игроку, наверно, можно. Второму — точно можно. Насчет гарантировано выиграть — не уверен.
Смотрите, у Вас на графике есть положение, крайнее справа, S1421:


2 1
1 4

Ход левой нижней лункой, N2105:


2 1
0 5

Из этого положения у Вас на графике 2 варианта: S1502 и S1520:


0 2  |  2 0
1 5  |  1 5

Или я что-то не понимаю или у Вас ошибка. Оба варианта невозможны из состояния N2105.
Единственный вариант не проиграть это ходить в S0530:


3 0
0 5

Поправьте меня, если я ошибаюсь.

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

Согласен, не разобрался в обозначениях и напутал.


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


По карте видно, что есть 3 позиции, в которой Север может сделать не правильный ход (и проиграть при правильной стратегии Юга). А может и не делать и не проигрывать. Т.е. эти плохие ходы для Севера бессмыслены, что я и хотел сказать в первом комментарии. Стратегия не проигрывать есть, а стратегии выигрывать нет.


В одном сценарии из 3х цепочка до проигрыша довольно длинная, а в двух других проигрыша Севера наступает через 6 ходов (суммарно для двух игроков). Скорее всего глубина просчета немного меньше.


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

Если понравилась Mini Mancala, вот здесь есть несколько манкал-головоломок. Правило посева отличается. Если посев завершается в непустой лунке, надо взять оттуда все камни и продолжать посев дальше. Посев проходит через амбар. Если посев завершается в амбаре, можно сходить ещё раз. Завершение посева в пустой лунке, не амбаре — поражение. Надо собрать в амбар все камни.
Следующий вариант — подключения АльфаГо механизма? ))
Универсальный бот — это ещё та задача!
Ну разве что уже обученную сетку как-то прикрутить (да кто мне её даст?).
Бот условно универсальный. Есть куча игр, для которых он не подходит.
Игры нескольких игроков, игры с неполной информацией, костями, да мало ли?
Sign up to leave a comment.

Articles