求教:国际象棋吃子规则盘的问题

转载请注明出处,保留原文链接以及作者信息

首先让我们先看几个对开发简单国际象棋 AI 很有帮助的概念:

每一步中我们都会对经过时间检验的国际象棋程序进行改进,我会展示不同算法风格所产生的影响。你也可以在 上看到最终的 AI 算法。

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

使用 库来生成移动规则,使用 来可视化棋盘。移动生成库实现了所有国际象棋的规则,对于任意给定的棋盘状态我们都可以计算出下一步的合法的走棋方法。

(移动生成函数的可视化版本。起始位置作为输入,输出是所有可能的走法。)

使用这些库可以使我们专注于我们所感兴趣的任务:开发最佳下棋的算法。我们首先从创建以一个函数开始,在所有可能走法中返回一个随机的结果。

用这种方法,尽管它不是一个合格的棋手,但是起码我们可以和它玩起来了。

下面我们试着让它理解在一个确定的位置上怎么走比较好。实现这一功能最简单的方法是计算棋盘上棋子的相对强度大小,用下面的对照表。

通过评估函数,可以选择评估结果最佳的走法。

这样一来,一个切实的改善是,算法会吃掉它可以吃掉的棋子。

(黑子使用了简单评估算法,在这里可以看到:)

步骤 3:用极大极小算法搜索树

接下来我们来创建一个搜索树,通过它算法可以选择最佳走法,这里需要用到。

在这个算法中,会根据给定的树深度对递归树进行遍历,所要评估的状态就是树的叶子节点。

这一步完成以后我们把子节点中的最大或者最小值返回给父节点,这要依赖于白棋还是黑棋来走这一步(这就是说在树的每一层中都最大或者最小化输出)。

(给定状态的最大最小算法的可视化。白棋最好的走法是 b2-c3,因为可以保证获取一个状态评估值是 -50)

有了最大最小步骤以后,我们的算法可以下出一些国际象棋的基本策略了。

极大极小算法的效率取决于搜索树的深度,这就是我们后面步骤要优化的地方。

步骤 4:α-β 剪枝

剪枝是极大极小算法的一种优化方法,可以砍掉搜索树中的某些分支。这可以帮助我们用同样的资源的情况下,尽可能深地遍历极大极小搜索树。

α-β 剪枝的原理是在遍历搜索树的过程中发现可以终止遍历的状态,进而把整个分支剪掉的过程。这是因为发现下一步会导致比上一步更糟的结果,那么就不用再遍历下去了。

α-β 剪枝不影响极大极小算法的结果,仅仅是使极大极小算法运行的更快。假设遍历时恰巧第一个状态就是最佳走法,那么 α-β 剪枝会更加有效。

有了 α-β,极大极小算法如虎添翼,可以看下面的例子。

(本图是给定的起始棋盘状态,下面的数字是如果遍历深度是 4 的话,需要评估的状态总数。)

是基于 α-β 算法优化的国际象棋 AI。

步骤 5:改善评估函数

初始的评估函数非常简单,只是数了盘面上的数值而已。下面我们来改善它,把棋子的位置因素也考虑到评估结果里面去。例如在棋盘中间的马会比在棋盘边缘的马位置更好(因为它的可选择性更多,也更加活跃)。

我们来稍微调整一下棋盘上棋子状态的权重,这一图表是在中给出的。

(棋盘权值表的可视化。可以根据棋子的位置增加或者减少相应位置的权重)

通过上面的一系列改进,我们的算法可以下出像样的棋局了,起码开始像一个业余棋手这样了。

(改进后的评估函数加上搜索树深度设置成 3 的 α-β 算法,可以在这个地址看到:)

这个简单的国际象棋算法不会犯一些很傻的错误,但是它依然是缺乏策略理解的。

通过我所介绍的这种方法,可以开发一个国际象棋程序来实现一些基本的玩法。“AI 部分”(不包括移动生成)只有 200 行代码,也就是说这里只实现了基本的概念。你可以在 中获取最终版本的代码。

关于算法的一些更深层次的改善可以见下面链接:

如果你想要了解更多,查看,这里介绍了很多有用的资源,本文只是演示了国际象棋 AI 算法实现的基本步骤。

Happy Coding!如果本文对你有帮助,欢迎关注我的专栏-,定期发布高质量前端文章。


