奥赛罗的 minimax 函数,不假思索地选择第一个位置

问题描述

我正在尝试为黑白棋游戏编写极小极大算法。我的代码从它应该选择的列表中选择第一个可用的点,当有更好的点可以使用时:

例如这是我的驱动程序代码

board = np.array([['e','B','B'],['R','R','R'],['B','e'],['e','e','e']])
emptyspots = [[0,0],[2,3],[3,1],3]]
player = 'B'
otherplayer = 'R'
takenred = [[1,[1,2],2]]
takenblue = [[0,[0,0]]
validblue = [[0,3]]
validred = [[0,0]]
print(BestMove(deepcopy(board),deepcopy(emptyspots),player,otherplayer,deepcopy(takenred),deepcopy(takenblue),deepcopy(validblue),deepcopy(validred)))

我的代码选择[0,0],什么时候应该选择[2,3]

这是我实际的 AI minimax 代码

def evaluation(board,emptyspots,takenred,takenblue,validblue,validred,depth):
    if depth==0:
        if len(takenblue) > len(takenred):
            return 10
        if len(takenblue) < len(takenred):
            return -10
        return 0


def minimax(board,depth,ismaximizing,validred):
    score = evaluation(deepcopy(board),deepcopy(validred),depth)
    if score == 10:
        return score
    if score == -10:
        return score
    if score==0:
        return 0
    if ismaximizing:
        best = -1000
        for q in validblue:
            board,newtakenred,newtakenblue = main(deepcopy(board),q,otherplayer)
            best = max(best,deepcopy(minimax(deepcopy(board),deepcopy(newtakenred),deepcopy(newtakenblue),depth -1,not ismaximizing,deepcopy(validred))))
        return best
    else:
        best = 1000
        for z in validred:
            board,z,otherplayer)
            best = min(best,deepcopy(validred))))
        return best


def BestMove(board,validred):
    bestvalue = -1000
    bestmove = [-1,-1]
    for j in validblue:
        board,j,otherplayer)
        movevalue = minimax(deepcopy(board),4,True,deepcopy(validred))
        if movevalue > bestvalue:
            bestmove = j
            bestvalue = movevalue
    return bestmove

非常感谢任何帮助

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)