카드 게임의 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
카드 게임, 지역 게임 (스위스가 아님)과 당신과 매우 비슷한 상황에 처해 있고 내가 어디서 시작했는지 이해하려고 노력하고 있습니다. 제가 흥미로 웠던 점은 가상 플레이어에 DNA를 할당 한 다음 서로 경쟁하는 진화 기입니다. 당신은 느슨한 것을 죽이고 승자를 번식시킵니다. 결과는 꽤 괜찮은 AI 봇일 수 있습니다. 이 tropiceuro.com/puerto-rico-evolver 가 내 카드 게임에 어떻게 적용되는지 알지 못했지만 이것이 가능하다고 생각합니다.
Andrew Savinykh

답변:


11

예제는 Bridge 와 비슷합니다 . 최고의 브리지 연주 시스템은 Monte Carlo 방법 을 사용하여 움직임을 선택합니다. 높은 수준에서 :

  • 주어진 손에있는 각 카드의 확률을 결정하십시오. 당신은 당신의 손에있는 카드와 어떤 카드가 사용되었는지 확실하게 알고 있습니다. 입찰에 참여한 경우, 카드를 사용하고 플레이어의 입찰에 따라 다른 모든 카드의 확률을 결정하십시오. 시작하기 위해, 당신은 단지 어떤 플레이어의 손에 카드가 있다는 순진하고 동등한 확률을 사용할 수 있습니다.
  • 이제 가능한 많은 "가상"게임을 실행하십시오. 손에서 카드를 재생하는 것을 시뮬레이션 한 다음 게임 규칙과 확률을 사용하여 상대의 응답을 결정하십시오. 각 가상 게임마다 확률을 사용하여 플레이어에게 카드를 할당 한 다음 게임을 빠르게 시뮬레이션합니다. 각 플레이어가 자신의 능력을 최대한 발휘한다고 가정합니다. 가상 게임의 모든 카드를 알고 있으므로 각 플레이어가 완벽하게 게임을 즐길 수 있습니다.
  • 샘플링이 확실하거나 시간이 부족한 경우 가장 자주 결과를 얻을 수있는 법적 조치를 선택하십시오.

일단 무언가가 작동하면 모든 종류의 강화 된 전략을 추가 할 수 있습니다. 예를 들어, 플레이어의 역사적인 플레이를 기반으로 확률을 변경하거나 플레이어의 스타일 (수동적, 신중, 공격적)을 기반으로 확률을 변경하거나 특정 플레이어가 함께 연주하는 효과를 고려하십시오.


LaurentG의 의견에 따라 편집 :

궁극적으로 모든 플레이어에게 완벽한 플레이라는 아이디어를 폐기하고보다 현실적인 것을 대체 할 수 있습니다. 개념적으로, 누군가의 손에있는 카드의 확률 (카드 분배)은 플레이어가 손에 주어진 법적 카드를 사용할 확률 (카드 선택)과 분리됩니다.

학습을위한 카드 선택은 잘되었습니다. 게임 간 플레이를 추적하면 주어진 플레이어 또는 플레이어가 자신의 카드와 플레이 한 카드를 기반으로 플레이하는 경향을 알 수 있습니다. 심지어 카드에 숨겨진 카드에 대한 가정을 상상하고 모델링 할 수도 있습니다.

카드 배포를위한 학습 기회도 있습니다. 핸드 중 플레이어의 과거 입찰 및 카드 선택은 그들의 핸드에 숨겨진 것에 대한 "말하기"를 드러 낼 수 있습니다. 각 가상 게임을 만들 때 기록 데이터를 사용하여 확률을 조정할 수 있습니다.


흥미로운 답변 감사합니다. 맞습니다. 게임은 Bridge와 몇 가지 규칙을 공유합니다. 내가 이해하는 것처럼 AI는 코딩 한 것보다 낫지 않습니다. Monte Carlo 방법을 사용하고 AI를 학습시키는 방법이 있습니까? 과거 이벤트 (모든 이전 게임)를 사용하여 각 카드의 확률을 할당 할 수 있습니까?
LaurentG

AI를 확실히 배울 수 있습니다. 요령은 특정 손에있는 카드의 확률을 플레이어가 주어진 법적 카드를 손에 넣은 확률과 분리하는 것입니다. 위에서 자세히 설명하겠습니다.
Corbin 3 월

6

최근 개인적인 경험의 경우 :

