これは以前に尋ねられたことは知っていますが、これを理解することができませんでした。
コネクト 4 っぽいゲーム用に 7x7 のボードを持っています。
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;
}
}