2016-12-31 8 views
0

Alpha Beta 가지 치기가있는 MiniMax를 사용하여 오델로 게임용 AI를 구현합니다. 내가 얻을 수있는 가치를 말해주는 알파 베타 (Alpha Beta) 알고리즘을 구현했지만 어떤 노드를 선택해야하는지 알 수 없다. 그래서 내 질문은 Alpha-Beta를 사용하여 결과 값이 아닌 노드를 선택해야하는 방법을 알려주는 것입니다. 다음은 알파 베타 (Alpha-Beta) 알고리즘의 의사 코드입니다.알파 베타를 사용하여 노드를 선택하는 방법

01 function alphabeta(node, depth, α, β, maximizingPlayer) 
02  if depth = 0 or node is a terminal node 
03   return the heuristic value of node 
04  if maximizingPlayer 
05   v := -∞ 
06   for each child of node 
07    v := max(v, alphabeta(child, depth – 1, α, β, FALSE)) 
08    α := max(α, v) 
09    if β ≤ α 
10     break (* β cut-off *) 
11   return v 
12  else 
13   v := ∞ 
14   for each child of node 
15    v := min(v, alphabeta(child, depth – 1, α, β, TRUE)) 
16    β := min(β, v) 
17    if β ≤ α 
18     break (* α cut-off *) 
19   return v 
+0

결과 값이 어떨지 - _하지만 그 값도 필요합니다. 2 가지를 돌려 주어야합니다. 정확한 대답은'node', 프로그래밍 언어 등의 정의에 달려 있습니다. –

+0

@HenkHolterman 왜 결과 값을 반환해야합니까? 내 트리가 예를 들어 이진 검색 트리 인 경우 값이 아닌 선택하려는 두 노드를 알아야합니다. 물론 선택해야 할 노드를 결정하기 위해 그 값이 필요합니다. –

+0

당신은 방금 자신에게 대답했습니다 : "어느 것을 결정할 것인가 ..." –

답변

0

루트 위치에서 가장 좋은 이동을 알고 싶다면 루트 위치에서 가장 높은 점수를 얻은 이동을 기억하면 충분합니다. 이를 위해 점수를 반환하는 것만으로 충분합니다. 의사 코드의 변경은 필요하지 않습니다.

중요한 노드에 대한 경로를 묻는 중, principal variation을 재구성하는 방법에 대해 묻습니다. 검색에서 예상되는 일련의 동작에 대한 정보를 제공합니다.

이론적으로 재귀 호출에서 값과 주 변형을 반환 할 수 있습니다. 따라서 경로를 재구성 할 수 있습니다. Triangular PV-Tables은 이러한 목적에 최적화 된 데이터 구조입니다.

검색에 transposition table을 사용하는 경우 더 간단한 방법은 근음 위치를 시작하고 전치 테이블에서 최상의 이동을 찾는 것입니다. 그런 다음 게임이 끝나거나 항목이 발견되지 않을 때까지 이동하고 반복하십시오 (최선의 움직임을 찾거나, 최선의 움직임을 취하거나, 다시 검색 등). 결국, 만들어진 움직임이 주요 변화입니다.

전치 테이블 접근법은 주요 변형을 명시 적으로 추적하는 것만 큼 정확하지는 않지만 구현하는 것이 간단하며 검색 중에 오버 헤드가 추가되지 않습니다.

+0

명확하게하기 위해 중첩 테이블은 상당한 오버 헤드를 추가 할 수 있습니다 (Zobrist 해시를 사용하는 경우에는 그만큼 줄어 듭니다). 그러나이 비용은 일반적으로 검색 트리의 크기를 줄임으로써 크게 상회합니다. –

+0

@ NathanS. 참된. "오버 헤드가 없다"는 것은 검색이 이미 전치 테이블을 사용한다고 가정하지만, 지금까지는 전치 테이블이없는 최적화 된 알파 베타 검색을 보지 못했습니다. 적어도 체스에서는 모든 엔진이이를 사용하여 주로 이동 순서를 개선합니다. 다른 유사한 게임 (Reversi 등)에서도 마찬가지라고 생각합니다. –

+0

@ PhillipClaßen 매우 사실 - 당신이 전치 테이블을 사용하지 않는 유일한 게임은 거의 전이가없는 곳입니다. –