체스 같은 AI가 턴제 전략 게임에 실제로 적용되지 않습니까?


13

분명히, 완전한 이동 트리에 최소-최대 알고리즘을 적용하려고 시도하는 것은 작은 게임에서만 작동합니다 (나는 "소형"으로 모든 체스 애호가에게 사과합니다. "단순"을 의미하지는 않습니다). 보드가 종종 100 타일보다 넓고 측면의 모든 조각이 동시에 움직일 수있는 일반적인 턴 기반 전략 게임의 경우 최소-최대 알고리즘이 적용되지 않습니다.

각 깊이에서 N 보드 구성으로 제한되는 부분 최소-최대 알고리즘이 충분하지 않은지 궁금합니다. 유전자 알고리즘을 사용하면 평가 기능에 적합한 여러 보드 구성을 찾을 수 있습니다. 바라건대, 이러한 구성은 장기적인 목표에 적합 할 수도 있습니다.

이것이 이전에 생각되지 않았고 시도되지 않았다면 놀랐습니다. 그렇습니까? 어떻게 작동합니까?


1
Collaborative Diffusion을 실험 해 볼 수 있습니다 . 그것은 그리드로 가치를 확산시키고, 적들은 그리드를 언덕 등반합니다. 최소한 길 찾기에 효과적입니다. 더 많은 값을 산포 (별도?)하고 더 정교한 언덕 등반 (여러 값을 기준으로 다음에 갈 곳 선택) ...
user712092

무엇에 대한 알파 - 베타 Prunning ? 최소-최대의 더 나은 버전입니다.
user712092

Alpha-Beta Prunning은 일종의 min-max로 간주됩니다.
Joh

그렇습니다. 그러나 더 빨라야합니다. 그것은 당신을 도움이된다면 ... 몰라
user712092

나는 그 아이디어를 포기했습니다. 다른 이벤트에 반응하는 방법에 대한 특정 지침 대신 제약 조건을 사용하는 "느슨하게"스크립트 된 AI에 기울고 있습니다. GA 또는 다른 최적화 알고리즘이 스마트하게 동작 할 수 있기를 바랍니다.
Joh

답변:


5

그것은 게임의 역학에 달려 있습니다. 게임 트리 최소-최대는 전체적으로 적용되지 않을 수 있지만 일부 지역에서는 적용될 수 있습니다. 지도상의 일부 위치는 전략적으로 중요합니다. Min-max는 해당 위치 중 제어 할 전략적 수준에서 적용될 수 있습니다. 전술적 차원에서 각 전략적 위치 주변의 x 제곱에 대해 min-max를 사용하여 유닛을 배치하고 방어하는 방법을 결정할 수 있습니다.


9

이것은 미니 맥스 알고리즘이 아니지만 Killzone AI를 담당하는 사람들은 일부 체스 AI가 사용하는 위치 평가 기능을 기반으로 한 논문을 발표했습니다.

에이전트의 현재 지식을 기반으로 보드에서 위치를 선택하기 만하면됩니다. 따라서 요원의 체력이 낮은 경우 적의 범위를 벗어나는 것이 바람직하기 때문에 적과 멀어 질수록 높은 점수를받습니다.

이 논문은 AI Game Programming Wisdom 3 에서 찾을 수 있으며 제목은 Dynamic Tactical Position Evaluation입니다.

논문 초안은 온라인에서 찾을 수 있습니다 :
http://www.cgf-ai.com/docs/straatman_remco_killzone_ai.pdf

희망이 도움이됩니다.


2

나는 그것이 충분히 좋을 것이라고 생각하지 않습니다. 특정 N 구성, 몇 개 및 어느 구성을 선택하는 것은 복잡한 일에서 사실상 불가능합니다. 게임에 무한한 자원 또는 이와 유사한 기능이있는 경우 게임 방법에 원이있을 수 있으므로 AI를 쉽게 이용할 수 있습니다.


2

알파-베타 가지 치기로 최소한 min-max를 구현하는 것이 좋습니다.

그것을 시도하고 그것을 결정하지 않으면 비실용적입니다 (즉, 끔찍한 성능). 게임 메커니즘에 대한 배경 지식이 없으면 min-max가 적용 불가능하다고 생각하는 이유를 알 수 없습니다.