저는 카드 게임 (2 인용 포르투갈 게임 인 비 스카 (Bisca))을 직접 작업하고 있으며 특히 최근 정보 세트 Monte Carlo Tree Search 알고리즘 (ISMCTS)을 사용하여 Monte Carlo 방법을 사용하여 좋은 결과를 얻었습니다. http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htm의 Python 소스 코드 예제 ).

게임 규칙에 대한 지식만으로도 가끔 틀린 움직임으로 합리적으로 잘 작동합니다. 나는 그것에 대해 읽은 정보 (및 "부모"MCTS)에 따라 휴리스틱 ( http : // www)으로 게임 플레이를 향상시킬 수있는 것처럼 현재 그것을 향상시키고 향상시키기 위해 노력하고 있습니다 . .orangehelicopter.com / ed / papers / aiide13.pdf ) 및 상대 카드 유추


1
이 게시물은 읽기 어렵습니다 (텍스트의 벽). 더 나은 형태로 편집 하시겠습니까 ?
gnat

문제에 대한 실제 경험이있는 사람의 답변에 감사드립니다. 좋은 링크!
luben

3

나는 그것이 게임 규칙에 달려 있다고 생각합니다.

귀하의 질문에서 내가 이해하는 내용은 다음과 같습니다.

  • 게임은 라운드마다 진행되며, 각 플레이어는 라운드 당 하나의 카드를 재생합니다.
  • 먼저가는 플레이어는 원하는 카드를 사용할 수 있습니다
  • 두 번째로 나가는 플레이어는 먼저 한 게임에 따라 특정 카드 만 재생할 수 있습니다
  • 라운드에서 승리 한 플레이어는 다음 라운드에서 먼저갑니다
  • 모든 카드는 첫 라운드 전에 배포됩니다

가정 :

  • 다른 플레이어의 카드에 대한 모든 지식을 가지고, 플레이어는 먼저 자신의 카드가 라운드에서 승리할지 여부를 결정할 수 있습니다 (첫 번째 플레이어는 확실한 승리 카드를 사용할 수 있습니다)
  • 이번 라운드에서 A와 B가 모두 이길 때, A가 이번 라운드에서 (그리고 이기고) 다음 B를 플레이하면 B도 이기게됩니다 (카드는 가치를 잃지 않습니다).
  • 다른 플레이어의 카드를 완전히 알고 있으면 두 번째로가는 플레이어는이 라운드에서 카드가 이길 수 있는지 결정할 수 있지만, 다음 라운드에서 먼저 플레이하면 잃을 것입니다 (최악의 승리 카드 선택)

이 규칙을 따르는 게임 예 :

첫 번째 플레이어는 카드를 재생합니다. 두 번째 플레이어는 같은 제품군의 카드를 사용하거나 잃어야합니다. 스위트가 일치하면 가장 높은 카드가 승리합니다.

이제이 게임은 추첨의 행운과 상대방의 손을 알기 위해 어떤 카드가 사용되었는지 기억하여 결정됩니다.
이 상황에서는 AI가 어떤 카드를 사용했는지를 부분적으로 만 기억하도록하겠습니다. 즉, 기억 된 목록에서 카드의 일부 비율 (작은 숫자 = 높은 난이도 AI)을 임의로 제거하지만 에이스 나 킹스와 같은 중요한 카드는 아닙니다. 예를 들어, AI는 상대방에게 에이스 나 킹이 없다는 것을 기억할 것이지만 10을 플레이하려면 확률을 계산해야하기 때문에 하트 오브 퀸을 플레이하는 것이 안전하다는 것을 알 수 있습니다. 잭이 아직 플레이 중인지 기억하지 못할 수 있기 때문입니다.
이것은 인간의 관심 범위를 모방합니다.

TL; DR
AI가 알고있는 정도를 제한하여 의사 결정이 완벽하지 않고 충분합니다.


답변 주셔서 감사합니다. 그러나 질문에서 말했듯이 카드가 배포 된 후에는 운이없고 무작위성이 없습니다. 그리고 플레이어는 다른 플레이어의 카드를 모른다. 그는 이미 플레이 한 카드와 일부 "규칙"을 사용하여 가정해야합니다.
LaurentG

2
암기 된 카드를 무작위로 제거한다는 생각과 같습니다. 이것은 쉬운, 중간 및 어려운 수준의 개발에 대한 힌트를 제공합니다.
superM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.