Подтвердить что ты не робот

Любая хорошая стратегия игры в карточную игру?

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

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

Есть ли у кого-нибудь опыт? Ссылки и направления были высоко оценены.

4b9b3361

Ответ 1

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

Ответ 2

Другим хорошим показателем является http://aigamedev.com/ сайт. Он очень подробный и идет в примеры кода, где он применяется.

Ответ 3

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

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

Ответ 4

конкретный ответ: реализуйте алгоритм min-max со случайными событиями, такими как рисование карт, содержащих возможности, вместо жестких решений.

Ответ 5

В Университете Альберты есть покерная программа Polaris, которая конкурирует с профессионалами в турнирах. Их веб-сайт содержит много информации.

Ответ 6

использовать здравый смысл: позволить компьютеру играть по тем же правилам, что человек (логический), и изменит уровень сложности, изменив такие параметры, как качество памяти AI.

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

Ответ 7

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

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

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

Ответ 8

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

Ключевым элементом является определение стратегий, которые вам интересны, и моделирование этих стратегий на логическом языке.

Если вы думаете в игре с угадыванием, например, у вас могут быть две стратегии:

strategy-1 guess the card you think is the most likely; or 

strategy-2 among the cards that are the most likely, guess the card that 

my opponent believes to be the most likely. 

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

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

A = c | -A | A v A | A -> A | P(A) >= r | P(A) >= P(A) | \forall c . A(c)

для r рациональное между 0 и 1. Прочитайте P (c) >= r, чтобы быть "игрок считает, что противник имеет карту c с вероятностью не менее r. '

Например, стратегия-1 выглядит как

Guess card C only if holds that 
\forall C'. P(C) >= P(C') . 

strategy-2 выглядит как

Guess card C only if holds that 
[\forall C'. P(C) >= P(C')] ^ [-\forall C''. P'(C'') > P'(C)]

(P '(c) - вероятность, назначенная моим противником).

Если ваша стратегия задана формулой STRATEGY, ваша функция для действия будет просто запрашивать возможную карту, которая удовлетворяет стратегии:

act gameState = take 1 [c : c |= STRATEGY]

Этот язык, который я привел в качестве примера, недостаточно выразителен для выражения проблем сокрытия вашего типа (стратегии, чрезвычайно важные в таких играх, как Poker или HearthStone, например). Для стратегий с этим потребуется некоторое расширение.

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

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

Для угадывающей игры я предлагаю документ под названием "Логика ямы" из Ditmarsch. (http://link.springer.com/article/10.1007/s11229-005-4331-5) (он не реализует ИИ, просто выражайте игру под названием PIT. Я не думаю, что стоит заплатить за нее. Если вы можете получить бесплатно, это стоит того. Возможно, вы можете искать его диссертацию, а не бесплатно.)

Я хотел бы написать статью о HearthStone, но я никогда не нахожу время: (