체커와 같은 보드 게임에 가장 적합한 알고리즘을 어떻게 선택합니까?


15

체커와 같은 보드 게임에 가장 적합한 알고리즘을 어떻게 선택합니까?

지금까지 minimax, alpha-beta pruning 및 Monte Carlo tree search (MCTS)의 세 가지 알고리즘 만 고려했습니다. 분명히 알파-베타 가지 치기와 MCTS는 기본 미니 맥스 알고리즘의 확장입니다.

답변:


18

tl; dr :

  • 이 알고리즘 중 어느 것도 현대 작업에 실용적이지는 않지만 교육적으로 시작하기에 좋은 곳입니다.

  • 베어 미니 맥스 검색보다 항상 알파-베타 프 루닝을 사용하는 것이 좋습니다.

  • 유용한 휴리스틱을 만들 수있는 경우 휴리스틱 가이드 검색을 사용하는 것이 좋습니다. 유용한 휴리스틱을 만들려면 일반적으로 많은 도메인 지식이 필요합니다.

  • 좋은 휴리스틱이없고 계산 리소스가 제한되어 있고 실수가 실제 결과보다 크지 않은 경우에는 Monte Carlo Tree 검색을 사용하는 것이 좋습니다.

자세한 내용은:

minimax 검색에서 우리는 매우 영리하려고하지 않습니다. 우리는 단지 표준 동적 프로그래밍 접근법을 사용합니다. 게임의 끝이 가까워지면 차이 이동의 가치를 쉽게 알 수 있습니다 (게임이 다음 이동으로 끝날 것이기 때문에 훨씬 앞서 볼 필요는 없습니다). 마찬가지로, 게임의 마지막 이동에서 상대방이 무엇을할지 알면 마지막 두 번째 이동에서 어떻게해야하는지 쉽게 알 수 있습니다. 효과적으로 우리는 두 번째 마지막 움직임을 짧은 게임의 마지막 움직임으로 취급 할 수 있습니다. 그런 다음이 과정을 반복 할 수 있습니다. 이 접근법을 사용하는 것은 표준 확장형 게임에서 최고의 전략을 밝히는 것이 확실하지만, 가능한 모든 움직임을 고려해야합니다. 이는 가장 단순한 게임 이외의 모든 게임에는 불가능합니다.

알파 베타 프 루닝은 Minimax 검색을 엄격히 개선합니다. 일부 동작은 다른 동작보다 분명히 나쁘다는 사실을 이용합니다. 예를 들어, 체스에서, 나는 당신이 그 입장에서 다른 일을 할 수 있다고해도 나를 당신을 장군으로 데려 갈 기회 를 줄 어떤 움직임도 고려할 필요가 없습니다 . 일단 이사가 패배로 이어질 수 있다는 것을 알게되면, 그 시점에서 다른 일이 일어날 지 생각하지 않을 것입니다. 나는 다른 것들을 보러 갈 것이다. 이 알고리즘은 정확한 결과를 도출 할 수있을뿐만 아니라 더 빠르지 만 여전히 대부분의 움직임을 고려해야합니다.

이러한 종류의 게임을 정확하게 해결하는 데 드는 극도의 계산 비용을 해결할 수있는 두 가지 일반적인 방법이 있습니다.

  1. 휴리스틱 사용 (A * 검색은 교육학 목적으로 일반적인 알고리즘이지만 정지 검색은 2 인 게임에서 비슷한 아이디어입니다). 이것은 단지 게임 상태의 가치를 추정 하는 함수입니다 . 게임에서 모든 움직임을 고려하는 대신, 유한 한 거리로의 움직임을 고려한 다음 휴리스틱의 값을 사용하여 도달 한 상태의 값을 판단 할 수 있습니다. 휴리스틱이 일관된 경우 (본질적으로 항상 상태의 품질을 과대 평가 하는 경우 ) 올바른 답을 얻을 수 있지만 실제로는 속도가 크게 향상됩니다.

  2. 롤아웃을 사용하십시오 (예 : Monte Carlo Tree Search). 기본적으로 모든 움직임을 고려하는 대신 무작위로 행동하는 플레이어간에 수천 개의 시뮬레이션 게임을 실행하십시오 (가능한 모든 움직임을 고려하는 것보다 빠릅니다). 시작하는 게임의 평균 승률과 동일한 상태에 값을 지정하십시오. 정답을 얻지 못할 수도 있지만 일부 게임에서는 안정적으로 작동합니다. 종종 자체적으로 사용되는 것이 아니라보다 정확한 기술의 확장으로 사용됩니다.


