我正在尝试使用chess包用python构建一个简单的国际象棋引擎。我的minimax函数有问题,会破坏atm。下面是我的代码。。。
# import package
import chess
# define starting params
board = chess.Board()
depth = 3
alpha = -1000000
beta = 1000000
player = True
# board evaluation
def boardEval(board):
wp = len(board.pieces(chess.PAWN, chess.WHITE))
bp = len(board.pieces(chess.PAWN, chess.BLACK))
wn = len(board.pieces(chess.KNIGHT, chess.WHITE))
bn = len(board.pieces(chess.KNIGHT, chess.BLACK))
wb = len(board.pieces(chess.BISHOP, chess.WHITE))
bb = len(board.pieces(chess.BISHOP, chess.BLACK))
wr = len(board.pieces(chess.ROOK, chess.WHITE))
br = len(board.pieces(chess.ROOK, chess.BLACK))
wq = len(board.pieces(chess.QUEEN, chess.WHITE))
bq = len(board.pieces(chess.QUEEN, chess.BLACK))
return (wp-bp) + 3 * (wn-bn) + 3 * (wb-bb) - 5 * (wr-br) + 10 * (wq-bq)
# minimax function
def minimax(board, depth, alpha, beta, player):
# check whether game is complete
gameComplete = board.is_game_over()
bestMove = None
moves = [str(l) for l in board.legal_moves]
tempBoard = board.copy()
if depth == 0:
return boardEval(tempBoard), bestMove
if gameComplete:
print('Game completed')
return None
for move in moves:
m = chess.Move.from_uci(move)
tempBoard.push(m)
if player:
maxEval = -1000000
value, bestMove = minimax(tempBoard, depth - 1, alpha, beta, False)
if maxEval < value:
maxEval = value
bestMove = move
alpha = alpha if alpha > value else value
if beta <= alpha:
break
return maxEval, bestMove
else:
minEval = 1000000
value, bestMove = minimax(tempBoard, depth - 1, alpha, beta, True)
if minEval < value:
minEval = value
bestMove = move
beta = beta if beta < value else value
if beta <= alpha:
break
return minEval, bestMove
# find best move
minimax(board, depth=3, alpha=-100000, beta=100000, player=True)
但是,在运行minimax函数时,我收到以下错误消息:
Traceback (most recent call last):
File "<ipython-input-10-9ddb4749c86c>", line 64, in <module>
minimax(board, depth=3, alpha=-100000, beta=100000, player=True)
File "<ipython-input-10-9ddb4749c86c>", line 44, in minimax
value, bestMove = minimax(tempBoard, depth - 1, alpha, beta, False)
TypeError: cannot unpack non-iterable NoneType object
我不明白为什么会发生这种情况,也不知道如何解决。有什么想法吗?