4x4 tic-tac-toe 게임에서 작은 프로젝트를하고 있습니다. 나는 알파 베타 (Alpha Beta) 검색을 사용하여 다음으로 좋은 움직임을 찾습니다. 알파 베타 검색에서, 나는 성공적으로 모든 것을 구현함수가 음수 값을 반환하지 않습니다.
다음 알고리즘의 "유틸리티"함수에서 호출되는 컷오프 평가 기능을 사용하고 있지만, 문제는 유틸리티 기능하지 않는 것입니다 음수 값을 반환하고 나는 왜 그런지 정말로 모른다! O 유틸리티는 반환하도록되어 이기면가 MINVALUE 기능에서 호출
isMin
private static int utility(GameTreeNode gtn, bool isMin = false)
{
int nodeValue = 0;
switch (gtn.NodeBoard.getBoardStatus())
{
case Status.Success:
nodeValue = 50;
if (isMin) nodeValue = -50; /// here
break;
case Status.Incomplete:
if (isMin)
nodeValue = gtn.evaluate(State.X);
else
nodeValue = gtn.evaluate(State.O);
break;
}
// case Status.Draw:
return nodeValue;
}
이 true로 설정되어있는 기능,
isMin
는 O의 이동과 AI의 움직임이다 다음은 X.이다 -50. 그러나 0 만 반환합니다. 나는 프로그램을 디버깅하고 실제로 -50을 nodeValue
(디버거에서 -50으로 변경하면 nodeValue
)로 지정하지만 최소 또는 최대 기능으로 수신하면 0입니다.
참고 : 전체 프로젝트에서 사용되는 모든 int는 signed int
입니다. 당신은 함수 호출자가
알파 - 베타 검색의 전체 코드 서명되지 생각하는 경우에 어떤 unsigned
키워드, 사용하지 않는 것은 여기에 있습니다 : http://pastie.org/8538015
하시기 바랍니다 친구는 가능한 한 빨리 도움이됩니다.
pseudo-code에서'isMin'이'true'로 설정된'Utility'에 대한 호출을 보지 못했습니다 ... – MiMo
내 코드에서 MinValue와 MaxValue의 호출을 구별하기 위해 of O from X) –