gpt4 book ai didi

python - 如何为connect 4实现换位表?

转载 作者:行者123 更新时间:2023-12-03 17:11:32 25 4
gpt4 key购买 nike

我在 python 中创建了一个连接 4 AI,我为此使用了带迭代深化和 alpha beta 修剪的 minimax。对于更大的深度,它仍然很慢,所以我想实现一个换位表。在阅读它之后,我想我得到了一般的想法,但我还没有完全让它发挥作用。这是我的代码的一部分:(minimax 的最大化部分):

    if(isMaximizing):
maxEval = -99999999999
bestMove = None
# cache.get(hash(board)) Here's where i'd check to see if the hash is already in the table
# if so i searched for the best move that was given to that board before.

# loop through possible moves
for move in [3,2,4,1,5,0,6]:
if moves[move] > -1:
# check if time limit has been reached for iterative deepening
if startTime - time.time() <= -10:
timeout = True
return (maxEval, bestMove, timeout)

if timeout == False:
board = makeMove((moves[move],move), True, board) # make the move
eval = minimax(depth - 1, board, False, alpha, beta, cache, zobTable, startTime, timeout)[0]

if eval > maxEval:
maxEval = eval
bestMove = (moves[move]+1,move)

board[moves[move] + 1][move] = '_' # undo the move on the board
moves[move] = moves[move] + 1 # undo the move in the list of legal moves

alpha = max(alpha, maxEval)
if alpha >= beta:
break
# cache.set(hash(board), (eval, value)) Here's where i would set the value and bestmove for the current boardstate
return (maxEval, bestMove, timeout)

现在我正在使用 zobrist 散列方法对板进行散列,并且我正在使用有序的 dict 将散列的板添加到。对于这个哈希键,我已经添加了该板的值和该板的 bestMove。不幸的是,这似乎使算法选择了错误的 Action (它以前工作过),有没有人知道应该将棋盘状态放在缓存中的哪个位置,以及应该从缓存中获取它们的位置?

最佳答案

关于你的方法的几点:

  • 如果你想让事情变得更快,用 C 或 C++ 编写高效的代码会比 Python 快得多。通过从 python 切换到良好的 C/C++ 实现,我已经看到这种搜索代码的性能提高了 10-100 倍。无论哪种方式,您都应该尝试编写避免在搜索期间分配内存的代码,因为这非常昂贵。也就是说,与添加换位表相比,您可以从编码中看到更好的返回。
  • 在博弈树搜索中对换位表使用 Zobrist 哈希时,您通常不会显式存储状态。您只需检查哈希值是否相等。虽然出错的可能性很小,但仅存储散列所需的内存要少得多,并且使用 64 位散列,对于您正在执行的搜索类型,冲突的可能性可能很小。 (产生错误的几率更低。)
  • 当您在转置表中存储值时,您还需要存储搜索期间使用的 alpha 和 beta 边界。当您在节点搜索中返回一个值时,它要么是真实值的上限(因为值 = beta)、真实值的下限(因为值 = alpha)或节点的实际值( alpha < 值 < beta)。您需要将其存储在您的换位表中。然后,当您想要重新使用该值时,您必须检查是否可以使用给定当前 alpha 和 beta 界限的值。 (您可以通过在查找换位表中的值后实际执行搜索来验证这一点,以查看您从搜索中获得的值是否与在表中获得的值相同。)
  • 关于python - 如何为connect 4实现换位表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62398278/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com