如果存储的状态包含很少的信息,minmax/negamax树的性能会显著更好吗



我正在开发一款国际象棋AI,并担心以后的表现
现在,我的negamax树包含了你所期望的每个游戏状态,尽管每个状态都以ASCII形式存储整个棋盘,以及适合度和方法
如果我把存储的信息修剪到,比如说,只修剪移动的部分,树会表现得更好吗?例如,不存储整个ASCII板,只存储"b2a2"(b2移动到a2)。谢谢

简单回答:是的,只存储移动应该更快。

长答案:

在每个位置,您都必须能够访问当前的板。通常,国际象棋引擎使用棋盘的数据结构,其中包括MakeMove和UnmakeMove操作。那么只存储移动就足够了。

从技术上讲,通过在内部保留一堆位置,可以避免实现真正的UnmakeMove操作。然后UnmakeMove会弹出堆栈。在一些较旧的体系结构上,这曾经非常快。如果我没有记错的话,克雷·布利茨在80年代就使用了这种技术。

今天,我所知道的所有引擎都实现了UnmakeMove操作,因为在今天的机器上,缓存效率非常重要。保持一堆位置会给缓存带来太大的压力,因此可以避免。

顺便说一句,正如你提到你使用的是棋盘的ASCII表示,我鼓励你阅读象棋编程维基上的棋盘表示文章。使用有效的董事会代表对业绩至关重要。

最新更新