Найкращі прийоми AI карткової гри


27

Я намагаюся розробити AI для карткової гри, і я трохи застряг у техніці / алгоритмі, який я повинен використовувати. Ось кілька припущень щодо гри:

  • Після розподілу карт гравцям, випадковості немає. Я маю на увазі, що кожен гравець може вибрати, в які карти він грає, але не відбувається випадкових процесів, як при розподілі карт на початку гри.
  • Існує обмеження щодо карт, які можна грати, коли карта вже грала.
  • Гравець, який виграє трюк, грає потім перший. Наприклад, Гравець 1 грає в карту, Гравець 2 грає в карту і виграє. Потім Гравець 2 грає в карту, а потім Гравець 1 грає.

Я знаю багато підказок / правил (наприклад, якщо я знаю, що у гравця є карти A, B, C, то я повинен грати D), який допомагає мені виграти в грі. Тому я спершу хотів використати байєсівську мережу для опису цих правил. Проблема полягає в тому, що я не знаю жодної ймовірності призначити, але я міг обчислити евристику, використовуючи історію зіграних ігор (проти людини). По-друге, дуже ймовірно, що я не знаю всіх правил і є деякі неявні правила, які потрібні AI, щоб знайти оптимальну гру.

Я не впевнений, чи це був би хороший спосіб розробити AI для такої карткової гри?

Мені також цікаво, чи є інші методи, які найкраще підходять до проблеми. Наприклад, я подивився на minimax (можливо, з алгоритмом обрізки), але чи вдалий варіант для цієї проблеми? Я зовсім не впевнений, оскільки найважливіші гри - це на початку гри, коли найвищі невідомі параметри (більшість карт ще не розігруються).


1
Чудове запитання! Не маю повної відповіді. Я просто хотів би додати 2c: якщо ви знаєте всі можливі стани, в яких може бути ваша гра, то Minimax теоретично був би хорошим способом перейти до цього дерева-станів гри. Може потрапити в проблеми з продуктивністю, якщо ця гра констатує дерево занадто велике ...
Shivan Dragon

1
Яка мета гри? Хто виграє? Чи можливо гравцеві в будь-який момент наблизити свої шанси на виграш гру?
ПРИЙДІТЬ

Я не можу детально пояснити гру. Щоб виграти один, ви повинні отримати найбільшу кількість очок (більше, ніж у іншого гравця). На початку важко / неможливо сказати, чи ми збираємось перемогти. Зрештою, ми можемо бути впевнені, що виграти, якщо одному вже вистачає очка (інший гравець вже не може набрати достатньо очок, щоб виграти).
LaurentG

1
Чи гра HeartStone? :)
Lescai Ionel

1
Схоже, я переживаю дуже схожу з вами ситуацію, також карткова гра, також місцева (хоча не Швейцарія), і я також намагаюся зрозуміти, з чого я починаю. Одне, що мені здалося цікавим, - це еволютор, де ви присвоюєте ДНК віртуальним гравцям, а потім підключаєте їх один до одного. Ти вбиваєш невдах і розводиш переможців. Результатом можуть стати цілком пристойні боти AI. Я не зрозумів, як адаптувати цей tropiceuro.com/puerto-rico-evolver для моєї карткової гри, але думаю, що це можливо.
Андрій Савіних

Відповіді:


11

Ваш приклад звучить схоже на Bridge . Топові мостові системи використовують методи Монте-Карло для вибору ходів. На високому рівні:

  • Визначте ймовірність того, що кожна картка знаходиться в даній руці. Ви з упевненістю знаєте, які карти у вас в руці і які карти були розіграні. Визначте ймовірність усіх інших карт на основі розіграних карт і, можливо, ставки гравця, якщо є торги. Для початку ви могли просто використовувати наївну і рівну ймовірність того, що карта знаходиться в руці якогось гравця.
  • Тепер пробіжіть стільки «віртуальних» ігор, скільки зможете. Імітуйте грати в карту зі своєї руки, а потім визначте відповіді опонентів, використовуючи правила гри та свої ймовірності. Для кожної віртуальної гри використовуйте свої ймовірності, щоб призначити картки гравцеві, а потім швидко імітувати гру. Припустимо, кожен гравець буде грати якнайкраще. Ви знаєте всі карти у віртуальній грі, щоб ви могли змусити кожного гравця чудово грати.
  • Коли у вас є ґрунтовна вибірка (або у вас не вистачає часу), виберіть законний крок, який дав найкращий результат найчастіше.

Як тільки у вас щось працює, ви можете додавати всілякі збагачені стратегії. Наприклад, варіюйте свої ймовірності на основі історичної гри гравця, змінюйте ймовірності залежно від стилю гравця (пасивний, обережний, агресивний) або навіть враховуйте ефекти конкретних гравців, які грають разом.


Редагувати за коментарем LaurentG:

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

