我希望这不是太大的任意问题的,但我一直在寻找通过Faile和TSCP的源代码,我一直在玩他们反目成仇。据我可以看到引擎有很多共同点,但Faile每秒搜索约130万个节点,而TSCP每秒仅搜索300k个节点。为什么Faile比简单国际象棋程序(TSCP)快得多? (国际象棋引擎优化)
为faile的源代码可以在这里找到:http://faile.sourceforge.net/download.php。 TSCP源代码可以在这里找到:http://www.tckerrigan.com/Chess/TSCP。
通过查看它们之后,我看到一些相似之处:两者都使用阵列板表示(尽管Faile使用144尺寸板),两者都使用带有某种转置表的alpha beta搜索,两者都具有非常相似的评估函数。我能找到的主要区别是,Faile通过具有片段位置的阵列来使用板的冗余表示。这意味着当移动产生时(通过两个程序的非常相似的功能),Faile必须循环更少的坏块,同时维护这个数组的成本要少得多。
我的问题是:为什么会出现在这两个方案的速度4倍的差异?另外,为什么Faile会一直击败TSCP(我只是通过观察他们的动作估计大约200个ELO差异)?对于后者,这似乎是因为Faile正在深入寻找几层。
感谢您的回答。在此期间,我可以分享一些我研究过的研究。我认为我发现这也许是最大的原因,但你说的是一个很好的理由,虽然起初TSCP似乎使用换位表,但事实上并非如此。它会创建一个Zobrist键,但只能用于重复绘制。这意味着它可能会多次分析某些职位。根据我的阅读,转座表可以组成3-4倍的性能提升。 – 2012-03-17 23:51:25