2010-07-29 3 views
3

minmax 알고리즘에 대한 의사 코드를 가져오고 싶습니다. 나는 2 개의 함수, def maxAgent (gameState, depth)와 minAgent를 만들어야 만한다. 그것에 대한 권리와 쉬운 의사 코드를 가진 시체가 있습니까?minmax 알고리즘에 대한 의사 코드

+0

완전히 구성된 게임 트리이거나 비 숙련 된 노드입니까? minmax는 점진적으로 이루어지며 (승자를 결정하거나 미정) 게임 트리가 완료되면 완료 될 수 있습니다.이 경우 확실한 승자가 발견됩니다. – mdma

+0

완전히 지어진 나무. 최고 점수를 반환합니다. – Shilpa

답변

2

두 명의 플레이어 A와 B가 차례로 게임을합니다.

주어진 보드 위치 P를 평가하는 점수 함수 f가 주어집니다. f (P)의 값이 클수록 A는 더 좋고 B는 더 나음 (즉 f (P)는 "양호한" P는 더 이상 미리보기를하지 않고 A에 대한 것임). P가 잎 노드의 경우

는 보드 위치 P.

을 고려 우리가 점수로 F (P)을 반환 (즉, P는 승리 위치 또는 우리가 원하는대로 우리는 멀리 앞서 보았다) 이 노드에 대해.

그렇지 않으면 P는 리프 노드가 아니며 자식 C1, ..., Cn을가집니다. 우리는 S1, ..., Sn을 제공하여 아이들의 점수를 재귀 적으로 계산합니다.

만약 A가 P에서 뛰면, A는 항상 그의 이점을 극대화하기 위해 플레이 할 것이기 때문에 P에 대한 점수는 max {S1, ..., Sn}이됩니다.

B가 A에서의 이점을 최소화하기 위해 항상 재생되므로 B가 P에서 재생되면 P의 점수는 min {S1, ..., Sn}이됩니다.

코드로 전환하기에 충분해야합니다.

일단 해보신 후에는 알파 베타 제거 (prune)를 수행하십시오. 그러면 검색의 양이 급격히 줄어 듭니다. Alpha-beta pruning은 A가 B가 A의 최대 이점을 M으로 강제 할 수 있다고 추론하면 B가 A 옵션을 허용하지 않으므로 M보다 큰 모든 하위 트리를 고려할 필요가 없다는 아이디어에 기반합니다.

2

minmax 알고리즘은 플레이어 A의 점수를 최대화하고 플레이어 B의 점수를 최소화하려고합니다. 노드가 주어지면 최대 (A의 경우) 또는 최소 (B의 경우)를 취하여 최적의 플레이에서 최종 결과를 찾을 수 있습니다. 후계 노드에 대한 점수의 리프 노드는 (A의 1 -1 B에 대한) 우승자를 할당한다고 가정하면 다른 모든 노드는 0의 점수가 동안 다음

getMaxScore(node) { 
    score = node.score; 
    for each child node 
     score = max(score, getMaxScore(node)) 
    next 

    return score; 
    } 
처럼 뭔가 A의 최종 승리의 결과를 계산할 수

이것은 기본 알고리즘입니다. 스코어가 1이되고 점수를 얻으면 곧바로 평가할 수 있습니다.

알고리즘은 B, getMinScore와 동일하며 min 함수 만 사용하고 단락이있는 경우, -1을 찾습니다.

+0

응? minmax는 A에 대한 최대 결과 또는 A에 대한 예상 결과를 최대화하지 않습니다. B에 대한 예상 결과 (임의로 재생중인 B, 합리적으로 재생중인 B 또는 B가 A의 조치를 모른 채로 재생하는 다른 규칙)를 최소화하지도 않습니다. A가 B의 최대 결과를 최소화하기 위해 어떻게하는지 알려주며, B가 A의 선택을 안다면 달성되는 결과가 나온다고합니다. 그것은 min_ {a \ in A} max_ {b \ in B} c (a, b)로 쓰여지고, 여기서 a는 플레이어 A의 이동, b는 플레이어 B의 이동, c는 비용 함수이다. –

+1

@Ben 당신이 말하는 말은 맞지만 내가 쓰는 것을 오해하고 있습니다.글자 그대로/구현 세부 사항을 말하고 있습니다. A 점수를 1, B 점수를 -1이라면 A의 함수는 0부터 시작하여 점수를 최대화하는 것입니다. (힌트, 결과를 말하지 않습니다. - 구현 세부 사항 인 '점수'라고 말합니다.) – mdma