Python国际象棋,用python开发象棋

  Python国际象棋,用python开发象棋

  糖豆的精心编制

  量子比特报告微信官方账号QbitAI

  要创建一个简单的象棋AI,在开始编程之前,我们需要知道四个基本概念:移动生成、象棋评估、最大最小搜索和 -剪枝搜索过程。

  在每一步中,我们都将经典的象棋程序优化技术添加到现有的程序中,以改进我们的象棋机器人。同时,我将向大家展示各种优化参数是如何影响算法的下棋风格和计算速度的。

  作者Lauri Hartikka提到:“我打不过我创造的象棋机器人。我觉得造成这个结果的原因不是我的棋艺太差,就是算法足够好。”

  步骤1:移动生成和象棋可视化

  我们将使用chess.js库实现移动生成功能,使用棋盘. js实现棋局可视化。Chess.js库基本实现了国际象棋的所有规则。基于这个应用程序库,我们可以计算给定棋局状态下的所有合法操作。

  图1:可视化动作生成的功能:以起始位置为输入,输出是游戏所有可能的动作。

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

  虽然加入这个功能的机器人还不是一个高超的棋手,但这是一个好的开始,因为我们已经可以和它对弈了。

  图2:黑点代表下一步的所有合法运动。

  第二步:位置评估

  现在我们来试试看在某个位置两边哪一块的评价强度更高。实现这一点的最简单的方法是使用下表来计算象棋比赛中的相对实力。

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

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

  图3:借助简单的评价函数,双方进行博弈。

  第三步:用极大极小值搜索树

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

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

  之后,我们将子节点的最小值或最大值返回给父节点,父节点通过它在下一步是否会移动白色或黑色来选择合适的值。也就是说,我们试图最小化或最大化每一级的评价值。

  图4:人工选择位置时的可视化minimax算法。白棋最好的棋步是b2-c3,可以到-50的位置。

  通过加入极大极小算法,我们的算法可以理解国际象棋的基本策略。

  图5:深度级别为2的极大极小算法

  评价极大极小算法的有效性很大程度上取决于计算性能所能达到的搜索深度。我们下一步的工作是通过优化算法来增加搜索深度。

  步骤4:搜索-剪枝

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

  -剪枝搜索的原理是,如果我们发现比已经发现的动作更差的东西,那么我们可以停止评估搜索树的那部分。

  -剪枝搜索不会影响极大极小算法的结果,但会大大加快其计算过程。

  如果我们恰好在一开始就得到最优的操作路径,那么 -剪枝算法更有效。

  图6:我们不需要关注使用-剪枝搜索删除的分支,以及是否按照指定的顺序访问搜索树。

  使用-剪枝搜索,可以显著提高minimax算法的计算速度,如下例所示:

  图7:如果我们要执行深度为4的最小最大算法,使用 -剪枝的优化算法和普通算法要评估的位置数。

  第五步:完善评价函数。

  的初始评价函数非常简单,因为我们只能计算在棋局中找到的信息。为了改善这一点,我们还把棋子的位置作为评价的一个因素。现实中棋盘中央的棋子比棋盘边缘的棋子好,因为它的选择更多,显得更主动。

  我们将使用国际象棋编程中提出的棋子值表。

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

  通过以上改进,我们获得了象棋机器人,至少可以和业余棋手一较高下。

  图9:添加-剪枝优化的评价方法和minimax算法性能,设置搜索深度为3。

  结论

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

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

  我们可以进一步改进这个算法,比如移动排序,更快的移动生成和残局的具体评价。如果你想了解更多关于象棋机器人的知识,请查看Wiki上的象棋项目计划,探索更多关于搜索算法的优化计划。今天的AI还有哪些值得关注的地方?在QbitAI微信官方账号对话界面回复“今日”即可查看我们全网收集的AI行业及研究动态。笔芯~

  想和更多的朋友一起学习进步,欢迎添加量子比特助手的微信:qbitbot,注明“加入门群”。如果你是一个努力学习的好学生,助理会带你进组。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: