你好,首先我的英语非常好,所以请原谅我有些事情是不可理解的。我为tic-tac-toe写了一个MinMax算法,它工作得非常好。所以我尝试使用MinMax算法进行四次连接,遗憾的是它不能像我想的那样工作。然后我在google上找到了Alpha beta MinMax,当我终于理解它时,我尝试了它,但这是一场灾难^^。这是我的MinMax我为4连接做了什么可以有人给我一个如何实现alpha和beta的建议?
private int computerzug(Color[][] board, int depth, Color spielerFarbe)
{
if(getGameLogic().hasWon(board, spielerFarbe))
{
System.out.println("hy");
return -10 -depth;
}
if(getGameLogic().hasDraw(board))
{
return 0;
}
if(depth==6)
{
return 0;
}
int max = Integer.MIN_VALUE;
int index = 0;
for(int i =0;i<board[0].length;i++)
{
if(board[0][i].equals(Color.WHITE))
{
Color[][] board1 = new Color[board.length][board[0].length];
board1 = copy(board);
board1[getRow(board, i)][i] = spielerFarbe;
int moval = -computerzug(board1, depth+1, (spielerFarbe.equals(Color.BLUE)?Color.RED:Color.BLUE));
if(moval> max)
{
max = moval;
index = i;
}
}
}
if(depth==0)
{
col = index;
row = getRow(this.board, index);
}
return max;
}
我正在使用2D数组颜色来模拟电路板。
答案 0 :(得分:0)
假设您的代码适用于minimax,alpha beta版本应该是这样的(我无法测试它):
private int computerzug(Color[][] board, int depth, Color spielerFarbe, int alpha, int beta)
{
if(getGameLogic().hasWon(board, spielerFarbe))
{
System.out.println("hy");
return -10 -depth;
}
if(getGameLogic().hasDraw(board))
{
return 0;
}
if(depth==6)
{
return 0;
}
int max = Integer.MIN_VALUE;
int index = 0;
for(int i =0;i<board[0].length;i++)
{
if(board[0][i].equals(Color.WHITE))
{
Color[][] board1 = new Color[board.length][board[0].length];
board1 = copy(board);
board1[getRow(board, i)][i] = spielerFarbe;
int moval = -computerzug(board1, depth+1, (spielerFarbe.equals(Color.BLUE)?Color.RED:Color.BLUE), -beta, -alpha);
if( moval >= beta )
return moval; // fail-soft beta-cutoff
if( moval > max ) {
max = moval;
index = i;
if( moval > alpha )
alpha = moval;
}
}
}
if(depth==0)
{
col = index;
row = getRow(this.board, index);
}
return max;
}
对于初始调用,您使用非常高的alpha值和非常低(负)的beta值