보드의 크기는 잠재적으로 문제가 될 수 있지만 잘라내기를 사용하면 손실 경로를 삭제하면 같은 양의 계산으로 더 깊이 검색 할 수 있으므로 잘라낼 때 더 큰 보드 영역이 문제가되지 않습니까? 또한 보드 크기 자체가 문제가 될 수 있다고 가정하면 역학의 복잡성과 각 보드 위치에서 가능한 이동 수만큼 보드 크기가 아닙니다. 게임에 넓지 만 인구가 적은 지역이있는 경우 각 보드 상태에서 가능한 이동 수는 보드가 모든 조각에 맞게 충분히 큰 경우와 크게 다르지 않을 수 있습니다. 물론 당신이 90 % 가득 찬 거대한 보드를 가지고 있고 모든 턴마다 어디든 움직일 수 있다면, 많은 검색이 필요합니다.

또한 왜 동시 운동이 본질적으로 문제인지 잘 모르겠습니다. 하나의 신중한 보드 상태에서 다른 보드 상태로 전환하고 평가 기능이있는 한 알고리즘이 적용되어야합니다.

어쨌든 평가 기능이 필요하다고 가정하고 사용하는 검색에 관계없이 평가 기능은 대부분의 작업이 진행되는 곳입니다. 잘라 내기 기능이있는 최소-최대 알고리즘은 구현하기가 매우 간단합니다. 보드 상태 저장, 평가, 이동 생성과 같은 인프라 작업의 대부분은 1-2 시간 내에 수행 할 수 있습니다. 당신이 정착 검색.


동시 이동 관련 : 처음에는 체스와 같은 턴 기반 게임을 사용하여 설명하는 최소 최대 값을 동시 이동 사례로 바꾸는 방법을 처음 보지 못했습니다. 나는 그것을하는 방법을보기 시작했다고 생각하지만 사소한 것은 아닙니다.
Joh

내 게시물의 동시 운동 문제에 대한 해결책을 제시했습니다 ( "각 위치에서 가능한 움직임"제목). 각 반복에서 한 번만 이동하여 명시적인 "이제 내 턴을 끝냅니다"이동과 함께이를 처리 할 수 ​​있습니다. 이를 통해 중간 알파-베타 가지 치기가 동시 이동의 복잡성을 해소 할 수 있습니다.
SDwarfs

1

2011 년 Google AI 챌린지 우승자는 최소-최대 (깊이 1)를 사용했습니다. 또 다른 최고의 참가자는 무작위 샘플링을 사용했습니다 . 이 참가자는 기본적으로 내 질문에 설명 된 최소 최대 및 임의 샘플링의 혼합이 제대로 수행되지 않았다고 언급했습니다. 이것이 해결됩니다.

반면에 대형 게임에서는 최소-최대를 사용할 수 있음을 보여줍니다. 그러나 작은 개미 그룹으로 제한해야 할 것으로 보입니다. 모든 개미 세트로 작업하는 것이 너무 느 렸을 것입니다. 또 다른 흥미로운 관찰은 깊이 1이 충분하다는 것입니다. 우리 (인간)는 체스 게임에 능숙 해졌고,이 게임을위한 AI는 도전하기 위해 훨씬 더 깊은 검색 트리가 필요합니다. 더 복잡한 새로운 게임은 오랫동안 연구되고 연구되지 않았으며 멍청한 AI는 충분한 엔터테인먼트 가치를 가질 수 있습니다.


1

체스 AI의 기본 아이디어는 현재 추정 된 최고 이동에서 가능한 모든 이동의 목록을 작성한 다음 평가하고 프로세스를 반복하는 것입니다. 그들은 기회를 얻지 못할 가능성이 너무 적은 사람들을 떨어 뜨립니다.

기본 아이디어는 모든 가능한 움직임의 목록을 만들고 모든 그러한 움직임에 대해 그 과정을 반복해야합니다. 이것은 체스에서 가능합니다 (다음 움직임의 목록이 효과적으로 열거 가능합니다. 시작 체스 보드에는 20 개의 가능한 움직임이 있습니다) ) 및 주사위 놀이, 체커 및 루빅스 큐브 해결과 같은 다른 것들에 대한 시점까지.

간단한 턴제 게임 (Civilization 2)을 예로 들면, 한 차례에 각각 8 명씩 (또는 24 명) 이동할 수 있습니다. 당신이 10 명이있는 사람 (많지 않은 경우, 일반적으로 다소 흥미를 느끼기 시작할 때까지 더 많은 것을 가지고 있습니다) 현재 상태 (따라서 단일 레벨)에서 가능한 "이동"의 총 수는 이미 8 ^ 10입니다. 또는 약 40 억. 그 중 99.99 %를 잘라도, 가능한 움직임의 수가 매우 빠르게 폭발하기 때문에 여전히 나무에 깊숙이 들어갈 수 없습니다.

