我们可以在python中将多处理应用于Minmax算法吗

问题描述

我用 python 编写了一个国际象棋引擎程序,其中我的一个 python 文件负责查找 Computer Moves 。这使用具有 alpha-beta 修剪和一些其他功能的 MinMax 算法。移动查找 python 文件看起来像这样:

def findBestMove():
    minMax()
    return BestMove

文件还包含一些其他功能,如记分板和开场。 我有一个单独的文件,我已经在其中实施了我的行动。所以我在那个文件调用了这个函数

在这个 MinMax 函数占用了很多时间,所以我决定在 python 中使用多处理库。我看到的所有示例都有这样的代码结构:

def f(args):
    #Do Something
if __name__ == '__main__':
    p = Process(target = f,args = ())
    p.start()
    p.join()

在我的程序中,我想对我的 MinMax 函数应用多处理,但我无法做到。

我尝试过这样的事情:

def findBestMove(gs,validMoves):
    global nextMove
    nextMove = None
    p = Process(target = findMoveNegaMaxAlphaBeta,args=(gs,validMoves,DEPTH,-CHECKMATE,CHECKMATE,1 if gs.whitetoMove else -1))
    p.start()
    p.join()
    return nextMove 

def findMoveNegaMaxAlphaBeta(gs,depth,alpha,beta,turnMultiplier):
    global nextMove
    if depth == 0 :
        return turnMultiplier * scoreBoard(gs)    

    maxscore = -CHECKMATE
    for move in validMoves :
        gs.makeMove(move)
        nextMoves = gs.getValidMoves()
        score = -findMoveNegaMaxAlphaBeta(gs,nextMoves,depth - 1,-beta,-alpha,-turnMultiplier)
        if score > maxscore:
            maxscore = score
            if depth == DEPTH :
                nextMove = move
                print("Lol")
        gs.undoMove() 
        if maxscore > alpha:   # This is were pruning happens
            alpha = maxscore
        if alpha >= beta :
            break    

    return maxscore

当我运行代码时,这个“Lol”语句被打印出来,但整个 findBestMove 函数返回 None,这意味着程序调用了我的 findMoveNegaMaxAlphaBeta 函数,并且直到一个值被分配给 NextMove 但该值没有即使 Next Move 是全局变量, findBestMove 函数也会发生变化。 如何返回我的 minmax 函数找到但未在 findBestMove 函数中返回的 BestMove。

解决方法

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

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

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