Algorithm 计算机象棋树搜索的最新技术是什么?
我对速度只有几个百分点的微小优化不感兴趣。 我对alpha-beta搜索最重要的启发法感兴趣。以及评价功能最重要的组成部分 我对具有最大(改进/代码大小)比率的算法特别感兴趣。 (不是(改进/复杂性)) 谢谢 PS 杀手移动启发式是一个完美的例子-易于实现和强大的。Algorithm 计算机象棋树搜索的最新技术是什么?,algorithm,search,heuristics,chess,Algorithm,Search,Heuristics,Chess,我对速度只有几个百分点的微小优化不感兴趣。 我对alpha-beta搜索最重要的启发法感兴趣。以及评价功能最重要的组成部分 我对具有最大(改进/代码大小)比率的算法特别感兴趣。 (不是(改进/复杂性)) 谢谢 PS 杀手移动启发式是一个完美的例子-易于实现和强大的。 启发式数据库太复杂了。不确定您是否已经意识到它,但请查看-这是一个非常好的资源,几乎涵盖了现代国际象棋AI的各个方面。特别是关于您的问题,请参见主页上的搜索和评估部分(在原则主题下)。您可能还能够发现在列出的一些程序中使用的一些有趣
启发式数据库太复杂了。不确定您是否已经意识到它,但请查看-这是一个非常好的资源,几乎涵盖了现代国际象棋AI的各个方面。特别是关于您的问题,请参见主页上的搜索和评估部分(在原则主题下)。您可能还能够发现在列出的一些程序中使用的一些有趣的技术。如果你的问题仍然没有得到回答,我肯定会建议你去问,那里可能会有更多的专家来回答。(并不是说你在这里不一定会得到好的答案,只是它更可能出现在特定主题的专家论坛上)。尽管国际象棋编程文献中讨论了许多基于启发式的优化(我指的是增加树深度而不进行实际搜索的方法),但我认为大多数优化很少使用。原因是他们在理论上是优秀的绩效推动者,但在实践中却不是 有时候,这些试探法也会返回一个糟糕的(我的意思是不是最好的)动作 与我交谈过的人总是建议优化alpha-beta搜索并在代码中实现迭代深化,而不是尝试添加其他启发式方法 主要原因是计算机的处理能力在不断提高,研究[我想需要引用]表明,那些使用全部CPU时间将alpha-beta树强制到最大深度的程序总是比那些在一定的alpha-beta和一些启发式之间分配时间的程序运行得快, 尽管使用一些启发式方法来扩展树的深度可能弊大于利,但您可以在alpha-beta搜索算法中添加许多性能提升 我相信您已经意识到,为了让alpha-beta完全按照预期工作,您应该有一个移动排序机制(迭代深化)。迭代深化可以给你10%的性能提升 在alpha-beta中添加主变量search技术可能会额外提高10%
也可以尝试MTD(f)算法。它还可以提高引擎的性能。杀手级移动是代码小、移动顺序大为改进的好例子。大多数棋盘游戏AI算法都基于MinMax。目标是最小化他们的选择,同时最大化你的选择。尽管对于国际象棋来说,这是一个非常大且昂贵的运行时问题。为了帮助减少这种情况,您可以将minmax与以前玩过的游戏的数据库相结合。任何具有类似棋盘位置的游戏,以及根据您的颜色如何赢得布局而建立的模式,都可以用于“分析”下一步的移动方向 我对你所说的改进/代码大小有点困惑。你真的是指改进/运行时分析(大O(n)与O(n))?如果是这样,请咨询IBM和蓝色巨人,或微软的Parallels团队。在PDC上,我和一个家伙(他的名字我现在想不起来了)聊了聊,他用每个对手8个核心来演示麻将,他们赢得了游戏算法设计比赛的第一名(我也想不起他的名字) 我不认为有任何“罐装”的算法可以永远赢下国际象棋,并且速度非常快。这样做的方式是将以前玩过的每一个可能的游戏都索引到一个非常大的基于词典的数据库中,并预先缓存对每一个游戏的分析。这将是一个非常复杂的算法,在我看来,这将是一个非常糟糕的改进/复杂性问题。或者其中一个是对标准的一个很大的改进,前提是您的求值函数中没有非常详细的细节,并且假设您正在使用。该方法也很有用 评级最高的国际象棋项目显然已经放弃了MDT(f),转而在非PV节点上设置了零吸入窗口 它结合了正常的无用修剪和深度剃须,理论上是不可靠的,但在实践中非常有效
是另一种有用的技术。我列举了很多。一个没有提到的启发是
此外,Ed Schröder有一个很好的页面,解释了他在Rebel引擎中使用的一些技巧,以及每种技巧对速度/性能的贡献有多大:我可能有点离题,但“最先进的”国际象棋程序使用MPI,如深蓝,以获得巨大的并行能力
只是考虑并行处理在现代国际象棋
< P>中使用了具有的转置表。 它只需要很少的代码就可以实现[每次移动或不移动都需要一个XOR,在游戏树中递归之前需要一个if语句],而且它的好处非常好,特别是如果您已经在使用迭代深化,并且它非常可调整(使用更大的表、更小的表、替换策略等)