Answers:
也许您可以看看TalkChess,这是一个专门讨论国际象棋的论坛。我发现了一个对您来说可能有趣的新话题:30年的进步,每隔7-8年就有4个间隔
(以前的)顶级引擎之间的一些匹配在同一硬件上进行。该测试表明,最近几年(2002-2017年),收益主要来自软件改进。在测试中,Stockfish(2017)对RobboLito(2009)的得分高达94/100,而RobboLito则以92/100的比例压碎了Shredder(2002)。
重要说明:由于较旧的引擎未实现并行计算,因此该测试是在单个内核上进行的。结果,无法测量并行机的硬件增益。另一方面,您可能会争辩说并行计算也是一种软件收益:为搜索算法设计和实现高效且扩展良好的并行化并不容易。
该鱼干引擎是开源的,所以算法改进是公开的。可以在https://chessprogramming.wikispaces.com上找到很多文档
我不能说用于深蓝的算法,但是我将尝试解释国际象棋编程中的改进。速度是最大的进步。Deep Blue使用了多处理器专用计算机,因此实际上不可能进行比较。
https://chessprogramming.wikispaces.com/是一个很好的来源,但是很难浏览。
有3个主要功能进行了改进,以改进国际象棋引擎:评估,移动生成和搜索功能。
评估是最难编程的,因为规则有很多例外。随着硬盘空间越来越便宜,eval函数允许评估更多异常。
移动生成以及进行和取消移动都会消耗大量内存,因为必须执行多次。最常见的生成功能是邮箱,位板,0x88、8x8,扩展板(10x10、10x12)和预定的移动数组/表(*我使用索引移动表)。当前的观点是,位板速度更快,而使用魔术位板可以使速度提高多达30%。罗伯特·凯悦(Robert Hyatt)教授,粗糙的国际象棋引擎的创造者,声称速度没有明显提高。
早期搜索功能是原始的最小-最大功能。基本上是您试图最大化移动侧的得分并最小化对手的得分。Alpha-Beta是第一个改进。他们减少了换位表,截止值,期望窗口和历史启发式搜索的移动次数。这些是深度优先搜索。还有一个内部迭代加深搜索,它尝试搜索“最佳”动作,这是最深的希望,即搜索其他动作将被证明是徒劳的。
注意:我的索引表。GNUChess和Jester都使用索引数组来生成其移动。他们通过用可能的移动填充数组来初始化引擎。拿这六个部分,计算每个广场上可用的合法移动。因此,每个片段都有一个[64] [8]数组。我采纳了这个想法并将其压缩为两个索引和一个表。该表包含一个值,该值指示是否可以进行16次移动,一个索引保存移动的偏移量,另一个索引保存掩码。
offset [] = {-8,-1、1、8,-9,-7、7、9,-17,-15,-10,-6、6、10、15、17};
mask [] = {1,2,4,8,16,32,64,128,256,...};
然后,生成滑动动作就像在其相对于移动表的允许偏移量中查找其蒙版的有效性一样容易。
Every time that a new eval concept in included into a chess engine, more code, and therefore more HD space is required.
评估板功能通常设计为适合CPU缓存。CPU缓存<< RAM << HD。高清尺寸没有区别。
算法变得更好了吗?
显然,是的。
还是这些改进主要是由于更快的硬件和软件而使相同算法的运行速度更快?
次要要点:如果算法变得更好,那么软件就变得更好,因此没有“或”。
摩尔定律告诉我们,处理器速度大约每18个月将增加一倍。这意味着它在20年中大约翻了13倍。这使得现代处理器的速度提高了8000倍左右。因此,毫无疑问,引擎性能的最大提高是由于硬件速度更快。
如果是前者,这些算法改进是否公开?
如果是这样,有哪些改进?我在哪里可以读到它们?
好吧,不是前者,而是后者。不过,这些改进大部分是开源的,可以通过下载Stockfish等引擎的源代码免费看到。也许也应该给一般的Stockfish下载链接,因为当版本9发布时,特定的源代码链接可能会过期。
That means it has doubled roughly 13 times in 20 years.
我认为您在引用摩尔定律。它没有说明处理器速度。实际上,它已经有一段时间没有翻倍了。
hardware and software
我的意思是在算法的实现中使用软件(ASM与C ++),但是我可以看到它的混乱之处。固定。
这全都与算法有关。
像人类棋手一样,这是当时世界上功能最强大的计算机之一。这种蛮力计算方法使Deep Blue可以向前看六到八步。在一场激烈的比赛中,这台机器最终以3 1/2场比赛击败卡斯帕罗夫(2 1/2)。
六年后,卡斯帕罗夫参加了另一场人与机器竞赛。这次他与Deep Blue的继任者Deep Junior对抗。结果是在三局比赛中全部抽签。最大的不同是,Deep Junior在具有Deep Blue计算能力约百分之一的计算机上运行。下象棋的算法已经改进到可以以几乎一百倍的计算能力实现几乎相同的结果。
免责声明:不是专家。
算法变得更好,并且在1995年(记住Deep Blue是1999年)上运行的当今最好的引擎将轻松击败Kasparov。据我了解,算法有两个方面:
搜索。例如,如果我将你的皇后与我的皇后一起使用,那么人类的对手将自动在重新占领时注视第一。但是,对于计算机,它将评估对QxQ的所有可能响应。几乎所有时间都在浪费处理能力。好的搜索算法可以减少所有这些“分支”,因为它们还是无关紧要的。
标准的搜索算法是alpha-beta修剪,最早在国际象棋计算机中使用。我不知道Deep Blue是否使用alpha-beta修剪,但是现代引擎没有使用。结果,他们的搜索是“不安全的”-例如,他们可能会错过夺回女王的某些举动会赢得比赛。但是,这种情况很少发生,因此他们将深度推高了。(“深度”是一个技术术语,表示引擎搜索的深度,因此,在其他所有条件相同的情况下,搜索深度为30的引擎可能会击败仅搜索深度为20的引擎)。
评估。这是引擎代码的另一个分支。给定特定位置,白色,黑色或同等颜色是否更好?这可能涉及各种功能,例如
今天的引擎评估位置比深蓝更好。
至于算法是否公开,Stockfish目前是世界上最强大的引擎,并且是开源的。您可以自己从Github下载代码。