是否有不使用暴力搜索的国际象棋引擎?


10

我听说过的每个国际象棋引擎(包括我在Wikipedia上列出的所有引擎)都使用带有评估功能(最小最大算法)的蛮力搜索来决定其动作。

这不是大多数人采用通用模式识别来接近游戏的方式,因此原则上,计算机有可能做到这一点。

是否有不依赖于蛮力方法的棋机?


9
马格努斯·卡尔森。;)
2014年

3
关于那些说现代引擎不是修剪力的人,因为它们会修剪动作...我认为很明显,当一台国际象棋引擎评估数千万个位置时,它正在使用蛮力,而不管有人可能画出的眉毛在算法上。
托尼·恩尼斯

现代引擎可能会错过动作,例如。付出直到很深才付出的牺牲。我认为这可能是因为他们被修剪了,没有进行深入的检查。
2015年

Answers:


6

早在1980年代,人们就曾尝试用具有知识库的象棋引擎来编写象人一样的候选棋子,但它们并没有成功。问题在于,很难将人的模式匹配用语言表达出来,因此为知识库创建规则非常困难。

训练神经网络来选择候选动作似乎是一项很有前途的研究。这里这里可能是两篇相关的论文。(FWIW,这不是我的计算机科学领域)



3

我想在@Ian_Bush关于长颈鹿的答案中添加详细信息。

在@Ian_Bush的答案中,注意到长颈鹿不使用蛮力计算。这是不对的,因为长颈鹿仍然是alpha-beta(nega-max)引擎。与标准引擎的唯一区别是评估功能是通过深度学习自动调整的。因此,引擎将学习如何自己玩。

传统上,引擎编程人员会自动调整引擎中的参数。我自己做了很多。例如,您应该给主教和骑士多少重量?3.0?3.1?3.2?很难说。

长颈鹿以更聪明的方式解决了这个问题。它以一些初始值开始。引擎使用梯度上升算法来调整这些值。我们不必明确地编码女王应该在代码中的重量。这就是我们所说的“学习”。这并不意味着引擎无需搜索即可下棋。

编辑:长颈鹿模型树节点概率落于主要variatation。检查纸张以获取详细信息。我个人不相信这种方法,并且该论文几乎没有证据表明它会有用。


长颈鹿是否真的使用Stockfish eval作为目标?如果是这样,它本身并不会“学习国际象棋”,它只是在板载功能上使用nnet来学习Stockfish评估的近似值。
Fernando

我相信,@ Fernando Giraffe与Stockfish没有任何关系。
SmallChess

我将阅读整篇论文,但在第18页上它说:We evaluated board representations by training neural networks to predict the output of Stock- fish’s evaluation function in a supervised fashion, given 5 million positions as input, in the board representation under evaluation. 因此,这不是IMO自学的方法。
Fernando

1

如果您可以将基于启发式的搜索和评估方法称为蛮力,则这值得商de。如今,大多数顶级国际象棋引擎都遵循基于规则的方法来评估位置,并遵循基于规则的搜索功能来修剪动作。

实际上,不能保证选择“全局最佳”移动,但是这些移动足以达到目的。从这个意义上讲,大多数国际象棋引擎都在使用全局最优值的近似值,并且实际上已经过去了。

迄今为止,我们并没有很多采用不同方法的国际象棋引擎在高层获得成功,至少在廉价硬件上没有。


0

克劳德·香农(Claude Shannon)提出了两种创建象棋引擎的算法。“ A型”引擎检查所有可能的移动到某个有限深度,最小化树,然后以最小化树(又称蛮力)中的最高评估来播放移动。B型引擎会根据某些条件将搜索限制为仅可能移动的子集。我相信他更喜欢B型车。

1970年代制造的引擎(例如,Hitech,Kaissa)通常是纯蛮力的,没有修剪或只有alpha-beta,但是人们很快就看到修剪动作和线条树的价值不太可能证明是很强大的。几乎所有最新的引擎都会修剪明显较弱的树(alpha-beta),并且大多数引擎也使用各种类型的正向修剪(无效,后期移动减少,零位移动,剃须)。从这个意义上讲,不再有使用纯蛮力的引擎了。

