我知道以前有人问过这个问题,但我无法弄清楚这个问题。
我有一个 7x7 板,用于连接 4ish 游戏。
我定义了这个方法,来实现 Minimax 的 Alpha Beta 剪枝。
它应该返回我的启发式,并设置最佳移动。但我总是得到最好的移动,因为是我棋盘上最后一个可用的移动....
这里有什么我可能会丢失的吗?
谢谢!
private int alphaBeta(Node node, int depth, int alpha, int beta, bool max)
{
if (depth == 0 || node.getBoard().noMorePlays())
{
return node.getBoard().heuristic(max ? 1 : 2);
}
if (max)
{
foreach (Node child in node.Children( (max ? 1 : 2)) )
{
alpha = Math.Max(alpha, alphaBeta(child, depth - 1, alpha, beta, !max));
this.bestNode = child;
if (beta <= alpha)
{
break;
}
}
return alpha;
}
else
{
foreach (Node child in node.Children((max ? 1 : 2)))
{
beta = Math.Min(beta, alphaBeta(child, depth - 1, alpha, beta, !max));
if (beta <= alpha)
{
break;
}
}
return beta;
}
}