私は現在、オセロ用の優れた AI を作ろうとしており、Minimax アルゴリズムを使用してそれを実現しました。しかし、α-β プルーニングを使用してさらに深く検索しようとすると、アルゴリズムがひどく機能しているように見えました。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