A *는 다른 알고리즘과 같이 2 인용 게임의 맥락에 맞지 않는 것 같습니다. MCTS 주 대신 일반적인 구현은 동적으로 트리 검색 트리를 점차적으로 확장하여 더 유망한 부분 (선택 전략에 의해 많은 롤아웃이 필요한 부분)에서 더 많이 자라며, 유망하지 않은 부분에서는 덜 자랍니다.
Dennis Soemers

1
@JohnDoucette 왜 "이 알고리즘들 중 어느 것도 현대 작업에 실용적이지 않지만 교육적으로 시작할 수있는 좋은 장소입니다." MCTS의 경우, 상태와 행동이 주어진 상태에서 다음 상태로의 전환이 잘 정의되어있을 때 싱글 플레이어 검색에도 현대 작업에 매우 적합한 것으로 보입니다. 동의하겠습니까?
Miguel Saraiva

1
@MiguelSaraiva MCTS 자체는 현대적인 응용 프로그램에 일반적으로 사용되는 것이 아닙니다. 학습 된 휴리스틱을 제공하기 위해 DNN과 같은 것을 결합하면 꽤 좋습니다.
John Doucette

1
@JohnDoucette "MCTS는 일반적으로 최신 응용 프로그램에 사용되는 것이 아닙니다." 우선, 당신이 말하는 "현대성"은 2016 년에 큰 돌파구 (MCTS + DNN)를 가졌으며, 이전의 모든 것이 더 이상 사용되지 않는다는 것을 암시하는 것처럼 보입니다 (분명히 거짓). 실제로 MCTS가 일반적으로 반대의 이유로 사용되지 않는다고 말하는 것이 더 타당 할 수도 있습니다. 너무 진보 된 것입니다. 실제로 업계에서는 쓸모없고 MCTS로 업그레이드 될 수있는 많은 응용 프로그램이 있습니다. 이러한 MCTS + DNN의 대부분은 사전 교육이 거의 불가능하기 때문에 먼 꿈입니다.
Johan

1
@Johan 그것은 산업 응용 프로그램에 대해 나에게 잘 들리지만 질문은 "체커와 같은 보드 게임"에 대해 묻는 것입니다. 이런 종류의 장난감 문제에 대해서는 MCTS가 올바른 현대 접근 방식이 아니라고 생각합니다. 기존의 배포 된 시스템에서 크게 개선 될 수있는 많은 실제 문제가 있습니다.
John Doucette

7

NB이 세 가지 알고리즘 만 선택한 이유는 알고리즘을 이해하는 데 시간이 걸리기 때문입니다. 약간의 연구를 통해 이러한 알고리즘이 기본적으로 minimax 알고리즘으로 짜여져 있음을 발견했습니다. 제가 이해할 수 있다면 다른 두 곳은 제자리에있게됩니다.

이러한 맥락에서 Minimax로 시작하는 것이 좋습니다 . 세 가지 알고리즘 중 Minimax가 가장 이해하기 쉽습니다.

다른 답변에서 언급했듯이 Alpha-Beta 는 Minimax보다 엄격하게 개선되었습니다. Minimax는 기본적으로 Alpha-Beta 구현의 일부이며, Alpha-Beta를 잘 이해하려면 Minimax를 잘 이해해야합니다. Minimax를 이해하고 구현 한 후 시간이 남은 경우 나중에 Alpha-Beta로 이동하여 Minimax 위에 구축하는 것이 좋습니다. Minimax를 아직 이해하지 못하면 Alpha-Beta로 시작하는 것이 실제로 의미가 없습니다.

