棋类软件是怎么写成的 初到美国上学时,电脑老师要求我们用软件写“井字棋”(tic-tac-toe)的对弈软件。 相信大多数中国人小时候都玩过“井字棋”:在画成“井”字的9个方格里,2人分别画上“O”或“X”。哪一位先使得自己的符号在连续纵、横或斜角3格里相连,算赢。 我根据小时候下这种棋的心得写了一个简短的软件交差。 在与一起上课的一位从俄罗斯来的学生交流写这个软件的经验时,他指出,要考虑到所有的9个格子的情况;就是说,软件的第1步要考虑到9!(9x8x7……x1)这么多种情况。 我们一起又想到,由于“井”字是对称的3x3的图形,因此情况就缩减到3种情况:中间格(仅1格)、侧面格(4格)和角上(4格)这3种。 由此,我看了一些当时出版的有关棋类对弈软件和人工智能的书。现在把当时的学习心得分享出来。 棋类对弈软件的大致流程是这样的: 1] 把所有可能的棋子走法都列出来。 2] 对每步进行评估。这是最主要的一个步骤: a)一般做法是,建立一个或几个用于评估棋子走法的方程,对方程中的各个变量(即棋手移动棋子到某个位置的考虑的各种原因)给予各种重要性(术语称“权重 [weights]”)的估量;即重要性大的变量/因素的权重大些,反之小些。 最简单的这种评估方程就是一个多元的线形方程(多元一次方程)。求出方程的值。 b)可能有些更“聪明”的评估方程,会根据具体的对手,在比赛现场用各种方法随时修改每步的变量的种类和各个权重,这样就可以更精确地对付对手了。 3] 根据2]中得出的最好的结果,去移动棋子。 4] 可能像好棋手那样,软件会对棋赛进行“复盘(重复棋赛的每步走法)”,以找出胜或负的主要原因及其“关节点”(在哪一步或哪几步使得被动转为主动的;或者主动转为被动的),并据此修改评估方程。 5] 重复1]-4]的步骤。 简而言之,这些对弈软件就是“学习-进步-再学习-再进步”这样一个重复往返的过程,与人们的实际学习情景类似。只是软件不知疲劳,学习不倦罢了。 在国际象棋、中国象棋和围棋3大棋类中,最容易写出的是国际象棋对弈软件,因为国际象棋使用64格棋盘,它的第1步走法最多只有64!种;况且国际象棋的第1步只有几种棋子可以走,这就把64!种走法大幅削减了。 中国象棋也是类似情况。 而写围棋对弈软件棘手的地方,就是原始的围棋盘是空白的;从理论上说,围棋的第1步走法有361!种。好在根据评估,棋盘上有一些地方在第1步是不会放任何棋子的,这样才把361!种走法大幅削减下来。 其实,再复杂的数学问题,只要有数学模型及其方程,目前对电脑都不是大问题,只是计算时间的长短而已。 另外,棋类对弈软件已经基本上把敌我每步的走法都进行了精确的评估,这当然比人类棋手仅根据自己或别人的下棋经验来移动棋子厉害得多。 电脑不会像人类棋手那样由于疲劳会出错;目前电脑的计算速度够快,可以做到人类棋手才走出一步棋子,软件已经找到了回应的棋步;电脑的储存量现在也够大,可以把所有人类棋手的棋谱都输入到电脑里(或者放在“储存云”里,在比赛时随时调用)。 综合以上这些,电脑打败人类棋手,就没有什么稀奇了。 由于这已是20多年前的事情了,许多知识肯定已经过时,还请行家不辞赐教。 参考连接: http://www.pingwest.com/why-is-alphago-so-great-and-what-is-deepmind-trying-to-achieve/ 击败了李世石九段的围棋人工智能“AlphaGo”究竟是什么?
http://www.pingwest.com/alphago-vs-lee-sedol-first-round/ AlphaGo 赢了,机器智慧又一次战胜了人类
|