如何找出我的极小极大井字游戏AI不工作的原因?

我正在尝试制作一个极小极大算法的井字游戏,因为我是Python的新手,我想弄清楚一个简单的AI极小极大游戏是如何工作的。不知为何,AI仍然按照棋盘列表中位置的顺序进行选择。

例如:如果右上角的位置在“b”列表中是第一个,它就会首先选择它。看起来它是在计算分数,但我认为它并没有利用这些分数。我希望它不要按照棋盘上的空间顺序进行选择。我找不到一种方法来替换放置“O”的代码。

import randomimport maththree = [0, 0, 0]game = Trueturnai = Falseresult = ""b = [" ", " ", " ", " ", " ", " ", " ", " ", " "]x = "X"o = "O"#棋盘上的位置 例如:ur = 右上角, mm = 中间, lm = 左下角ur = b[2]um = b[1]ul = b[0]ml = b[3]mm = b[4]mr = b[5]ll = b[6]lm = b[7]lr = b[8]cw = " "AI = ""player = ""#设置棋盘def board(ul, um, ur, ml, mm, mr, ll, lm, lr):    print("|" + " " + ul + " " + "|" + " " + um + " " + "|" + " " + ur + " " + "|")    print("|" + " " + ml + " " + "|" + " " + mm + " " + "|" + " " + mr + " " + "|")    print("|" + " " + ll + " " + "|" + " " + lm + " " + "|" + " " + lr + " " + "|")board(ul, um, ur, ml, mm, mr, ll, lm, lr)print("这是一个井字游戏")print("你将与AI对战")print("输入你想放置字母的位置 例如:ur = 右上角, mm = 中间, ll = 左下角")first = "P"player = "X"AI = "O"#检查是否有人获胜def checkwinner():    ur = b[2]    um = b[1]    ul = b[0]    ml = b[3]    mm = b[4]    mr = b[5]    ll = b[6]    lm = b[7]    lr = b[8]    row1 = [ul, ml, ll]    row2 = [um, mm, lm]    row3 = [ur, mr, lr]    column1 = [ul, um, ur]    column2 = [ml, mm, mr]    column3 = [ll, lm, lr]    diagonal1 = [ul, mm, lr]    diagonal2 = [ur, mm, ll]    if row1 == ["X", "X", "X"] or row2 == ["X", "X", "X"] or row3 == ["X", "X", "X"] or column1 == ["X", "X",                                                                                                    "X"] or column2 == [        "X", "X", "X"] or column3 == ["X", "X", "X"] or diagonal1 == ["X", "X", "X"] or diagonal2 == ["X", "X",                                                                                                      "X"]:        if player == x:            print("你赢了!(X)")            return "X"        if player != x:            print("你输了!")            return "O"    if row1 == ["O", "O", "O"] or row2 == ["O", "O", "O"] or row3 == ["O", "O", "O"] or column1 == ["O", "O",                                                                                                    "O"] or column2 == [        "O", "O", "O"] or column3 == ["O", "O", "O"] or diagonal1 == ["O", "O", "O"] or diagonal2 == ["O", "O",                                                                                                      "O"]:        if player == o:            print("你赢了!(O)")            return "X"        if player != o:            print("你输了")            return "O"    if b[0] != " " and b[1] != " " and b[2] != " " and b[3] != " " and b[4] != " " and b[5] != " " and b[        6] != " " and b[7] != " " and b[8] != " ":        print("平局!")        winner = True        return "0"    return "null"#极小极大算法def minimax(b, depth, isMaximizing):            result = checkwinner()            if result != "null":                score = scores[result] + score                return score            if (isMaximizing):                bestScore = -math.inf                j = 0                for str in b:                    if str == " ":                        b[j] = AI                        score = minimax(b, depth + 1, False) + score                        b[j] = " "                        bestScore = max(score, bestScore)                    j += 1                return bestScore            else:                bestScore = math.inf                k = 0                for str in b:                    if str == " ":                        b[k] = player                        score = minimax(b, depth + 1, True) + score                        b[k] = " "                        bestScore = min(score, bestScore)                    k += 1                return bestScore#游戏开始循环if (first == "P"):    while (game == True):        i = 0        scores = {            'O': 1,            'X': -1,            '0': 0        }#AI回合        bestScore = -math.inf        turnai = False        i = 0        for str in b:            if str == " ":                b[i] = AI                score = minimax(b, 0, True)                b[i] = " "                print(score)                if score > bestScore and turnai == False:                    bestScore = score                    b[i] = AI                    turnai = True            i += 1        turnai = False        print("")        # b = [ul, um, ur, ml, mm, mr, ll, lm, lr]        ur = b[2]        um = b[1]        ul = b[0]        ml = b[3]        mm = b[4]        mr = b[5]        ll = b[6]        lm = b[7]        lr = b[8]#打印棋盘        board(b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8])        cw = checkwinner()#检查游戏是否结束        if cw == "X" or cw == "O" or cw == "0":            game = False            break#玩家回合        print("你想在哪里放置你的字母?")        turn = input(": ")        if turn == "ur" and ur == " ":            b[2] = player            uru = True        if turn == "um" and um == " ":            b[1] = player            umu = True        if turn == "ul" and ul == " ":            b[0] = player            ulu = True        if turn == "mr" and mr == " ":            b[5] = player            mru = True        if turn == "mm" and mm == " ":            b[4] = player            mmu = True        if turn == "ml" and ml == " ":            b[3] = player            mlu = True        if turn == "lr" and lr == " ":            b[8] = player            lru = True        if turn == "lm" and lm == " ":            b[7] = player            lmu = True        if turn == "ll" and ll == " ":            b[6] = player            llu = True#打印棋盘        board(b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8])        sw = checkwinner()#检查游戏是否需要结束        if cw == "X" or cw == "O" or cw == "0":            game = False            break

回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注