问题描述
我用 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 (将#修改为@)