또한 게임이 Rubik의 큐브 문제와 약간 비슷하다는 점에 덧붙여 10 또는 12 이동 후 진행 상황 만 볼 수 있으며 표준 최소 / 최대의 장점이 메모리 용량에서 만 퍼지는 지점으로 문제가 폭발합니다. 일반적인 컴퓨터보다 더 많은 것.

다시 말해, 찾을 전략은 재현 가능하지만 나쁠 것입니다.

실제 문제, 적절한 AI를 만드는 방법에 대해서는 기본적으로 무작위로 움직이는 방향 (각 사람을 약간의 기본 정보로 이동), 평가 및 조정으로 진행합니다. 100 또는 1000 개의 서로 다른 것을 병렬로 수행하고 가장 좋은 것을 선택하십시오. 이 결과를 원래의 지능형 스티어링으로 피드백하여 다시 튜닝 할 수 있습니다. 몬테카를로 시뮬레이션과 비슷합니다.


0

턴 기반 전략 게임에 최소 / 최대를 성공적으로 적용하려면 사용 가능한 모든 체스 기술을 올바르게 적용해야합니다 ...

평가 기능

평가 기능이 나쁜 경우 체스 엔진도 강도가 매우 나쁩니다. 평가 함수의 가장 간단한 버전은 다음과 같습니다. 1 = 흰색으로 게임 승리, -1 = 흑색으로 게임 승리, 0 = 다른 모든 경우; 그러나 이렇게하면 성능이 매우 저하됩니다. 턴 기반 게임에서도 마찬가지입니다! 체스 에서처럼 min / max (알파 / 베타 가지 치기 및 기타)를 사용하려면 합리적인 평가 기능도 구현해야합니다! 그렇지 않으면 전략 게임에 적용될 때 이러한 알고리즘 성능을 체스에 적용되는 경우와 비교할 수 없습니다.

체스 엔진의 평가 기능은 다음과 같은 것을 평가합니다.

  • 보드에서 한 조각의 위치는 어느 정도입니까?
  • 조각이 몇 번 공격됩니까?
  • 조각은 몇 번 보호됩니까?
  • 각 조각이 보드에서 얼마나 잘 자유롭게 움직일 수 있습니까? (또는 : 얼마나 많은 타일을 "제어"합니까?)

평가 기능의 해당 부분은 먼저 게임으로 "번역"되어야합니다.

  • 조각의 위치 : 예를 들어 사거리를 연장하는 언덕 위에 있습니까?
  • 공격 당 : 각 조각은 얼마나 위험합니까? (예 : 특수 유닛을 공격 할 수있는 유닛의 공격 가치의 합에 공격 확률을 곱한 값; 유닛이 이미 손상된 경우 확률이 증가합니다. 다른 유닛이 공격 유닛의 범위 내에 있으면 감소합니다)
  • 자신의 공격 :이 유닛이 몇 개의 유닛을 공격 할 수 있습니까?
  • 보호 : 옆에 얼마나 많은 조각이 있습니까? 어쩌면 유닛은 최소 거리에서 유닛을 공격하지 않을 수 있으며 근처 유닛을 공격 할 가능성이있는 유닛으로 보호하는 것이 좋습니다.
  • 이동성 : 얼마나 모바일 기기입니까? (피할 수 있습니까?)

모든 단위에 대해 가중치 함수 (factor_a * rating_a + factor_b * ranting_b + ...)로 다른 등급을 합산해야합니다 ...

전략 게임에서는 남은 자원 (골드, 우드, ...)도 고려해야합니다.

평가 기능이 충분하면 대부분의 경우 실제로 트리를 "깊게"검색 할 필요가 없습니다. 따라서 가장 유망한 3 또는 10 개의 선택을 면밀히 검토하면됩니다. 다음 장 참조 ...

각 위치에서 가능한 이동

