我目前正在尝试为奥赛罗制作一个好的 AI,并使用 Minimax 算法做到了这一点。然而,当我尝试使用 alpha-beta 剪枝进行更深入的搜索时,该算法似乎运行得很糟糕。我用 Wiki 和 Berkely.edu 等其他来源检查了它,我认为我已经正确实现了它,但我仍然找不到问题。
def alphabeta(board, player, a, b, lev):
h = heur(board, player)
if lev == 0:
return h, None
poss = get_legal_moves(board, player)
if len(poss) == 0:
return h, None
move = 0
for x in poss:
cpboard = board[:]
cpboard[x] = player
bracket(cpboard, player, x)
a1, q = alphabeta(cpboard, opponent_color(player), a, b, lev-1)
if player is me:
if a1 > a:
a, move = a1, x
else:
if a1 < b:
b, move = a1, x
if b <= a:
break
if player is me:
return a, move
else:
return b, move