アルファベータ法を書いたつもりですが正常に動作しません。
ミニマックスからアルファベータに修正しました。枝刈りが行われるだけで結果は同じはずですが、異なる結果となってしまいました。符号の入れ替え等を試してみたのですが、動作はするが結果が違うという状況です。カットの判断が違うのか、アルファベータ値の作り方・伝搬方法に問題があるかと思われますが、理由が不明です。
def alpha_beta(boad,p,pp,turn,kifu,depth,a,b): #アルファベータ再帰処理
#カウンタ
if depth == 0:
#末端
kekka = hyouka1(boad,pp)
return 0,kekka,a,b
#行き
can = []
hyouka = []
depth = depth - 1
can = can_put(boad,p)
if can == []:
p = -p
can = can_put(boad,p)
if can ==[]:
kekka = hyouka1(boad,p)
return 0,kekka
print(turn,p,can)
print("kita--------------------!")
for da in can:
boad,p,turn,kifu,result = put_stone(boad,da,p,turn,kifu)
turn += 1
p = -p
#再帰
kari,kekka,a,b = alpha_beta(boad,p,pp,turn,kifu,depth,a,b)
#帰り
hyouka.append([da,kekka])
boad,p,turn,kifu = reverse1(boad,p,turn,kifu)
#もしαβ値を超えたらループを抜ける
if p == -pp and kekka <= a:
print("アルファカット")
break
if p == -pp and kekka >a:
a = kekka
print(a,b)
if p == pp and kekka >= b:
print("ベータカット")
break
if p == pp and kekka < b:
b = kekka
print(a,b)
if pp == p:
hyouka = sorted(hyouka, key=lambda hyouka: hyouka[1],reverse=True)
else:
hyouka = sorted(hyouka, key=lambda hyouka: hyouka[1],reverse=False)
da = hyouka[0][0]
kekka = hyouka[0][1]
return da,kekka,a,b