artificial-intelligence - 关于换位表的困惑(国际象棋编程)

标签 artificial-intelligence chess

我目前正在使用换位表进行移动排序。使用迭代加深搜索,我存储上一次迭代的极小极大值,以便为下一次迭代排序移动。这一切都很好。

这是我的困惑:

如果我在我的换位表中找到某个位置,那么我使用之前计算的分数进行移动排序(来自迭代深化的前一次迭代)。但是,如果这个位置的分数被更新(在返回 minimax 之后),并且在另一个子树中再次找到该位置(迭代加深的相同迭代) - 我不想只将它用于移动排序......我应该能够返回该值,因为该值现在已经针对本次迭代进行了计算并且是绝对值。

这是我的问题:有两个换位表是标准的吗?一个用于上一次迭代,一个用于迭代深化的当前迭代。所以我会首先检查当前迭代的表,看看是否已经计算出极小极大值,然后简单地返回这个值。如果它不在这个表中,我会使用上一次迭代的表来进行移动排序。如果两者都不在,那么这是我在此搜索中从未见过的新位置。

这种思路是正确的,还是有更高效的方法?

最佳答案

通常,您不仅希望在表中存储最后找到的状态的极小极大值,而且还希望在将状态存储在表中时在迭代中使用的深度限制。这样,当您稍后在表中查找它时,您可以通过将存储在表条目中的深度限制与当前深度限制进行比较来判断它是在上一次迭代中还是在当前迭代中最后一次更新。如果它们相等,则您知道表条目是在当前迭代中最后更新的,并且您可以直接使用存储在表中的值而无需任何额外搜索

关于artificial-intelligence - 关于换位表的困惑(国际象棋编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41748419/

相关文章:

c# - 什么分类算法最适合对法律文档图片进行分类?

java - 需要java国际象棋程序的帮助

java - 计算最短马距离的算法(国际象棋)

C# - 使用哪种数据结构 - 以 180 位操作和存储国际象棋位置?

swift - 我可以在 API 的后端使用 Swift 吗?

machine-learning - 神经网络中的误差和准确度较低。

java - 连接 4 人工智能 Java

image-processing - 验证码图像字符分割

machine-learning - 半监督自动标记的实现建议

c++ - opengl中的棋盘