在1970年代,Botvinnik正在研究一种被称为Pioneer的发动机,该发动机围绕攻击路径的概念进行了构想,而该路径本来应该以评估为指导。它从未达到可以玩完整象棋的地步。

在1990年代,克里斯·威廷顿(Chris Wittington)大力宣传使用更多的国际象棋知识,并创建了一个名为Chess System Tal的程序,该程序在当时非常强大。

卡斯帕罗夫(Kasparov),阿南德(Anand)和托德·罗姆斯塔德(Tord Romstad)都指出,与许多来自快速搜索的顶级引擎相比,希亚奇似乎对它进行了更为详尽的评估。


-2

基本上都是!

国际象棋引擎实际上仅在以下情况下使用蛮力:

  • 告诉
  • 正在分析职位(解决问题)
  • 寻找一个同伴(解决问题,而不是在对抗时,例如“在N中寻找同伴”这类问题)

否则,他们将进行“选择性搜索”,这将考虑给定电路板布局的所有可能动作,但仅探索其中的一些动作。如果引擎对两个动作的评分非常相似(超过一个强劲动作),或者找不到喜欢的动作(没有强劲动作),则它可能会切换为蛮力。

他们也倾向于蛮力作为最后一道防线,如果您看到了将死的机会,它可能会看到它的到来,并且它会想尽力而为,并且找不到出路(“地平线效应” “是引擎的问题,假设它要松开后座,并且被限制只能进深4局;如果它可以交易兵并把后座的损失推迟4步,它将认为它已经挽救了后座,在此过程中它将至少释放1个棋子(因为下一步将使视野更近),并且它在保存女王身上的重量可能意味着它会牺牲一些防御力,如果死亡超过地平线,则一无所获) 。

当选择性搜索不是很有用时,它也会蛮力。这就是为什么引擎只剩3件时需要更长的时间的原因。他们必须蛮力,因为选择算法无法对移动进行评分。选择算法在中游期间非常有用,因为它就像“哦,用棋子阻止他的[任何内容]并备份我的[任何内容]和[任何内容],而我的[防守内容]数量要少于攻击数量“-例如。

如果您在棋盘中间有一个国王,则有8个招式,选择性搜索将像“这些举动中没有一个有用,我不能说”。

您可以将选择性搜索分为两部分,从策略上讲它会尝试并发现战术动作,这将是战术性的,它将忽略所涉及的部分的重量,通常是因为皇后而不是任何策略的一部分是不值得的对它来说至关重要的不仅仅是一个棋子。这也是具有战略意义的,因为它将探索加强防御的动作,并在以后向潜在攻击开放。

然后,引擎会从您的角度以及来回地来回执行相同的操作。

所谓的换位表是它考虑过的事情的一个大清单,这样,如果最终考虑到已经完成的事情,它就知道并且不必重新评估它。

除非(选择:),否则它会以其他方式出现,或者希望进一步探索。例如,假设它发现您的...骗子对于即将来临的攻击至关重要,则引擎可能会在重新发现该行时对其进行重新评估。它先前对该车队施加的重量(例如5分,这对您来说有多重要)可能被低估了。

选择性搜索还可以回溯,例如说考虑到主教向右进入敌人领土,对于移动选择器来说,可以很容易地进行选择并不重要。说它发现战略上这是一个了不起的举动!然后,它可能会回溯以尝试找到一种保护该广场的方法,以便将该主教带到那里。假设它涉及一个棋子。

蛮力法会考虑涉及该棋子移动的行,并且(通过蛮力)主教也要移动,并且对董事会位置(选择性搜索本身)进行评级的内容也会说“这很好”,因此董事会率变化很大,两者都找到了。

使用蛮力法很难对职位进行评分,这就是为什么选择性搜索效果很好的原因。

从起始位置开始的强力攻击可能会发现著名的4合一涉及主教覆盖的女王f7,并且如果要给予很高的评价(我发现CHEKKMATE!JOB DONE!PLAY!),会错的,因为黑显然会反击。选择性搜索对职位排名(以供进一步评估),因为它看起来不错。这意味着在考虑您的回应时,可以决定对您有什么好处...。

因此,选择性搜索用来对事物进行评分的东西还是被蛮力使用了,因为“发现涉及这一动作的将死者”不足以说这一动作是好的。

因此,强力国际象棋引擎首先选择的动作(白色)是什么?

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.