我正在构建一个带有 alpha beta 的黑白棋游戏,我需要你在 alpha beta 中的帮助。问题是计算机不断选择位于棋盘低端的方格之一。我有一个计算机可能的移动列表(如您在下面的代码中所见),这意味着计算机几乎总是选择该列表中的最后一个或最后一个移动,即使它不是最好的移动。我的评估函数很简单:黑色块减去白色块。顺便说一句:它在深度 = 1 中工作正常,但我需要它在深度 = 3 中工作。
public int AlphaBeta(int depth,int turn,TreeNode root,int alpha,int beta)
{
if(depth==0)
return evaluationFunc(turn,turns,root.board,root);
else
{
buildSons(turn,root);
TreeNode head = generateList(root.sons);
return executeCheckTheSons2(depth,turn,head,alpha,beta);
}
}
public int executeCheckTheSons2(int depth,int turn,TreeNode head,int alpha,int beta)
{
int score;
if(turn==1)
{
while(head!=null)
{
head.board=simulateTheMove(head.board,head.getX(),head.getY(),turn);
score=AlphaBeta(depth-1,turn*-1,head,alpha,beta);
if(score > alpha)
{
alpha=score;
setMove(head);
}
if(alpha >= beta)
return alpha;
head=head.next;
}
return alpha;
}
else
{
while(head!=null)
{
head.board=simulateTheMove(head.board,head.getX(),head.getY(),turn);
score=AlphaBeta(depth-1,turn*-1,head,alpha,beta);
if(score<beta)
{
beta=score;
setMove(head);
}
if(alpha >= beta)
return beta;
head=head.next;
}
return beta;
}
}
public void setMove(TreeNode root)
{
while(root.father.father!=null)
root=root.father;
pnt.setX(root.getX());
pnt.setY(root.getY());
}