【问题标题】:Statistical approach to chess?国际象棋的统计方法?
【发布时间】:2011-02-12 15:12:15
【问题描述】:

阅读Google solves the translation problem 如何让我思考。是否有可能通过分析数百万场比赛并在很大程度上(完全?)基于统计数据确定可能的最佳移动来构建强大的国际象棋引擎?有几个这样的国际象棋数据库(this 是一个有 450 万场比赛的数据库),其中一个可能会使用所涉及玩家的评分、游戏的年龄等因素来衡量相同(或镜像或反映)位置的移动(考虑到国际象棋理论的改进)等等。为什么这不会成为构建国际象棋引擎的可行方法?

【问题讨论】:

  • @Chinmay Kanchi:您已经在自己的评论中回答了自己的问题......由于组合爆炸,它不起作用。哎呀,拥有一个国际象棋游戏数据库,你可以让最好的扑克程序相互竞争并创造数十亿的游戏。那仍然是杯水车薪。那么你会如何分析它们呢?实时?或者,您将如何为每一个可能的棋盘提前存储移动?在哪里?无论是 CPU 还是内存,宇宙中都没有足够的原子来使您的方法可行。组合爆炸。
  • 谷歌翻译对于你不知道的语言的快速而肮脏的翻译很有用,但它的翻译通常是不合语法的。可能取决于它支持的特定语言。
  • 现在有了 Google 的 Alpha Zero,我想说他们已经更进了一步,通过自我对抗来创建统计材料。猜猜看,多亏了 Alpha Zero,现在首选的开头是英文开头 - C4。

标签: algorithm statistics machine-learning chess


【解决方案1】:

好吧,450 万场比赛仍然只占所有可能比赛的很小一部分(无穷小)。

虽然您会有大量的获胜和失败位置,但这会将问题减少到一组可用的参数。一个非常古老的问题,以神经网络作为标准方法。但是 NeuralNets 并没有赢得国际象棋比赛。

【讨论】:

  • 我当然意识到可能的国际象棋游戏数量是一个巨大的数字。然而,人类能够快速评估少量“好”动作而无需粗略地考虑明显“坏”的东西的能力,还是有一些话要说的。似乎统计引擎可以利用这一点。
  • @Chinmay,很少有人会研究接近一百万个游戏。但设计“统计引擎”是这里的一大挑战。它会寻找什么?
  • 我提倡一种“愚蠢”的方法。如果统计上显着数量的游戏(加权后)采取了这一举措,那么您也采取了这一举措。
  • @Chinmay:也许从分析这 450 万场比赛开始,看看在 n 步之后它们中有多少不同的位置,对于 n = 1(即有多少白色的开场步 - 可能所有 20 个都出现) 及以上。您可能会发现很快(大约 20 到 30 步之后),标准的开局就全部结束了,不再有任何具有统计意义的对局。
  • 另外,你的统计棋手可能在残局时很垃圾。它不会有任何材料继续超出某人辞职的地步,因此对手可能会称其虚张声势,并仅仅因为您的算法无法平仓而从“无法获胜”的位置击败它;-)跨度>
【解决方案2】:

我喜欢这个想法,但考虑到 自然语言中句子的上下文比棋盘位置的上下文需要的元素少得多 (即使这些句子的元素,即单词,可能来自比国际象棋游戏的元素更大的集合,即棋子、马、兵等)
此外,多语言语料库的可用性(各种性质、各种语言的文档)远远超过了数字形式的国际象棋游戏数量,在特别是考虑到国际象棋分析需要整个游戏,为了翻译目的,人们可以独立于文本的其余部分使用每个句子。

因此,除了游戏的开局部分(相对于其他游戏而言,棋盘位置没有太多机会发生分歧时)之外,国际象棋游戏的数量需要引入一些统计意义必须是天文数字......

必须运行,但我会回来具体估计可能的国际象棋游戏的数量(绝对的,以及似是而非游戏的子集),并且应该有效地证明 450 万游戏是一个相对较小的样本。

【讨论】:

  • 我已经看到根据五十步规则估计博弈树的复杂度约为 10^50。所以,是的,450 万场比赛只是沧海一粟。然而,这些动作中的大量几乎永远不会被播放,因为它们真的非常可怕,人类玩家甚至不会考虑的那种动作。当然,即使“不可怕”的移动次数仅占移动总数的 10%,你仍然会得到 ~10^49 次移动,这无济于事:D
【解决方案3】:

国际象棋中大约有 10123 个游戏树,在该数据库中您有大约 4.5 × 106。我们可以忽略博弈树,只考虑在 1043 到 1050 个合法状态之间的状态空间复杂度。让我们假设该数据库中的所有游戏都有唯一的移动,并且平均每场游戏有 1000 次移动,这给了我们 4.5 × 109 个状态。取估计的下限 1043 个可能状态,仅涵盖所有状态的 4.5 × 10-34。我不知道排除旋转或反射的独特板位置的总数是多少,但它只会减少两倍左右,这不是很有帮助。