몬테카를로 트리 검색 은 아마도 좀 더 발전하고 더 깊이 이해하기에는 더 복잡 할 것입니다. 지난 10여 년 동안 MCTS는 실제로 다른 두 개보다 훨씬 인기가 높아 지므로 MCTS를 이해하는 것이 더 "유용"할 수 있습니다.

Minimax와 MCTS 사이의 연결은 Minimax와 Alpha-Beta 사이의 연결보다 직접 / 명백하지 않지만, 최소한 개념적 수준에서는 연결이 있습니다. MCTS에 뛰어 들기 전에 Minimax를 먼저 잘 이해하는 것이 여전히 유익하다고 주장합니다 . 특히, Minimax와 그 결점 / 약점을 이해하면 유용한 컨텍스트를 제공 할 수 있고 MCTS가 왜 "필요한"/ 인기가되었는지 이해할 수 있습니다.


결론적으로, 내 의견으로는 :

  • Alpha-Beta는 Minimax보다 엄격하지만 Minimax와 밀접한 관련이 있습니다. Minimax로 시작하고 시간이 허락하면 나중에 Alpha-Beta로 가십시오.
  • MCTS는 다른 강점 / 약점을 가지고 있으며, "현대적인"문제에서 알파 베타보다 더 낫습니다 (항상 그런 것은 아님).

나도 사용할 수 있다고 제안하는 다른 알고리즘이 있습니까? 그것은 알파 베타 가지 치기 수준과 같습니다
Joey

@Joey 흠 아니에요. Minimax는 매우 자연스러운 출발점입니다. 시작하는 것이 좋습니다. 기본적으로 체스 / 체커 / 틱택 토 / 무엇과 같은 게임을 위해 개발 된 최초의 알고리즘이었습니다. 그 후에 수백 가지가 아닌 수천 가지의 개선 사항이 그 위에 개발되었으며, 대부분은 chessprogramming.wikispaces.com/Search 에서 찾을 수 있습니다 . 알파 베타는 Minimax를 살펴볼 수있는 가장 자연스러운 기능입니다.
Dennis Soemers

@Joey Monte-Carlo Tree Search는 약간 다르지만 (기본적으로 Minimax를 반드시 가질 필요는 없음) 흥미롭고 재미 있으며 인기가 있으며 "현대"AI와 관련성이 높습니다. 여전히 기초가 중요합니다. 기술적으로 가능하더라도 Minimax + Alpha-Beta를 아직 이해하지 못하면 MCTS를 즉시 시작하지 않는 것이 좋습니다.
Dennis Soemers

그 사이트에 감사드립니다. 내가 지금 읽을 수있는 풍부한 지식입니다. 새로운 것을 배우는 데있어 가장 어려운 것은 이해하는 데 도움이되는 올바른 자료를 찾는 것입니다. 사이트에 다시 한번 감사드립니다
Joey

@Joey 체스 프로그래밍이 배우기 가장 쉬운 사이트인지 100 % 확신하지 못합니다 (그리고 7 월 말에 사이트가 사라질 수도 있다는 무서운 알림이 나타납니다). 내가 정확하게 기억한다면, 많은 설명은 짧고 / 당신이 현장의 초보자라면 이해하기 쉽지 않을 것입니다. 적어도 모든 종류의 알고리즘 / 개선 사항에 대한 포괄적이고 훌륭한 이름 모음이 될 것입니다. 다른 곳에서 더 자세한 정보를 얻으려면 원본 소스를 찾거나 모든 이름을 Google에 검색하십시오.
Dennis Soemers

1

Minimax와 Alpha-Beta 가지 치기 중에서 선택해야합니다. Alpha-beta를 선택해야합니다. 탐색 트리의 상당 부분을 제거 할 수 있기 때문에보다 효율적이고 빠릅니다. 그러나 최대 또는 최소 관점에 따라 최고에서 최악으로 동작을 정렬해야하므로 탐색이 필요한 경우 알고리즘이 신속하게 인식 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.