Вибір карт дозрів для навчання. Якщо ви відстежуєте ігри в різних іграх, ви можете дізнатися, як даний гравець або гравці взагалі, як правило, грають на основі карт у їхній руці та карт, які були зіграні. Ви навіть можете пофантазувати і сформулювати їхні припущення щодо прихованих від них карт.

Існують також можливості навчання для розповсюдження карт. Минулі ставки гравця та вибір карт під час руху можуть виявити "розповідь" про те, що ховається в їхній руці. Ви можете використовувати історичні дані для коригування ймовірностей під час створення кожної віртуальної гри.


Дякую за цікаву відповідь. Ви маєте рацію, гра поділяє кілька правил з Bridge. Як я розумію, ваш AI не буде кращим, ніж те, що ви кодували. Чи є спосіб скористатися методом Монте-Карло і зробити так, щоб ШІ вчився? Чи можна було б призначити ймовірності для кожної картки, використовуючи минулі події (усіх попередніх ігор)?
LaurentG

Ви точно можете зробити так, щоб AI вчився. Хитрість полягає в тому, щоб відокремити ймовірність того, що карта перебуває в певній руці, від ймовірності того, що гравець буде грати дану юридичну карту, як тільки вона знаходиться в їх руці. Я детальніше поясню вище.
Корбін березня

6

Випадок недавнього особистого досвіду:

Я сам працював над картковою грою (Біска, португальська гра для двох гравців), і я отримував хороші результати, використовуючи методи Монте-Карло, спеціально використовуючи останній алгоритм пошуку набору даних Монте-Карло (ISMCTS, описаний у приклад вихідного коду в Python за адресою http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm ).

Він грає досить добре, з випадковим неправильним рухом, просто зі знанням правил гри. Наразі я намагаюсь зробити це, щоб мати змогу вдосконалити його, оскільки згідно з інформацією, яку я читав про нього (і його "батьківський" MCTS), можна покращити його гру з евристикою ( http: // www .orangehelicopter.com / ed / paper / aiide13.pdf ) та висновок карти противника.


1
цю публікацію досить важко читати (стіна тексту). Ви б не хотіли відредагувати його в кращій формі?
гнат

дякую за відповідь від когось із реальним досвідом проблеми. чудові посилання!
любен

3

Я думаю, це залежить від правил гри.

Ось що я розумію з вашого запитання:

  • Гра проводиться по турах, при цьому кожен гравець грає по одній картці за раунд
  • Гравець, який піде першим, може зіграти будь-яку карту, яку він захоче
  • Гравець, який виходить другим, може грати лише в певні карти, залежно від того, що було зіграно першим
  • Гравець, який виграє раунд, проходить перший наступний раунд
  • Усі картки розповсюджуються до першого раунду

Припущення:

  • З повним знанням карт інших гравців, гравець, який буде першим, може вирішити для кожного з них, чи виграє карта в раунді, чи ні (перший гравець може грати у виграшну виграшну карту)
  • Якщо картки A і B будуть вигравати, коли вони будуть грати в перший раунд, граючи в цей раунд (і виграючи), то граючи в B, наступний раунд означає, що B теж виграє (карти не втрачають значення)
  • Завдяки повному знанню карт іншого гравця, другий гравець може вирішити, чи може карта виграти цей раунд, але програв, якщо зіграв перший наступний раунд (обрав найгіршу карту виграшу)

Приклад гри, яка відповідає цим правилам:

Перший гравець грає в карту. Другий гравець повинен грати в карту того ж набору або програти. Якщо апартаменти збігаються, виграє найвища карта.

Тепер ця гра визначається удачею жеребкування та можливістю запам’ятовувати, які картки були розіграні, щоб знати руку ваших опонентів.
У цій ситуації я б змусив AI лише частково пам’ятати, за які карти грали, тобто випадковим чином вилучати зі списку запам'ятовуваних деякий відсоток відіграних карт (менша кількість = більший рівень складності AI), але не такі важливі, як Aces або Kings. Наприклад, наприклад, AI дізнається, що це безпечно грати у Queen of Hearts, оскільки він пам’ятатиме, що противник не має туза або короля, але повинен буде обчислити ймовірність, якщо він захоче потім грати у 10, тому що він може не пам’ятати, чи Джек все ще грає.
Це імітує проміжок уваги людини.

TL; DR
Обмежте, наскільки знає AI, щоб його рішення не були ідеальними, достатньо хорошими.


Дякую за вашу відповідь. Але, як сказано в запитанні, після роздачі карт немає шансів / випадковості. І гравець не знає карт інших гравців. Він повинен робити припущення, використовуючи вже розіграні карти та деякі "правила".
LaurentG

2
Подобається ідея випадкового вилучення запам’ятованих карток. Це дає підказку на розвиток таких рівнів, як легкий, середній та жорсткий.
superM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.