Artificial intelligence 如何在游戏中使用转置表来提高性能?
我在游戏中使用alpha-beta剪枝实现了迭代深化,还添加了一个换位表来存储已经评估过的板 现在,我正在做以下工作: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中存储的值来加快我的游戏速度?我将用国际象棋来解释
因此,我不明白我应该如何重新使用TT中存储的值来加快我的游戏速度?我将用国际象棋来解释这个答案,当然这个稍加修改的推理也可以应用于其他棋盘游戏 棋盘游戏程序中的换位表是缓存,它将已评估的棋盘存储在缓存中。最好有一个易于处理的缓存值,它可以唯一地标识一个位置,如:
WKe5Qd6Pg2h3h4 BKa8Qa7
因此,如果到达某个位置,则检查是否存在缓存键,如果存在,则重用其计算。每当您访问深度为0的位置时,在正确计算该位置后,可以缓存该位置。因此,如果进行了一些移动,在子变体中,您或多或少可以跳过评估。例如,让我们考虑在开始位置怀特移动1的例子。Nf3和布莱克回答1。。。Nf6。在两个层的结果位置之后,该位置被缓存,即white的2。Ng1需要评估,因为它还没有被评估或缓存,但Black可能的2。。。Ng8不需要评估,因为它会导致起始位置
当然,您可以进行更积极的缓存,并将位置存储到depth=1甚至更多
您需要确保不会错过游戏的一些战略细节。在下棋的情况下,你需要记住:
- 50步规则的效果
- 三次重复抽签
- 谁在行动
- 在过去/现在,一些特殊的动作,如投掷或顺道而行是否可能,而在另一种情况下是否可能