【发布时间】:2013-12-08 19:13:41
【问题描述】:
我正在做一个关于 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
请朋友们尽快帮忙。
【问题讨论】:
-
我没有看到在伪代码中将
isMin设置为true的Utility调用... -
在我的代码中,它确实是为了区分 MinValue 和 MaxValue 的调用(以区分 O 和 X 的移动)
标签: c# function return-value tic-tac-toe alpha-beta-pruning