我写了一个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
答案 0 :(得分:0)
Tic-Tac-Toe只有765个不同的位置。如果理论上可行,那么制作一个能够永远获胜的AI很容易。