

ミニマックスからアルファベータに修正しました。枝刈りが行われるだけで結果は同じはずですが、異なる結果となってしまいました‌​。符号の入れ替え等を試してみたのですが、‌​動作はするが結果が違うという状況です。カットの判断が違うのか、アルファベータ値の作り方・伝搬方法に問題があるかと思われますが、理由が不明です。

[code]

    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
    
[/code]


CC BY-SA 3.0
2017-02-04T00:30:16.997
32372
2017-02-04T01:28:21.323
2017-02-04T01:28:21.323
20507
20507
question
python
アルファベータ法を書いたつもりですが正常に動作しません。