TicTacToe Minimax算法

时间:2015-06-23 09:58:25

标签: python

我写了一个Tic Tac Toe游戏,我试图为AI实现minimax算法,但是我对代码有一些问题。

问题是它不会选择会导致AI获胜的移动,并且如果你以特定的方式玩,它会一遍又一遍地选择相同的移动。基本上,算法被打破了。

注意:该算法来自维基百科的伪代码。

以下是我设法做的事情:

def MiniMax(self, AI):
    if self.evalWin():
        if AI:
            return 10

        return -10

    if self.evalTie():
        if AI:
            return 0

        return 0

    bestmove = None
    bestMax  = float("-inf")
    bestMin  = float("inf")

    for move in self.getAvailableMoves():
        if AI:
            self.makeMove(move, self.opponent)

            score = self.MiniMax(False)

            bst = max(bestMax, score[0]) if type(score) == tuple else max(bestMax, score)

            if type(score) == tuple:
                if score[0] >= bst:
                    bestmove = move

            elif type(score) == int:
                if score >= bst:
                    bestmove = move

            self.makeMove(move, "_")
            print(bst, bestmove)

            return bst, bestmove

        else:
            self.makeMove(move, self.player)

            score = self.MiniMax(True)

            bstm = min(bestMin, score[0]) if type(score) == tuple else min(bestMin, score)

            if type(score) == tuple:
                if score[0] >= bstm:
                    bestmove = move

            elif type(score) == int:
                if score >= bstm:
                    bestmove = move

            self.makeMove(move, "_")

            return bstm, bestmove

1 个答案:

答案 0 :(得分:0)

Tic-Tac-Toe只有765个不同的位置。如果理论上可行,那么制作一个能够永远获胜的AI很容易。