2012-09-01 2 views
0

현재 저는 카드 게임에 대한 AI 작업을하고 있습니다. Wizard. 마법사는 각 플레이어가 실제 게임이 시작되기 전에 그가 얼마나 많은 트릭을 쓸지 모른다고 말하는 속임수 게임입니다.카드 게임을위한 AI 디자인

일부 서류와 책의 일부인 Artificial Intelligence: A Modern Approach을 읽은 후, 먼저 열린 카드로 게임에 대한 알고리즘을 설계하여 각 플레이어가 완전한 정보를 갖도록하기로 결정했습니다. 그래서 UCB 선택 정책을 사용하여 Monte Carlo Tree Search 알고리즘을 시작하고 구현했습니다. 나는 자바로 모든 것을 구현했으며, 꽤 잘 돌아가고있는 것처럼 보이지만, 나의 봇은 아직 최적의 상태로 플레이하지 못하고있다. 특히 당신이 얻는 트릭을 예측하는 것은 어려운 작업 인 것 같습니다. 그 때문에 나는 연주와 동일한 MCTS를 사용했습니다.

기본적으로 내 알고리즘은 게임의 현재 상태 (예 : 2 명이 입찰 한 상태)를 확장하여 하나의 새 노드 (예 : 3 명이 입찰 한 상태)를 만든 다음 게임이 끝날 때까지 무작위로 재생합니다. 그런 다음 점수를 평가하고 노드를 통해 백업합니다.

다음 단계는 알고리즘을 개선하고 트리 검색에 일부 경험적 연구를 추가하는 것이므로 손실이 발생할 가능성이 큰 분기가 처음부터 무시 될 것이라고 생각합니다.

내 질문은 : 이것은 좋은 접근이라고 생각합니까? 유망한 다른 접근법이나 다른 tipps가 있습니까?

+0

나는이 게임을 "네 이웃을 조종한다"고 알고있다. 나는 당신이 얼마나 많은 카드가 당신보다 높은지를 고려함으로써 당신이 상당히 좋은 플레이를 할 수 있다고 믿습니다. 1 장의 카드 게임을 가정하십시오 : 트럼프의 에이스가 있다면, 트릭 하나에 대한 가능성은 100 %입니다. 트럼프가 아닌 에이스가 있다면, 25 %로 간주 할 수 있습니다. 당신이 트리 검색을 사용하기 시작할지도 모른다고 알고 있기 때문에 특정 카드를 사용하기를 기대할 때 카드가 남아있을 확률을 알면 더 정확하게 백분율을 알아낼 수 있습니다. – erisco

+0

컴퓨터 과학 StackExchange 사이트에서 실제 코딩/구현 대신 알고리즘에 대한 피드백 만 보내고 싶다면 행운을 빈다. –

+0

나는 카드 놀이 게임을 위해 MCTS를 조사하기를 바랬다. 좋은 결과를 얻지 못하고 있다는 것이 흥미 롭습니다. 카드 놀이에 약간 경험있는 발견을 추가하는 당신의 아이디어는 MCTS의 정신으로 유지에 아직도있는 것처럼 보인 사람은 그것이 도울 것이라고 생각할 것입니다. –

답변

3

나는 게임을 알지 못하지만 일반적인 조언을 드릴 수 있습니다.

  • 검색 공간이 당신은 이러한 조건 MCTS와 강한 발견

을 구축하는 방법을 모르는

  • (즉, 이동 보드 게임) 매우 큰 경우 몬테카를로 방법은 좋은 해결책이다 네가 할 수있는 최선이야.

    그러나 "최소 - 최대/알파 - 베타 정리"알고리즘 (또는 이와 유사한 알고리즘)을 사용하여 직감적으로 진행해야하는 것보다 강력한 경험적 발견 기능을 구축 할 수 있다면 입니다. 일반적으로 이러한 알고리즘을 사용하면 강력한 AI를 얻을 수 있습니다.

    왜냐하면 GO에서는 MCTS를 사용하지만 체스에서는 Min-Max를 사용하기 때문입니다.

    그러나 알고리즘은 AI의 10 %에 불과합니다. game-AI 프로그래밍에서 가장 어렵고 (그리고 아름다운) 부분은 게임 공간을 잘라내어 가장 강력한 휴리스틱을 만들기 위해 게임 메카닉을 활용하는 것입니다. :)

    예를 들어 잘 알려진 카드 게임에서 AI를 이해하기 시작할 수 있습니다. (http://webdocs.cs.ualberta.ca/~games/poker/). 그런 다음이 기술을 게임으로 확장 할 수 있습니다.

  • +0

    하지만 어떻게 불완전한 정보를 처리하겠습니까? 가능한 거래의 공간이 크고 더 이상 확신 할 수 없습니다. 먼저 완벽한 정보로 문제에 접근하여 좋은 결과를 얻고 Monte Carlo Sampling을 추가하면됩니다. 내 첫 계획은 몬테 카를로 샘플링을 사용하여 가능한 거래를 생성하고 MCTS를 사용하여 각 거래를 해결하는 것이 었습니다. 가장 좋은 이동은 모든 샘플을 평균하여 계산할 수 있습니다. 그러나 나는 생각하지 않는다. 이것은 합리적인 시간에 좋은 결과를 낳을 것이다. – ollinator

    +0

    글쎄, 아마 모든 가능한 거래를 확인할 필요는 없을 것입니다. 예를 들어 게임 이론 및 기타 통계적 접근 방식 덕분에 "모든 가능한 거래"를 확인하는 것을 피할 수 있습니다. 이러한 최적화는 게임에 따라 다릅니다. –

    관련 문제