我在游戏中实现了具有alpha-beta剪枝的迭代加深,并添加了置换表来存储已经评估过的棋盘。
现在,我的做法如下:
- 当执行迭代加深时,在深度为0时,它会评估并将所有位置及其得分存储在置换表中。
- 现在,当深度为1时重新运行。如果在置换表中存在该棋盘,则只需返回其值即可。因为在深度为0的情况下,所有的值都已经在置换表中。
如果在达到深度限制(例如深度=MAX_DEPTH)时从置换表返回值,则大的子树将永远不会被剪枝。
所以,我不明白如何重复使用存储在置换表中的值来加快我的游戏?
我在游戏中实现了具有alpha-beta剪枝的迭代加深,并添加了置换表来存储已经评估过的棋盘。
现在,我的做法如下:
如果在达到深度限制(例如深度=MAX_DEPTH)时从置换表返回值,则大的子树将永远不会被剪枝。
所以,我不明白如何重复使用存储在置换表中的值来加快我的游戏?
我将在本回答中使用象棋来解释修辞,当然,稍加修改后这种推理也可以应用于其他棋类游戏。
棋盘游戏程序中的置换表是缓存,它存储已经评估过的棋盘。拥有一个易于处理的缓存值,可以唯一地标识一个位置,这非常好,例如:
WKe5Qd6Pg2h3h4 BKa8Qa7