Я пытаюсь разработать ИИ для карточной игры, и я немного застрял в технике / алгоритме, который я должен использовать. Вот несколько предположений об игре:
- После раздачи карт игрокам нет случайности. Я имею в виду, что каждый игрок может выбрать, какие карты он играет, но случайный процесс не происходит, как при раздаче карт в начале игры.
- Существует ограничение на карты, которые можно разыграть, когда карта уже разыграна.
- Игрок, выигравший трюк, играет первым. Например, игрок 1 разыгрывает карту, игрок 2 разыгрывает карту и выигрывает. Затем игрок 2 играет карту, а затем игрок 1 играет.
Я знаю много подсказок / правил (например, если я знаю, что у игрока есть карты A, B, C, я должен играть в D), что помогает мне выиграть в игре. Поэтому я сначала хотел использовать байесовскую сеть для описания этих правил. Проблема в том, что я не знаю вероятностей для назначения, но я мог бы вычислить эвристику, используя историю сыгранных игр (против человека). Во-вторых, очень вероятно, что я не знаю всех правил и что есть некоторые неявные правила, которые нужны ИИ, чтобы найти оптимальную игру.
Я не уверен, что это был бы хороший способ разработать ИИ для такой карточной игры?
Мне также интересно, есть ли другие методы, которые лучше всего подходят для этой проблемы. Например, я взглянул на минимакс (возможно, с алгоритмом сокращения), но будет ли хорошим вариантом для этой проблемы? Я совершенно не уверен, так как самые важные игры находятся в начале игры, когда есть самые высокие неизвестные параметры (большинство карт еще не разыграно).
Ответы:
Ваш пример звучит похоже на Бридж . Лучшие системы для игры в бридж используют методы Монте-Карло для выбора ходов. На высоком уровне:
Как только вы что-то заработаете, вы можете добавить все виды обогащенных стратегий. Например, измените свои вероятности на основе исторических игр игрока, измените вероятности на основе стиля игрока (пассивного, осторожного, агрессивного) или даже учитывайте эффекты конкретных игроков, играющих вместе.
Изменить за комментарий LaurentG:
В конечном счете, вы можете отказаться от идеи идеальной игры для всех игроков и заменить что-то более реалистичным. Концептуально, отделите вероятности нахождения карты в чьей-то руке (раздача карт) от вероятности того, что игрок разыграет данную легальную карту во время раздачи (выбор карты).
Выбор карт созрел для обучения. Если вы отслеживаете игры между играми, вы можете узнать, как данный игрок, или игроки в целом, склонны играть на основе карт в их руке и карт, которые были сыграны. Вы даже можете придумать и смоделировать их предположения о скрытых от них картах.
Есть также возможности обучения для распространения карт. Прошлые ставки игрока и выбор карты во время раздачи могут показать «рассказ» о том, что спрятано в их руке. Вы можете использовать исторические данные для корректировки вероятностей при построении каждой виртуальной игры.
источник
Случай недавнего личного опыта:
Я сам работал над карточной игрой (Bisca, португальская игра для 2 игроков), и я получал хорошие результаты, используя методы Монте-Карло, особенно с использованием недавнего алгоритма поиска информационных множеств Монте-Карло (ISMCTS), описанного с помощью пример исходного кода на Python по адресу http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm ).
Игра неплохо, с неправильным ходом, просто со знанием правил игры. В настоящее время я пытаюсь добиться этого, чтобы иметь возможность улучшить его, так как согласно информации, которую я прочитал об этом (и его "родительском" MCTS), возможно улучшить его игру с помощью эвристики ( http: // www .orangehelicopter.com / ed /apers / aiide13.pdf ) и вывод карты оппонента.
источник
Я думаю, это зависит от правил игры.
Вот что я понимаю из вашего вопроса:
Предположения:
Пример игры, которая следует этим правилам:
Теперь эта игра определяется удачей розыгрыша и возможностью запомнить, какие карты были разыграны, чтобы узнать руку противника.
В этой ситуации я бы заставлял ИИ лишь частично запоминать, какие карты были сыграны, то есть случайным образом удалять из запоминаемого списка некоторый процент сыгранных карт (меньшее число = высокий уровень сложности ИИ), но не такие важные, как тузы или короли. Таким образом, например, ИИ будет знать, что безопасно играть в «Королеву сердец», потому что он будет помнить, что у противника нет туза или короля, но ему придется рассчитать вероятность, если он захочет сыграть 10, потому что он может не помнить, если Джек все еще в игре.
Это имитирует человеческое внимание.
TL; DR
Ограничьте, сколько ИИ знает, поэтому его решения не идеальны, просто достаточно хороши.
источник