2017-02-05 11 views
2

기존 구현 :
minimax로 구현 한 Tic-Tac-Toe에서는 최상의 결과를 얻을 수있는 상자를 모두 찾아 무작위로 1 개를 선택하므로 매번 동일한 솔루션이 표시되지 않습니다 .

예 : 반환 된 목록이 [1, 0, 1, -1]이면 어느 시점에서 두 개의 가장 높은 값 사이에서 무작위로 선택합니다. 알파 - 베타 가지 치기에 대한alpha-beta pruning은 minimax를 사용하여 내 솔루션에서 무작위성을 제거합니까?

질문 :
내가 알고리즘은 하나 개의 경로에서 승리하는 것이, 더 이상 /로 연결되지 않을 수 있습니다 다른 경로를 찾을 필요가 발견 없을 때, 이해 무엇을 기반으로 이기는 케이스.

이렇게 생각 하듯이 가능한 가장 빠른 해결책이 결과로 표시되고 매번 똑같이 보일 수있는 가능한 상자가 생깁니 까? 예를 들어 첫 번째 이동시 모든 이동은 끌기로 연결됩니다. 매번 첫 번째 상자가 선택됩니까?

minimax 솔루션과 같이 솔루션에 임의성을 가져올 수있는 방법은 무엇입니까? 지금 생각한 한 가지 방법은 인덱스를 무작위로 알파 베타 알고리즘에 전달하는 것입니다. 결과는 무작위로 정렬 된 순위 목록에서 가장 좋은 솔루션이됩니다.

미리 감사드립니다. 이것에 관한 약간의 문헌이 있다면, 나는 그것을 읽게되어 기쁠 것입니다. 누군가가 aplha-beta pruning에 대한 좋은 참고 자료를 게시 할 수 있다면, 적용하는 방법을 이해하는 데 어려움이 있으므로 탁월한 방법이 될 것입니다.

답변

1

알파 베타 제거에서 여러 최상의 솔루션 (모두 동일) 중에서 무작위로 선택하려면 게임 상태를 평가할 때마다 매우 작은 임의의 숫자를 추가하도록 평가 함수를 수정할 수 있습니다. 그 난수의 크기가 두 상태의 평가 사이의 진정한 차이보다 결코 클 수는 없습니다. 게임 상태에 대한 진정한 평가 기능은 값 -1, 01을 반환 할 경우

예를 들어, 당신은 모든 게임 상태의 평가의 범위 [0.0, 0.01]에서 무작위로 생성 된 번호를 추가 할 수 있습니다.

이 기능이 없으면 알파 베타 제거가 반드시 하나의 솔루션 만 찾지는 않습니다. this example from wikipedia을 고려하십시오. 중간에 6 개의 평가가있는 두 개의 솔루션이 발견되었으므로 하나 이상의 솔루션을 찾을 수 있습니다. 실제로 실제로 루트 노드에서 최적의 솔루션으로 이끄는 모든 움직임을 찾을 수 있다고 생각하지만 트리에서 모든 솔루션을 실제로 찾지는 않습니다. 예제 이미지에서 중간에 9의 점수를 갖는 제거 된 노드가 실제로 6의 점수를 가지고 있다고 가정합니다. 그것은 여전히 ​​그곳에서 가지 치기 때문에, 그 특별한 해결책은 발견되지 않을 것입니다, 그러나 그것으로 이어지는 루트 노드로부터의 이동 (루트에서의 중간 이동)은 여전히 ​​발견 될 것입니다. 그래서, 결국, 당신은 그것을 도달 할 수있을 것입니다.

몇 가지 흥미로운 노트 :

  • 이 구현은 또한 최소 최대 작동, 여러 목록 (동등하게 좋은) 솔루션 박하 사탕 발가락보다 더 복잡한 게임에서
  • 를 저장할 필요가 피할 것 당신은 전체 상태 공간을 검색 할 수없고, 최대 플레이어에 작은 난수를 추가하고 이와 같이 min 플레이어에 작은 난수를 공제하면 실제로는 휴리스틱 평가 함수가 약간 향상 될 수 있습니다. 그 이유는 다음과 같습니다.상태 A에서 5 개의 움직임이 가능하다고 가정하고 상태 B에서 10 개의 움직임을 사용할 수 있으며, 결과적으로 동일한 경험적 평가 점수가됩니다. 직관적으로, 당신이 더 많은 움직임을 사용할 수 있었기 때문에 B주의 후계자가 약간 더 좋을 수 있습니다. 많은 게임에서 더 많은 이동이 가능하다는 것은 당신이 더 나은 위치에 있다는 것을 의미합니다. B 상태의 10 승계에 대해 10 개의 임의의 숫자를 생성했기 때문에 가장 높은 생성 난수가 A의 승수에 대해 생성 된 5 개의 숫자 대신에 10보다 많습니다.
+0

알파 -beta 알고리즘은 특정 상태에 대해 여러 최상의 솔루션을 반환합니다 (모두 동일). 내가 생각한 바는 그것이 최선의 해결책으로 멈추고 나머지 것들은 잘랐다는 것입니다. –

+0

@The_coder에서 편집 된 답변에 대한 추가 정보가 있습니다. –