알파베타 가지치기 예제

알파 : 그것은 플레이어 MAX에 대한 지금까지 최선의 선택입니다. 우리는 여기에서 가능한 가장 높은 가치를 얻고 싶습니다. 베타: 지금까지 MIN에 대 한 최선의 선택, 그리고 그것은 가장 낮은 가능한 값 이어야 한다. Stockfish는 알파 베타 가지 치기 알고리즘을 구현하는 C ++ 오픈 소스 체스 프로그램입니다. Stockfish는 오늘날 가장 강력한 체스 엔진 중 하나로 평가되는 성숙한 구현이며, 2016 년과 2018 년 탑 체스 엔진 챔피언십에서 우승했습니다. [13] [14] [15] 알고리즘은 최대화 플레이어가 보장하는 최소 점수와 최소화 플레이어가 각각 보장하는 최대 점수를 나타내는 두 가지 값인 알파와 베타를 유지합니다. 처음에 알파는 마이너스 무한대이며 베타는 긍정적 인 무한대, 즉 두 플레이어가 최악의 점수로 시작합니다. 최소화 플레이어(즉, “베타” 플레이어)가 최대화 플레이어(즉, “알파” 플레이어)가 보장되는 최소 점수보다 작아질 때마다(즉, “알파” 플레이어)가 보장되는 경우(즉, 베타 ≤ 알파) 최대화 플레이어는 더 이상 고려할 필요가 없습니다. 이 노드의 하위 항목은 실제 플레이에서 도달하지 않습니다.

추가 개선은 알파 베타 컷오프를 강제할 가능성이 있는 트리의 이전 부분을 검색하기 위해 추론을 주문하여 정확도를 희생하지 않고도 달성할 수 있습니다. 예를 들어, 체스에서는 캡처 조각을 캡처하는 이동을 검사한 다음 그렇지 않은 이동을 검사할 수 있으며, 게임 트리 분석을 통해 이전 패스에서 높은 점수를 기록한 이동은 다른 사람보다 앞서 평가될 수 있습니다. 또 다른 일반적이고 매우 저렴한 휴리스틱은 킬러 휴리스틱이며, 트리 검색에서 동일한 트리 수준에서 베타 컷오프를 일으킨 마지막 이동이 항상 먼저 검사됩니다. 이 아이디어는 반박 테이블 집합으로 일반화할 수도 있습니다. b의 분기 계수(평균 또는 상수)와 d 플라이의 검색 깊이를 사용하면 평가된 최대 리프 노드 위치 수(이동 순서가 비관적일 때)는 O(b×b×……×b) = O(bd)로 단순 미니맥스 검색과 동일합니다. 검색에 대한 이동 순서가 최적(가장 좋은 이동이 항상 먼저 검색됨)인 경우, 평가된 리프 노드 위치 수는 홀수 깊이에 대한 O(b×1×1×b×1×1×……×b)이고 O(b×1×1×1×1×1)는 짝수 깊이에 대한 O(b×1×1×1×1×1)이거나 O(b d/2) = O(B d/2) = O(b d/2) = {표시 스타일 O)입니다. b^{d/2}==O({sqrt {b^{d}}}}}}} . 후자의 경우 검색의 ply가 짝수인 경우 유효 분기 계수가 제곱근으로 줄거나 동일한 계산량으로 검색이 두 배 더 깊게 진행될 수 있습니다. [12] b×1×1×1×1×1×… 첫 번째 플레이어의 모든 움직임은 최고의 플레이어를 찾기 위해 연구되어야하지만, 각각에 대해, 단지 최고의 두 번째 플레이어의 움직임은 첫 번째 (그리고 최고의) 첫 번째 플레이어 이동을 제외한 모든 반박하는 데 필요합니다 알파 – 베타는 다른 두 번째 플레이어 이동을 고려할 필요가 없습니다. 노드가 임의 순서로 고려될 때(즉, 알고리즘이 임의화됨) 이진 리프 값이 있는 균일한 트리에서 평가되는 노드의 예상 수는 Θ (( (( b – 1 + b + b + 1 + 1 * * 4) d) {display Theta ((b-1+{sqrt{+2).14*+1)입니다.

{d})} . [11] 같은 나무의 경우 값이 서로 독립적으로 리프 값에 할당되고 0과 1이 모두 동일하게 같을 때 평가된 노드의 예상 수는 Θ (b/2) d) {displaystyle Theta ((b/2)^{d}}입니다. e 작업은 위에서 언급 한 무작위 알고리즘에 의해 수행되며, 이러한 임의의 트리에 다시 최적입니다. [9] 잎 값이 서로 독립적으로 선택되지만 [0, 1] {displaystyle [0,1]} 간격을 임의로 균일하게 선택하면 평가된 노드 수가 Θ(b d/l o g)로 증가합니다. 스타일 dto infty } limit[10], 이러한 종류의 임의의 트리에 다시 최적입니다.