自深蓝色以来,引擎如何改进?


17

自1997年Deep Blue击败Kasparov以来,计算机国际象棋引擎已经变得更好。

算法是不是变得更好了,还是因为主要由于更快的硬件等而使相同的算法运行得更快而带来的改进?

如果是前者,这些算法改进是否公开?

如果是这样,有哪些改进?我在哪里可以读到它们?



怎么样 ?戏剧性地。
Evargalo

Answers:


8

也许您可以看看TalkChess,这是一个专门讨论国际象棋的论坛。我发现了一个对您来说可能有趣的新话题:30年的进步,每隔7-8年就有4个间隔

(以前的)顶级引擎之间的一些匹配在同一硬件上进行。该测试表明,最近几年(2002-2017年),收益主要来自软件改进。在测试中,Stockfish(2017)对RobboLito(2009)的得分高达94/100,而RobboLito则以92/100的比例压碎了Shredder(2002)。

重要说明:由于较旧的引擎未实现并行计算,因此该测试是在单个内核上进行的。结果,无法测量并行机的硬件增益。另一方面,您可能会争辩说并行计算也是一种软件收益:为搜索算法设计和实现高效且扩展良好的并行化并不容易。

鱼干引擎是开源的,所以算法改进是公开的。可以在https://chessprogramming.wikispaces.com上找到很多文档


这回答了他的主张。下次尝试回答该问题。
弗雷德·奈特

1
好吧,我相信我确实回答了这个问题:增益主要来自算法改进。此外,我展示了支持此主张的数据(请参阅链接),并指出了可能的缺点(未测量并行化)。
Maxwell86

3

我不能说用于深蓝的算法,但是我将尝试解释国际象棋编程中的改进。速度是最大的进步。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,...};

然后,生成滑动动作就像在其相对于移动表的允许偏移量中查找其蒙版的有效性一样容易。


7
我试着不回答任何问题,但这只是.... Alpha-beta和位板是在Deep Blue发明之前就发明的。我也非常确定,评估板不会在任何理智的引擎中访问HD(延迟是巨大的)。第四,我非常怀疑RAM的大小会对您的常规alpha-beta搜索实现产生任何实际的影响。
MaxB

您能否为正在讨论的某些概念添加一些超链接?作为对这个概念感兴趣但不熟悉术语的人,很难遵循,因为我不知道什么是位板或Crafty Chess引擎。
雷霆堡

我以为我很明确,因为我没有将其与Deep Blue相提并论,但是我给出了一个简短的历史。我指的硬盘是程序本身。每次将新的评估概念包含在象棋引擎中时,都需要更多代码,因此需要更多HD空间。
弗雷德·奈特

@Thunderforge,我提供的一个链接说明了您可能想要处理国际象棋编程的每个方面,但是我承认这很难导航。我通过阅读其他人的源代码中学到了知识,但是最受好评的是凯悦博士的狡猾引擎。由于篇幅所限以及平台和编译器之间的差异,我选择不太全面。如果在阅读Wiki棋牌页面后仍然感到困惑,请提出问题,我相信很多人都会提供更好的答案。
Fred Knight

1
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。高清尺寸没有区别。
MaxB

2

算法变得更好了吗?

显然,是的。

还是这些改进主要是由于更快的硬件和软件而使相同算法的运行速度更快?

次要要点:如果算法变得更好,那么软件就变得更好,因此没有“或”。

摩尔定律告诉我们,处理器速度大约每18个月将增加一倍。这意味着它在20年中大约翻了13倍。这使得现代处理器的速度提高了8000倍左右。因此,毫无疑问,引擎性能的最大提高是由于硬件速度更快。

如果是前者,这些算法改进是否公开?

如果是这样,有哪些改进?我在哪里可以读到它们?

好吧,不是前者,而是后者。不过,这些改进大部分是开源的,可以通过下载Stockfish等引擎的源代码免费看到。也许也应该给一般的Stockfish下载链接,因为当版本9发布时,特定的源代码链接可能会过期。


2
That means it has doubled roughly 13 times in 20 years.我认为您在引用摩尔定律。它没有说明处理器速度。实际上,它已经有一段时间没有翻倍了。
MaxB

hardware and software我的意思是在算法的实现中使用软件(ASM与C ++),但是我可以看到它的混乱之处。固定。
MaxB

1
他的摩尔定律是正确的,只是他添加了“未来十年”一词。那应该是在1975年,他是正确的。
弗雷德·奈特

-1,因为答案不正确-在相同的硬件上,当前的引擎仍然压倒以前的顶级引擎。
魅力

0

这全都与算法有关。

像人类棋手一样,这是当时世界上功能最强大的计算机之一。这种蛮力计算方法使Deep Blue可以向前看六到八步。在一场激烈的比赛中,这台机器最终以3 1/2场比赛击败卡斯帕罗夫(2 1/2)。

六年后,卡斯帕罗夫参加了另一场人与机器竞赛。这次他与Deep Blue的继任者Deep Junior对抗。结果是在三局比赛中全部抽签。最大的不同是,Deep Junior在具有Deep Blue计算能力约百分之一的计算机上运行。下象棋的算法已经改进到可以以几乎一百倍的计算能力实现几乎相同的结果。


4
欢迎来到国际象棋!您将答案的主要部分写成是引号;您能提供一个来源吗?
Glorfindel

0

免责声明:不是专家。

算法变得更好,并且在1995年(记住Deep Blue是1999年)上运行的当今最好的引擎将轻松击败Kasparov。据我了解,算法有两个方面:

搜索。例如,如果我将你的皇后与我的皇后一起使用,那么人类的对手将自动在重新占领时注视第一。但是,对于计算机,它将评估对QxQ的所有可能响应。几乎所有时间都在浪费处理能力。好的搜索算法可以减少所有这些“分支”,因为它们还是无关紧要的。

标准的搜索算法是alpha-beta修剪,最早在国际象棋计算机中使用。我不知道Deep Blue是否使用alpha-beta修剪,但是现代引擎没有使用。结果,他们的搜索是“不安全的”-例如,他们可能会错过夺回女王的某些举动会赢得比赛。但是,这种情况很少发生,因此他们将深度推高了。(“深度”是一个技术术语,表示引擎搜索的深度,因此,在其他所有条件相同的情况下,搜索深度为30的引擎可能会击败仅搜索深度为20的引擎)。

评估。这是引擎代码的另一个分支。给定特定位置,白色,黑色或同等颜色是否更好?这可能涉及各种功能,例如

  • 如果一侧有额外的材料/空间,请给它额外的评估。
  • 如果白方有被典当支持的高级骑士,则给予白方eval加成。
  • 如果布莱克的国王陷入僵局,请给白授予评估费用。
  • 如果白人车队排名第7,则给予白人eval奖励。
  • 如果是结束游戏(并且有算法确定位置是否为结束游戏)并且双方的主教颜色相反,则对评估施加惩罚(即将其推向0.00)。

今天的引擎评估位置比深蓝更好。

至于算法是否公开,Stockfish目前是世界上最强大的引擎,并且是开源的。您可以自己从Github下载代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.