2015-01-07 3 views
2

나는 체커의 응용 프로그램을 구축 중입니다.Minimax에 어떤 유형의 트리를 사용해야합니까?

나는 인공 지능을 구축하기 시작했으며 minimax에 관해 많이 읽었습니다.

나는 일반적으로 최소 최대 게임 나무에서

+0

이진 나무, 2-3 나무 및 힙 나무와 달리 다른 나무와 달리 미니 맥 게임 트리의 노드는 게임 상황에 따라 여러 개의 자식을 가질 수 있습니다. 이 트리는 여러 자식이있는 단일 루트 노드로 구성되며 결과에 따라 여러 자식을 다시 가질 수 있습니다. 이것을 그래픽으로 지원합니다. http://commons.wikimedia.org/wiki/File:Plminmax.gif –

+0

감사합니다. 자바의 API에서이 트리의 이름은 무엇입니까? 또는이 나무의 수업을 직접 만들어야합니까? – nivik

+0

직접 나무를 만드는 것이 좋습니다. 나무가 실제로 어떻게 작동하는지, 물마루를 통과하는 방법에 대해 더 많은 통찰력을 줄 것입니다. –

답변

2

간단하다 (내가 자바 프로그래밍 해요)은 "게임 트리"를 구축하는 데 사용해야하는 나무의 종류 내가 이해할 수 없었다 뭔가가있다 : 각 노드 게임의 상태를 나타내며 해당 상태에서 허용 된 모든 동작을 나타내는 모든 하위 노드의 모음을 포함합니다.

class Node { 
    private Board state; 
    private Map<Move, Node> children; 
} 
+0

어떻게 사용해야하는지 잘 모르겠습니다. 왜'지도 '인가? – garci560

+0

'노드'는 잠재적 인 재생 상태를 나타냅니다. '이동 '은 그 상태에서의 잠재적 인 이동을 나타냅니다. '어린이'지도는 잠재적 인 모든 움직임을 한 주에서 다른 주로 매핑합니다. 따라서 체스에서 국가가 굶주림을 나타내는 위치에 있다면, '어린이'는 18 건의 합법적 인 첫 번째 움직임을 그 움직임 이후의 상태로 매핑합니다. – sprinter

+0

계산할 때 필요한 상태를 저장할 수 있으므로 많은 경우 (대부분의 경우)에는 minimax를 구현하기 위해 이와 같은 트리가 실제로 필요하지 않습니다. 다양한 자습서에는 이와 같은 코드 예제가 많이 있습니다. – sprinter

0

MINIMAX 알고리즘 명시 적 게임 트리를 인코딩하지 않고 구현 될 수있다 :

여기 가능한 구현이다. 각 재귀 단계에서 이동은 실제로 게임 게시판의 일부 표현에서 수행 된 다음 재검토하여 다시 평가를 호출하고 평가 후에 평가할 이동을 취소합니다. 이 접근법은 게임 트리의 노드 만이 명시 적으로 표현되기 때문에보다 메모리 효율적입니다. 이 접근법에서, 호출 스택과 게임 보드 표현은 함께 게임 트리에 대한 노드 반복자로 해석 될 수 있습니다.