您需要将更多领域知识添加到统计引擎中,并找出两个给定棋盘位置之间的相似程度,因为您找不到匹配项的概率为 1035棋盘位置(包括反射和旋转)。我认为这里最大的关键是找出两个给定的董事会职位是如何相似的。这将包含更多的领域知识,而不仅仅是简单的转换。

尽管如此,考虑到国际象棋的复杂性和人们对它的兴趣,我怀疑它之前已经尝试过,但这是一个值得进一步探索的好主意。

【讨论】:

  • “有 10^35 的几率找不到匹配的棋盘位置(包括反射和旋转)”。并不真地。国际象棋位置不是随机到达的,无论是在数据库中的游戏中还是在计算机正在玩的特定游戏中。
  • @Steve,你是说机会更高还是更低?游戏树并不总是按照数据库中存储的游戏展开。它会随着对手做出的每一个与数据库中已经存在的东西不一致的动作而呈指数增长。 1/10^35 是一个近似值,与实际值相差不远。
  • 这不是一个真正的概率问题。这取决于对手的打法,我们不能将其视为具有已知分布的随机变量。当优秀的棋手下机器时,他们会故意向他们认为机器较弱的位置下棋。所以在那种情况下,概率很快就会低得多。相反,只要对手遵循标准开局,数据库中的命中概率在相当多的移动中都是 1。
  • @Steve,当您编写统计引擎时,概率与它有关。我更感兴趣的是找到一个上限,当游戏确实超出少量移动时,它可以非常快速地分支。是的,第一步可以有 20 种下法,但第 10 步可以下 69352859712417 种方式。但是你是对的,当前三层分别有 20/400/8902 次可能的移动时,从数据库中击中一个的概率非常高,但每次移动都会成倍下降。
  • 我认为我们用“概率”这个词来理解不同的东西。游戏处于数据库中位置的概率不等于数据库中位置的数量除以游戏可以占据的位置数量。它是对方玩家策略的函数。由于我们没有提到任何关于玩家的信息,因此我们实际上不知道概率是多少。例如,如果玩家是我们机器的另一个副本,那么该位置在 DB 中的概率为 1,因为这是它可以玩的唯一方式。
【解决方案4】:

类似的事情已经完成:这是opening books 的基本概念。

由于游戏的性质,计算机 AI 一开始是出了名的糟糕,当时有很多可能性,而最终目标仍然遥遥领先。当战术可能性开始形成时,它开始向中间提高,并且可以在远超大多数人的能力的最终游戏中完美发挥。

为了帮助 AI 在开始时做出好的动作,许多引擎转而依赖打开书本:基本上是统计得出的动作流程图。分析了很多高评分玩家之间的游戏,推荐硬编码到“书”中,而位置还在“书”中,AI甚至没有“思考”,只是按照“书” "说。

有些人还可以记住开头的书(这主要是为什么 Fischer 发明了他的random chess 变体,这样记住开头的效率就低得多了)。部分由于这个原因,有时会在开始时做出非常规的举动,不是因为从统计上看它是历史上最好的举动,而是恰恰相反:它不是“已知”的位置,并且可以击败你的对手(人类或计算机)“出书”。

在光谱的另一端,有一个叫做endgame tablebase 的东西,它基本上是一个包含先前分析的残局位置的数据库。由于之前对位置进行了详尽的搜索,因此可以使用它来实现完美的比赛:给定任何位置,可以立即决定是赢、输还是平,以及实现/避免结果的最佳方法是什么。

不过,在国际象棋中,这样的事情只适用于开局和残局。中间游戏的复杂性使游戏变得有趣。如果一个人可以简单地通过查表来下棋,那么这盘棋就不会像现在这样刺激、有趣和深刻。

【讨论】:

  • Rybka 的开场书(正在出售!):rybkachess.com/index.php?auswahl=Rybka+3+book
  • openingbook 和 endgame-database 都不是真正的统计数据。我认为神经网络(任何类型的“学习”软件)更接近。
  • @Henk:Endgame 表库显然不是,但开局书本身的创建通常基于统计数据,不是吗?当然,书一出,电脑就盲从了。
  • 开本是专家分析的结果。您可以将人类学习称为统计过程,但这有点牵强。
  • @polygenelubricants:对我而言,国际象棋真正令人着迷的地方在于,它是一种具有严格定义规则的完美信息游戏(嗯,主要是;),最后,假设双方都处于最佳状态,只有三种可能的结果:a) 白总是赢,b) 黑总是赢,c) 既不是白也不是白黑胜(专家倾向于a) btw)。真正令人着迷的是:我们永远不会知道,宇宙中没有足够的原子让我们“解决”国际象棋:) 该游戏可证明是可解决的(并且已被证明)但是我们根本无法解决它:)
【解决方案5】:

