我正在做一个关于 4x4 井字游戏的小项目。我正在使用 Alpha Beta Search 来寻找下一个最佳动作。在 alpha beta 搜索中,我使用了在以下算法的“实用程序”函数中调用的截止评估函数
我成功地实现了一切,但问题是效用函数没有返回负值,我真的不知道为什么!以下是函数
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;
}
isMin
从 MinValue 函数调用时设置为 true
isMin
是 O 的移动,而 AI 的移动是 X。如果 O 获胜,实用程序应该返回 -50。但它只返回 0。我调试了程序,它实际上将 -50 分配给nodeValue
(nodeValue
调试器中的更改为 -50),但是当我在 Min 或 Max 函数中收到时,它为零。
注意:整个项目中使用的所有 int 都是signed int
. unsigned
如果您认为函数调用者是无符号的,则不使用关键字
alpha-beta 搜索的完整代码在这里: http: //pastie.org/8538015
请朋友们尽快帮忙。