전략 게임에 최소 / 최대를 사용하는 데있어 가장 문제가되는 것은 한 번에 여러 유닛을 명령 할 수 있다는 것입니다. 반면 체스에서는 한 유닛 만 명령 할 수 있습니다 (캐스터 링 제외). 각 유닛에 대해 "북쪽, 남쪽, 서쪽, 동쪽 또는 정지"만 결정하는 경우 각 "위치"(체스 항)에 대해 N 단위에 대해 5 ^ N의 가능한 이동이 발생합니다. 복잡한 명령을 하위 수준의 명령으로 분류하여이 문제를 해결할 수 있습니다. 예를 들어, 유닛 A에 대한 동작을 선택하고, 깊이에 들어가서 유닛 B에 대해 결정하십시오. 그러나 이것만으로는 복잡성을 변화시키지 않습니다! 작업이 장치에 할당되는 순서를 최적화해야합니다 (예 : 첫 번째 장치 B, C, D 및 장치 A). 마지막 계산 중에 각 단위에 대한 결정의 영향을 기록한 다음 중요도별로 정렬 할 수 있습니다. 이 방법으로 알파-베타 가지 치기를 사용하여 검색 트리에서 잘못된 조합을 매우 빨리 제거 할 수 있습니다. 가장 높은 우선 순위는 각 반복마다 항상 "더 이상 아무것도하지 말고 턴을 끝내십시오"(null move pruning) 여야합니다. 이렇게하면 대부분의 작업을 대부분의 장치에 "건너 뛰어"이전 작업을 계속할 수 있습니다. 이런 식으로 "중요한"유닛 (예를 들어, 실제로 전투중인 유닛)을 살펴보면 검색이 빠르게 진행됩니다. 각 장치를 한 번만 명령하십시오. 또한 "중요한"장치가 때때로 명령을 받고 있는지 확인하기 위해 임의성을 사용할 수 있습니다. 특히, 일부 직무를 수행하는 부대 (예 :

반복 심화 + 캐싱 / 해시 테이블

그런 다음 시간 제한에 도달 할 때까지 점점 더 깊이 들어가기 위해 "상호 심화"를 수행 할 수 있습니다. 따라서 단위가 적 으면 더 깊이 검색하고 더 나은 솔루션 검색을 중지하면 항상 "결과"가 나타납니다. 반복 심화는 해시 테이블을 사용하여 이전 검색 결과를 캐시해야합니다. 또한 마지막 회전 검색 (마지막 회전에서 실제로 실행 된 명령을 포함하는 검색 트리의 분기)의 일부 결과를 재사용 할 수 있습니다. 이를 구현하려면 반복적으로 업데이트 할 수있는 매우 우수한 해싱 기능 ( "조브리스트 키"를 살펴보십시오)이 필요합니다. 해시 키를 업데이트한다는 것은 이전 "위치"의 해시 키를 가져 와서 위치 변경을 시작할 수 있음을 의미합니다 (예 : x 위치에서 유닛을 빼내고 y 위치에 놓으십시오). 이 방법으로 해시 키를 계산하는 것이 빠르며 해시에이 위치에 대한 이전 항목이 있는지 확인하기 위해 전체 보드 상황을 처리 할 필요가 없습니다. 어떤 방식 으로든 해시 충돌이 발생하지 않도록해야합니다.

비 결정적 행동

비 결정적 동작은 최소 / 최대 검색의 문제입니다. 즉, 공격 대상을 공격 할 것인지 확실하지 않습니다 (예 : 확률은 10 %). 그런 다음이 일을 계획 할 수는 없습니다. 이 경우 알고리즘을 수정하고 그 사이에 "probabilty"레이어를 배치해야합니다. 그것은 "확률이 바뀌는"것과 비슷합니다. 각각의 독립적 인 결과는 개별적으로 고려해야합니다. 이 깊이 "계층"을 통한 평가는 샘플링되어야하고 (몬테카를로 샘플링) 심층적 인 평가 결과는 발생 확률에 의해 가중되어야합니다. 확률 레이어의 다른 결과는 다른 상대 이동으로 간주되어야합니다 (그러나 최소 / 최대 대신 "평균"을 계산해야합니다). 이것은 물론 검색 트리의 복잡성을 증가시킵니다.

요약

결정적인 게임에 이러한 모든 기술 (현재 체스 엔진에서 사용되는 모든 기술)을 적용하면 게임에서도 합리적인 결과를 얻을 수 있습니다. 비 결정적 게임의 경우이 방법이 더 복잡 할 수 있지만 여전히 관리가 가능하다고 생각합니다.

이러한 기술에 대한 설명을 제공하는 좋은 자료는 다음과 같습니다 (체스). http://chessprogramming.wikispaces.com/

최소 / 최대 검색에서 일종의 방향성 무작위성을 구현할 수도 있습니다. 각 반복에서 먼저 최상의 결과를 결정적으로 조사하는 대신 이것을 무작위 화하고 현재 평가를 기반으로 확률 분포에 따라 순서를 결정할 수 있습니다 ...

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