国际跳棋
国际跳棋比井字游戏复杂得多,实际上,它复杂到根本无法对所有可能的移动序列进行蛮力分析。所以,你可能认为计算机必须模仿人类的思维才能下好国际跳棋。然而并非如此。
国际跳棋采用灰白棋格相间的8×8棋盘(如图1.3所示)。只能走灰色棋格,也就是说可走方格的数量从64个减到32个。两方玩家每方各有12枚棋子,放置于己方的灰色棋格内,中间的8个灰色棋格留空。棋子可沿灰色棋格对角移动,跳吃对方棋子。
图1.3 国际跳棋棋盘
在理论上,尽管所有可能的序列都有无限步数,蛮力分析还是可以识别出最佳策略的,就像玩井字游戏那样。但是,对目前的计算机来说,在合理时间范围内要分析的可能序列数量过于庞大。因此,人类想出了简化策略来利用计算机的能力。与井字游戏一样,国际跳棋的计算机程序不会尝试制定逻辑策略,而是利用计算机的优势——快速处理和绝佳记忆。
井字游戏走九步就结束了,而国际跳棋有无限步数,因为玩家可以在没有哪方获胜的情况下不断来回移动棋子。实际上,来回移动棋子很无聊,所以除非有一方犯了非常低级的错误,否则玩家会在明显无法出现赢家时同意和棋。(冷酷无情的国际跳棋程序永远不会同意和棋,而是会一直玩到人类对手精疲力竭,累到无法清晰思考而犯错。)
虽然国际跳棋游戏的步数不受限制,但能走的棋盘位置还是固定的。用不着算出所有可能的移动序列,国际跳棋计算机程序更好的做法是查看所有可能的棋盘位置,然后确定在这些位置的走法哪些得势、哪些失势。
尽管如此,这项任务还是让人发怵。棋盘走位有5万亿种可能,在没有考虑到所有接下来可能的位置序列的情况下,很难真正确定走这一步是否会得势。
人类以其洞察力将游戏分为三部分(开盘、中场和残局),单独分析每个部分,最后串联起来(如图1.4所示)。
图1.4 国际跳棋的决策树模型
开盘的那几步棋已有写好的“剧本”,表明了最佳的开盘走法、每种开盘的最佳应对方式等。这些剧本是国际跳棋玩家几百年积累下来的集体智慧。每名严肃的国际跳棋玩家都会研究这些剧本。编写国际跳棋程序代码的软件工程师也会把剧本加载到计算机内存中,计算机会在开盘时遵守这些规则。
到了残局阶段,如果棋盘上只剩两枚棋子,则位置数量相对有限,而如果剩下三枚棋子,则位置数量会增加,但还在可控范围,以此类推。对于每个可能的位置,人类玩家能计算出最佳走法,同时确定最佳走法是否会造成平局或出现胜方。所剩棋子数越多,可能位置的数量就越多,但很多都容易解决,并且棋盘的对称性也会减少必须分析的位置的数量。人类分析完包含所有可能棋盘位置的全部残局的情况后,比方说还剩不到六枚棋子,那么每个位置的残局最佳走法就会被加载到计算机内存中。
游戏进行到预先加载的残局位置时,计算机便按照人类预先确定的最佳走法的规则落子。人机对抗的跳棋残局中,人类玩家每走一步,计算机就会从数据库中选出预先确定好的最佳走法来应对新的棋盘位置,一直持续到比赛结束,通常结果是一方认输或双方同意和棋。
在游戏进行到中场时,计算机会试图将开盘剧本与残局位置联系起来。如果开盘几步之后,游戏进行到已存储的残局位置,则游戏结果可想而知(假设为最佳玩法)。
可供蛮力分析来识别最佳序列的中场局势数不胜数,因此程序员会将人类在跳棋领域的智慧与计算机的能力结合起来,列举各种序列。如果计算机有足够的能力和时间预测接下来的四步,那么计算机就会预测这四步可能产生的所有序列,并使用人类特定的损失函数(loss function)来比较四步后所有的可能位置。损失函数也是基于人类几个世纪的经验,考虑了被认为重要的因素,例如,每个玩家拥有的棋子数和对棋盘中心位置的控制。国际跳棋专家建议程序员为不同因素分配权重,以反映每个因素的重要性。
计算机通常会选择“最大最小值归一化”(minmax)的走法,因此它可以在最坏情况下(即最大值)让可能造成的损失最小化(即最小值)。如果另一个玩家采用最佳走法,程序则选择损失最小(或收益最大)的走法。
经过几个回合的中场比拼后,棋子数缩小到前瞻计算可以得出已知残局结果的水平。假设这是最佳玩法,那么游戏基本上结局已定。如果人类玩家犯错,则游戏结束得更快。
值得注意的是,计算机程序中“智能”的含量极少。在游戏开始时,计算机程序必须遵守开盘提示;中场游戏期间,计算机程序确定前瞻序列,并使用人类规定的损失函数,按部就班地决定走法;进入最后阶段,计算机程序还得依照残局指令运行。
为国际跳棋、国际象棋、围棋等复杂游戏而设计的计算机程序并不试图模仿人类思维,这涉及对潜在取胜原则的创造性认识。编写计算机程序是为了利用计算机的优势——无懈可击的记忆能力和毫无差错的规则遵守。
国际跳棋的计算机程序与人类玩家相比有几个重要优势:它永远不会在开盘和结束时犯错。人类玩家可能已研究过国际跳棋手册,但人类没有完美的记忆能力,还是会犯错。没有人思考过,更不用说记住所有可能出现的残局序列,其中有些还需要几十步精确走法才能得到最佳结果,人类只能在仓促之间找到最佳走法。而计算机的数据库中加载了最佳序列,可以做到这一点。
国际跳棋游戏中,人类击败计算机的唯一机会在中场。人类的预测能力可能不如计算机,计算机会分析不同走法背后大量的可能序列,但人类玩家能更好地把握特定位置的战略价值。例如,人类玩家可能会认识到,控制棋盘中间位置的重要程度比计算机损失函数给出的权重更高,或者计算机控制中间位置的数值测量可能有误,又或者中间位置的最终控制无法依靠测量目前局势得知。
计算机的最后一个优点是它不会累。高水平国际跳棋游戏可以持续两个多小时。由于大多数国际跳棋对决是以平局结束的,因此跳棋锦标赛会安排很多场比赛,一个多星期下来可能每天都会有四场。人类玩家每天的比赛时间为8~10个小时,一天接着一天,他们会疲惫不堪,容易出错。但计算机不会疲倦,因为它不需要思考,只要服从就好。
史上最优秀的国际跳棋选手是传奇人物马里恩·廷斯利。他是一个神童,开始念书的头八年就跳了四级,后来成为专攻组合分析的数学教授。小时候,他每周用五天,这五天每天用八个小时来学习国际跳棋。读研期间,他称自己已经花了一万个小时研究国际跳棋。到了20多岁,他基本上已无人能敌。
有12年时间,廷斯利不再参加国际跳棋锦标赛,据称是因为他觉得非常保守的对手很无聊——他们希望的最好成绩是平局。后来重返赛场的他于1991年再次退役,时年63岁。1992年他又被国际跳棋程序奇努克(Chinook)团队的创建负责人、数学教授乔纳森·谢弗请回赛场。谢弗的研究团队有三个人,分别负责开盘数据库、残局数据库和中场损失函数。
在1992年廷斯利和奇努克的40场比赛中,大部分是平局。廷斯利赢了第5场比赛,那场比赛中奇努克遵从了已加载在其剧本中的一种次优走法。廷斯利输了第8场比赛,将其归因为疲劳过度。到了第14场比赛,奇努克采用了数据库中廷斯利多年前使用过的一连串走法,但廷斯利忘记了,因此输了比赛。后因奇努克发生故障,廷斯利拿下了第18场比赛。(计算机也会疲劳?)随后,廷斯利还取得了第25场和第39场比赛的胜利,最终以4胜2负33平的成绩取胜。
这是人类大战机器中人类的一次胜利,但两场比赛的失利,却是廷斯利45年国际跳棋职业生涯中仅有的两次。
谢弗极大地扩充了奇努克的开盘和残局数据库,还将中场的前瞻能力从17步增加到了19步。1994年,他要求再进行一次对决。前六场比赛为平局,不过廷斯利认为奇努克的水平已经得到提升。他表示,在奇努克的残局数据库足够巨大以至于不会出错之前,他只有10~12步的机会能获得领先优势。可惜的是,廷斯利因患胰腺癌而不得不放弃比赛,并于7个月后与世长辞。
廷斯利的记忆力惊人。1992年第一次比赛后,他给谢弗讲了自己40多年前的一场比赛,他仍能准确无误地记住每一步。尽管如此,他的记忆力还是无法与强大的计算机匹敌。廷斯利真正拥有的是通过多年研究和实践积累的棋感,奇努克绝不可能对位置的优劣有相同的直觉。
在决胜局前的14场展示赛中,廷斯利和奇努克有13场平局,第10场为廷斯利获胜,谢弗随后描写了这场决定性的比赛:
我走下了奇努克的第10步。刚放下棋子,廷斯利就惊讶地抬起头说:“你会后悔的。”我尚未领略过伟大的廷斯利的行事风格,默默地坐在那里,心想:“你知道什么,我的程序正在搜索后20步的可能性,表示它占优势。”再走几步后,奇努克的评估降至旗鼓相当。又走了几步后,它表示廷斯利更占上风。后来,奇努克说它遇到了麻烦。最后,越下越糟,我们只好投降了。在廷斯利的比赛日志中,他透露自己已经预料到残局,在第11步就知道他会赢,也就是我们出错的下一步。而奇努克需要预测后60步,才能知道它的第10步下错了。
廷斯利去世后,奇努克与世界排名第二的国际跳棋选手唐·拉弗蒂进行了32场比赛,并以1胜31平取胜。1996年,奇努克退出国际跳棋锦标赛,不过你可以在线对战低配版的奇努克。退赛后,奇努克同数十台差不多连续运行了18年的计算机一起工作,以检验确认国际跳棋玩家在先走并且每一步都是最佳走法的情况下是否可以保证取胜。
2007年,谢弗宣布国际跳棋和井字游戏一样,也是一款极好的权衡游戏,如果每个玩家都能选择最佳走法,则可以保证平局。这是计算机的一项壮举,但我不会称其为智能。
下一代的计算机游戏程序采取了不同的做法,即试错过程——计算机跟自己比赛数百万次,同时记录取胜方式。一款名为AlphaGo(阿尔法围棋)的程序采用了这种方法,击败了世界上最顶尖的围棋手。此外,另一款名为AlphaZero(阿尔法零)的程序还击败了最好的计算机国际象棋程序。这些程序都能极好地执行范围狭窄、目标明确的任务(“将”对手的军),但不会像人类那样分析棋盘游戏,思考为什么某些策略会成功。即使是计算机编码员也不明白为什么他们的程序有时会选择不寻常的甚至是奇怪的特定走法。
创建AlphaGo和AlphaZero的公司DeepMind(深度思考)的首席执行官戴密斯·哈萨比斯举了个例子。在一场国际象棋比赛中,AlphaZero将“后”移到棋盘的边角格,这与人类想法相矛盾,因为国际象棋中最厉害的“后”在棋盘中间位置会更加强大。在另一场比赛中,AlphaZero牺牲了“后”和一个“象”,而对人类玩家来说,除非可以立即获得回报,否则几乎不会这样走。哈萨比斯说:“AlphaZero与人类的玩法不同,与编程的玩法也不同。它采用第三种玩法,似乎是外星人般陌生怪异的玩法。”
尽管在棋盘游戏中具有怪异的超人技巧,但计算机程序并不具备类似人类智慧和常识的东西。这些程序不具备处理不熟悉的情况、不明确的条件、模糊的规则以及含糊甚至相互矛盾的目标所需的一般性智能。决定去哪里吃晚餐、是否接受一份工作、跟谁结婚,都与“象”走三步“将”对方的军截然不同——这就是为什么让计算机程序为我们做决定是危险的,不管它们多擅长棋盘游戏。