只需五步!手把手教你搭建国际象棋机器人腾讯云开发者社区

在编程之前,我们先了解一些基本的概念,来帮助我们创建一个简单的象棋AI机器人:移动生成、棋局评估、最大最小搜索和α-β剪枝搜索过程这四个概念。

在每个步骤中,我们将会在已有的程序上加入上述经典的象棋编程优化技术,来进行改进我们的象棋机器人。同时我会向大家演示各种优化参数是怎么影响算法的下棋风格和计算速度的。

作者Lauri Hartikka提到:“我已经无法战胜我创造出来的象棋机器人。我觉得导致这个结果的原因不是因为我下棋技术太烂,就是算法已经足够优秀。”

图1:对移动生成功能进行可视化:起始位置作为输入,输出是该棋局的所有可能移动.

使用这些库将有助于我们专注于最核心的任务:创建找到最佳走法的算法。接下来先创建一个函数,该函数能从棋局中所有可能的移动中返回一个随机移动的结果。

虽然加入这个函数的机器人还不是一个高超的象棋玩家,但这是一个很好的开始,因为我们已经可以与其进行对战。

图2:黑色方块代表下一步所有的合法移动

现在我们来试试看一下在确定位置上双方的哪个棋子具有更高的评估强度。实现这一点的最简单的方法是使用下表来计算棋局中的相对强度。

通过这个评估表,我们可以创建一个算法,能够让棋子选择具有最高评估分数的移动方向。

目前已经有了不错的进展,因为我们的算法现在已经可以尽可能吃掉对方的棋子。

图3:借助简单的评估功能,双方进行游戏

接下来,我们要利用Minimax(极大极小)搜索树算法,它可以从多种选择中确定最佳方法。

在该算法中,能将递归树的所有可能移动探索到给定深度,并且在递归树的子节点处评估该位置的好坏。

之后,我们将子节点的最小值或最大值返回给父节点,父节点通过下步将移动白棋还是黑棋来选择合适值。也就是说,我们试图尽可能地减少或最大限度地提高每一级的评估值。

图4:在人为选择位置时,可视化极大极小算法。白棋的最佳走法是b2-c3,此时能够达到评估为-50的位置

通过加入极大极小算法,我们的算法了解象棋的基本策略。

评估极大极小算法的有效性,在很大程度上取决于计算性能可以实现的搜索深度。我们接下来的工作是通过优化算法来加大搜索深度。

α-β剪枝搜索是极小极大算法的一种优化方法,允许我们忽略搜索树中的一些分支,这有助于我们在使用相同的计算资源时更深入地评估极大极小搜索树。

α-β剪枝搜索的原理是是如果我们找到比已经发现的动作更糟糕的情况,那我们可以停止评估搜索树那一部分的情况。

α-β剪枝搜索不会影响极大极小算法的结果,而是大大加速其计算过程。

如果我们碰巧刚开始就得到了产生最优操作的路径,那么α-β剪枝算法也更有效。

使用α-β剪枝搜索,我们可以显着提升极大极小算法的计算速度,如下例所示:

图7:如果我们要执行深度为4的Minmax算法,使用α-β剪枝的优化算法和正常算法所需要评估的位置数

初始的评估功能非常简单,因为我们只能计算在棋局上发现的信息。为了改善这一点,我们将棋子的位置也作为评估的一个因素。在实际情况中,棋盘中心的棋子比棋盘边缘的棋子更好,因为它有更多的选择,显得更加活跃。

我们将使用在维基象棋编程中提出的一种棋子价值表。

图8:对棋子价值表进行可视化,我们可以根据棋子的位置减少或增加评估值。

通过如上改进,我们已经获得了象棋机器人,至少已经能够与业余玩家进行对战了。

图9:加上评估方法和α-β剪枝优化的极大极小算法表现,设置搜索深度为3。

对于一个简单的象棋机器人,它的优点是不会产生愚蠢的错误操作。但是它仍然缺乏对象棋的战略性理解。

通过上面介绍的方法,我们能够创建一个象棋机器人,可以和你一起玩象棋。最终的实现代码只有200行,这意味着这个算法的基本概念实现起来非常简单,你可以在GitHub上查看象棋机器人的最终版本。

我们还可以对这个算法进行深入的改进,例如移动排序、更快的移动生成和对残局的具体评估等。如果您想了解更多关于象棋机器人的信息,请查看维基上象棋项目程序,去探索更多关于搜索算法的优化程序。

THE END
0.为何宗教激进派容不下国际象棋?如果你因此认为国际象棋蕴含着基督教文化,那就大错特错了。因为只有在欧洲最西部的地区,这枚棋才和基督教主教有些联系。在冰岛语、法罗语、爱尔兰语和葡萄牙语中,它被叫做“主教棋”。土耳其人和俄罗斯人则称其为“象”(slon),拉丁语系采用的名称来源于阿拉伯语中表示“象”的词(al-fil,西班牙语称其为alfil,jvzq<84gpv4djrscfcom{7hqo0io1;538/641:51eqtugwya45>24<>40jzn
1.国际象棋教程国际象棋布局开局布局原理中级孙旗男讲解教程孙旗男 孙旗男,原山西省队职业棋手,曾任国家女队助理教练、中国国际象棋高水平后备人才培训中心(青岛)主教练、国少队主教练。现在中国棋院任职,中国国际象棋协会主办《国际象棋》杂志责任主编。多年来从事国际象棋教育工作,具有丰富的教学授课经验,培养出许多优秀的棋手。 共62集 26.7万人观看 1国际象棋 布局 开局 布jvzquC41yy}/3?80eqs0qyjpeq{sun4fgvgjn8{kfgu.RQOQTKLOE6NJLQXK8Y7
2.python国际象棋ai程序每一步中我们都会对经过时间检验的国际象棋程序进行改进,我会展示不同算法风格所产生的影响。你也可以在GitHub上看到最终的 AI 算法。 步骤1:移动生成和棋盘可视化 使用chess.js 库来生成移动规则,使用 chessboard.js 来可视化棋盘。移动生成库实现了所有国际象棋的规则,对于任意给定的棋盘状态我们都可以计算出下一步jvzquC41dnuh0lxfp0tfv8|gkzooa<>78;=658ftvkimg8igvcomu8635;=46>8
3.python国际象棋ai程序[译]手把手教你创建国际象棋AI本文逐步介绍了如何创建一个简单的国际象棋AI,包括棋子移动、棋盘评估、极小化极大算法及Alpha-beta剪枝等关键技术。 我们先来了解一下,在我们创建一个简单的国际象棋AI过程中所会接触到的一些基本概念: 棋子的移动 绘制棋盘 Minimax(极小化极大算法) Alpha-beta 剪枝 jvzquC41dnuh0lxfp0tfv8|gkzooa<>8428858ftvkimg8igvcomu86325929>8