我正在做一个4x4井字游戏的小项目。我正在使用Alpha Beta Search来寻找下一个最佳举措。在α+β搜索,我使用的是被称为在下面的算法函数不返回负值
我成功地实施一切的“效用”功能的截止评价功能,但问题是效用函数不返回一个负值,我真的不知道为什么!以下是功能
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
设置为true,当它从MINVALUE函数调用
isMin
为O的移动和AI的举动是X.如果o赢得效用应该返回-50。 但它只返回0。我调试了程序,它实际上将-50调到nodeValue
(nodeValue
调试器中的更改为-50),但是当我在Min或Max函数中接收时,它是零。
注:在整个项目中使用的所有int是signed int
。没有unsigned
关键字时,如果你正在考虑的功能,来电显示是无符号
Alpha-Beta搜索的完整代码是在这里:http://pastie.org/8538015
请朋友们帮忙尽快。
我看不到''Utility'的调用,'isMin'在伪代码中设置为'true' ... – MiMo
在我的代码中,它确实将区别MinValue和MaxValue的调用来自X的O) –