Artificial intelligence 如何在游戏中使用转置表来提高性能?

Artificial intelligence 如何在游戏中使用转置表来提高性能?,artificial-intelligence,hashtable,minimax,alpha-beta-pruning,iterative-deepening,Artificial Intelligence,Hashtable,Minimax,Alpha Beta Pruning,Iterative Deepening,我在游戏中使用alpha-beta剪枝实现了迭代深化,还添加了一个换位表来存储已经评估过的板 现在,我正在做以下工作: 当运行迭代深化时,在depth=0时,它评估并存储所有位置及其在TT中的分数 现在,当它以深度=1重新运行时。如果TT中存在板,我只返回板的值。这将在深度为0时停止算法,因为深度为0的板的所有值都已在TT中 如果我在达到深度限制时从TT返回值,例如深度=最大深度,那么大的子树将永远不会被砍伐 因此,我不明白我应该如何重新使用TT中存储的值来加快我的游戏速度?我将用国际象棋来解释

我在游戏中使用alpha-beta剪枝实现了迭代深化,还添加了一个换位表来存储已经评估过的板

现在,我正在做以下工作:

  • 当运行迭代深化时,在depth=0时,它评估并存储所有位置及其在TT中的分数
  • 现在,当它以深度=1重新运行时。如果TT中存在板,我只返回板的值。这将在深度为0时停止算法,因为深度为0的板的所有值都已在TT中
  • 如果我在达到深度限制时从TT返回值,例如深度=最大深度,那么大的子树将永远不会被砍伐


    因此,我不明白我应该如何重新使用TT中存储的值来加快我的游戏速度?

    我将用国际象棋来解释这个答案,当然这个稍加修改的推理也可以应用于其他棋盘游戏

    棋盘游戏程序中的换位表是缓存,它将已评估的棋盘存储在缓存中。最好有一个易于处理的缓存值,它可以唯一地标识一个位置,如:

    WKe5Qd6Pg2h3h4 BKa8Qa7
    
    因此,如果到达某个位置,则检查是否存在缓存键,如果存在,则重用其计算。每当您访问深度为0的位置时,在正确计算该位置后,可以缓存该位置。因此,如果进行了一些移动,在子变体中,您或多或少可以跳过评估。例如,让我们考虑在开始位置怀特移动1的例子。Nf3和布莱克回答1。。。Nf6。在两个层的结果位置之后,该位置被缓存,即white的2。Ng1需要评估,因为它还没有被评估或缓存,但Black可能的2。。。Ng8不需要评估,因为它会导致起始位置

    当然,您可以进行更积极的缓存,并将位置存储到depth=1甚至更多

    您需要确保不会错过游戏的一些战略细节。在下棋的情况下,你需要记住:

    • 50步规则的效果
    • 三次重复抽签
    • 谁在行动
    • 在过去/现在,一些特殊的动作,如投掷或顺道而行是否可能,而在另一种情况下是否可能
    因此,您可能希望在算法中添加一些进一步的细微差别,但要回答最初的问题:游戏中已经出现的位置或在变化表中处于非常高的位置可以被缓存,并且或多或少会被忽略(在大多数情况下,越是意味着上述细微差别越小)