这种通用策略已在多种游戏中进行了尝试。很多时候,人们通过让计算机自己玩来生成一个适当大的游戏数据库。一个快速的互联网搜索出现了http://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/chess-RL.pdf——它建立在之前在双陆棋中的工作之上。不过,在国际象棋中,蛮力前瞻对计算机非常有效——而且一般来说,当您可以混合所有先前已知的关于问题的信息时,统计数据会更有效,而不是试图从数据中重新学习.我注意到,在这个链接中,计算机在前瞻底部学习了相当于评估函数的内容,而不是整个过程。

【讨论】:

  • @mcdowella:有趣的是你提到了,我向 OP 评论说他可以采用最好的国际象棋程序并让它们自己玩来生成游戏,不知道它实际上用于其他游戏: )
【解决方案6】:

在计算机围棋中也有类似的东西——UCT method。它不使用一组已知的游戏,而是玩大量随机游戏,同时保持统计数据,这些移动会导致更高的获胜率。它从当前位置开始。

统计信息保存在移动树中(类似于极小极大中使用的移动树),并影响下一个随机游戏的选择 - 具有较高胜率的移动被更频繁地选择。树的生长也是由游戏引导的——通常每个游戏都会给树添加一片叶子。这导致有希望的路径被更深入地探索。

【讨论】:

    【解决方案7】:

    清迈,

    我知道这是一个老话题,但这是我最近一直在探索的话题。上面回答的大多数人并没有真正得到你的问题。我认为,是的,值得分析过去的许多游戏以制定建议的动作。它会涵盖所有可能的动作吗?不,显然不是。但它涵盖了真实游戏中的所有现实动作。人类(或其他计算机算法)必须开始玩非常奇怪的动作才能摆脱困境。所以,你不能建立一个总是赢的“完美”算法,但如果它赢了很多,比如> 2200 FIDE评级,那还不错吧?如果您将开局和残局结合起来,而不仅仅是依赖过去的移动分析,它会成为一个更好的引擎。

    可能的棋盘位置数量多到天文数字,但它是有限的,如果你删除愚蠢的位置,它会大大减少数量。是否可以在同一个文件中排列 4、5 或 6 个玩家棋子?是的,它会发生在真实的游戏中吗?对此感到怀疑。在对手“出局”的情况下,将基本的国际象棋大脑纳入您的逻辑。例如,Micro Max 只有几百行代码。如果对手愚蠢地阻止了你的行动,那么他们可能会被一个简单的引擎击败。

    【讨论】:

      【解决方案8】:

      我会说是的,它可以工作。还没有人真正成功地尝试过,但为什么不使用统计方法寻找“模式”。我不考虑存储整个棋盘,因为要存储的棋盘位置非常多,而只是寻找特定的模式。

      寻找模式

      一个典型的国际象棋程序评估并给予公认的模式奖励,如良好的防守棋子或开放的车线,另一方面,对双棋子等惩罚。

      此类模式可以在 64 位掩码中高效编程。您将拥有重要位置的位掩码和这些位置的预期片段的位掩码。每种模式都需要时间来匹配,因此找到能够产生影响的模式非常重要。这就是使用谷歌统计方法的地方。它可以运行“历史”游戏并寻找模式。在找到一个模式后,它必须计算该模式的权重,并查看改进后的评估是否超过了开销。

      我认为这将是一个相当大的尝试项目,甚至对于博士论文来说太多了。

      【讨论】:

        【解决方案9】:

        机器学习最近取得了长足的进步,尤其是在 Google 团队使用 ML 击败了围棋冠军之后。现在也用国际象棋证明了这一点。看看麻省理工科技评论中的文章,https://www.technologyreview.com/s/541276/deep-learning-machine-teaches-itself-chess-in-72-hours-plays-at-international-master/

        ML 的深度学习是对旧的神经网络自调整 AI 算法的增强。赖的示范并没有教机器国际象棋的基本规则,也没有关心比赛的结果。他只是给机器输入了一个庞大的游戏数据库,然后机器计算出其余的并以合理的“人类”水平进行游戏。

        我认为两大改进将是通过向它教授规则来提高它的效率,然后通过向它提供游戏的实际结果来引导它。 然后与当前的国际象棋冠军一起训练,像 Stockfish 这样的引擎! :-)

        【讨论】:

          【解决方案10】:

          类似于击败人类大师玩家的 GO 程序的深度学习算法可能是杀手。不过这需要很高的成本。然而,人们可能会使用从 GO 中学到的深度学习模式并应用 下棋。

          【讨论】:

            【解决方案11】:

            我没有看到提到的一件事是考虑数据库中游戏玩家的评分。一些具有良好分贝百分比的开局是由于更好的玩家倾向于获胜并且很少谈论开局的价值。

            事实上,我认为数据库只适用于一件事,那就是表明哪些动作很受欢迎。除此之外,您实际上是在扩展您对数据的解释,超出了它的价值。

            同样,计算机分析仅显示计算机与计算机游戏的最佳结果。人与人之间的游戏是不同的,你不应该过分依赖计算机分析。

            数据库和计算机分析都很有趣,但很容易被误解。当心。

            【讨论】:

              猜你喜欢
              • 2013-05-24
              • 2022-06-17
              • 1970-01-01
              • 1970-01-01
              • 2014-03-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多