我最近正在写一本,对 React.js 感兴趣的童鞋,。

  象棋是人们十分喜欢的休闲益智类游戏,不管什么年龄段的人都喜欢玩。今天小编就给大家介绍一下象棋中的国际象棋,告诉大家一些国际象棋技巧,教给大家国际象棋开局方法,喜欢国际象棋的小伙伴一起看看吧。

  通常,国际象棋开局分为5大类,每大类下又分很多小类。

  开始走1e4e5。其中较为常用的有意大利开局,伊万斯开局、双马防御、匈牙利防御,马三开始,四个骑士开始,鲁伊洛佩兹,菲利普多尔的防守,彼得洛夫的防守,苏格兰开始,王翼开局开始。

  开始1E4,E5黑1应除了外的招数。有一个重要的或共同启动西西里,法国国防,卡罗%uB7康防御,Pilz的防守,阿廖欣防御,斯堪的纳维亚防御。

  开始走1.d4d5。其中重要或者常用的有后翼弃兵开局、拒后翼弃兵开局、接受后翼弃兵开局、斯拉夫防御。

  开始1.d4,黑方应以除1.d5以外的招数。其中重要或者常用的有尼姆佐-印度防御、新印度防御、古印度防御、别诺尼防御、格林菲尔德防御、荷兰防御。

  第一步既不是1.e4,也不是1.d4的开局。其中重要或者常用的有英国式开局、列蒂开局、伯德开局。

  国际象棋开局基本原理

  两位对局者坐到棋案旁,没有不想把布局走好的。在对局开始前,双方的棋子都位于棋盘的底线和次底线上,这时能够触动的除了八个兵就是两个马。什么是棋子的最有利位置呢?国际象棋棋盘中央d4、d5、e4、e5四个格子构成的正方形区域称为中心,也称“盘心”。而中心正是整个棋盘这一战场的制高点,在双方战略上尤其是开、中局时的必争之地。

  1、除了车以外,任何棋子在中心时能控制最多的格子,也即能发挥其最大威力。

  2、位于中心的棋子能够最迅速地调动到两翼去,也就是说具有最大的机动性。

  3、原始局面时中心是空着的,开局阶段战斗的主要舞台就在于此。

  因此,有位棋艺理论家甚至说:“开局者,中心的争夺战也。”正因为夺取中心是开局的第一个基本原则,所以白方第一步最为流行的是走1.e4(占领中心e4格,控制中心d5格)和1.d4(占领中心d4格,控制中心e5格),这两种走法都在不同时期风靡过,至今仍被广泛地采用。

  进入20世纪后,1.c4(控制d5格)和1.Nf3(控制d4、e5格)也成了开局“常客”。实际上,自1886年开创了世界冠军对抗赛历史一百多年以来,数以千计的该赛全部对局,都是以上述四种着法起步的。

  如果一方让对方完全控制中心,那是非常危险的。这里列举一局实战,是瑞典国际特级大师斯托尔别克与前苏联世界冠军鲍特维尼克的对局,白方在完全失去中心后惨败。

  开局的第二个基本原则是尽快出动子力。所谓尽快出动子力,就是要用最少的步数出动最多的棋子。因为,局势的优劣不仅在于拥有的棋子多少,而更取决于起作用的棋子多少。如果一方出动的棋子比对方多,成为出子领先反之,称为出子落后。出子落后会先于被动局面,容易招致败局。

  开局的第三个基本原则是布好兵阵。兵应当尽量往前合理推进(为己方的棋子占领空间),布置成能活动的(不要被己方的棋子挡住进路,尤其是中心和后翼),设有弱化的阵形。因为兵只能往前走,不能横走也不能后退,要矫正兵阵的弱点是很困难的,所以要下好开局,必须善于用兵。

  国际象棋本身就是一个问题,它被看作是脑力运动游戏,一般认为,下国际象棋的人拥有高智商。这里有一个先有鸡还是先有蛋的问题:是聪明人被国际象棋所吸引呢,还是下国际象棋人更聪明了?研究表明,把王后和车移来移去确实能提高人的智商。一项对委瑞内拉4000名学生的调查表明,经过4个月的国际象棋教育,无论男孩女孩和智商均获得了明显提高。

  由于大脑运动像肌肉一样,它需要不断的锻炼才能避免损害,保持健康。新英格兰医学杂志刊文揭示,75岁以上的老人,进行类似下国际象棋一样的脑力活动者,较之不下国际象棋的老人更少患痴呆。曼医生认为,大脑像肌肉一样,不用它就会更丧失能力。这就是为什么您到了75岁就更应该下国际象棋。

  俗话说,文无第一,武无第二。下棋也是一项体育运动,每一个棋手都有过从被人赢到赢别人的经历,而且这个过程中的第一阶段--被赢,这是一个相当漫长的时间段。如果没有不服输的精神,早就放弃了。所以,想要在下棋的人群里找一个容易服输的人很难。

  一个棋手在下棋时,不一定局面都会一直领先,但他们会在局势落后的时候,全力寻找每一个可以翻盘的机会,这个时候就需要耐心。耐心的去调整心态,耐心的去把局面搞乱,然后再给对手致命一击。在生活中,同样也会有不顺心的时候,所以有耐心的人,永远以风平浪静的心态,去面对人生。

  结语:国际象棋是一种非常好的益智游戏,可以锻炼我们的耐心和永不服输的精神,想要下好国际象棋必须掌握相应的技巧,上文就为大家详细的讲解了国际象棋的开局技巧,希望对大家有所帮助。

我要回帖

更多关于 国际象棋吃子规则 的文章

 

随机推荐