在线试读

get_product_contenthtml     1 必须由将棋专家来编程吗?
     10年前,正在读大二的我不小心留了级,那时的我整日泡在东京大学的将棋俱乐部里消磨时间。
     由于留级的缘故,我平时没有太多课,反而有很多的闲暇时间。我思考着未来,开始阅读此前从未接触过的编程类书籍,并为之深深着迷。要想开发出能打败将棋专家的程序,究竟应该怎么做呢?
     必须由将棋专家来编程吗?把他关于将棋的所有知识一一录入电脑,这样的程序才有可能打败他自己,不是吗?
     当时,我的将棋水平是在业余五段。虽不能与职业棋手相提并论,但在全国数百万的将棋爱好者中,我也可以跻身前1 000位。此外,我还曾获得关东地区学生赛的亚军,可以说实力尚可。
     事实上,包括个人和团体在内,当时致力于电脑将棋开发的人员约有50人,我应该是所有人中将棋水平优选的。
     因此,我理所应当地认为,我写出的程序即使尚不能战胜将棋专家,也一定是所有程序中不错大的。
     虽然直到大三为止,我都还只是一个完接近全的理科生,对电脑的基本操作都不甚熟悉。但在下定决心以后,我迅速地投身于对人工智能与编程的学习中,渐渐地,我将所有的时间都花在了将棋程序的设计开发上。
     数月后,我完成了初代将棋程序“PONANZA”的开发工作。
     带着PONANZA,我向将棋俱乐部飞奔而去。俱乐部的成员一直都知道我在写将棋程序。事实上,当时业界最优选的电脑将棋已经逼近了业余高级棋手的水平,因此所有人都做好了迎接劲敌的准备。
     我启动了PONANZA。
     紧张的气氛随之弥漫开来。然而……
     我的PONANZA一败涂地。其水平之低远远超出了所有人的想象。我还曾在对弈中故意让PONANZA 8个子,人为制造了非常悬殊的战力差来进行对抗。(必)
     然而,即使让了PONANZA 8个子,我还是赢了。我从未如此希望自己输掉这盘棋。我拼尽全力、倾注了所有热情编写的将棋程序,几乎是我那几个月全部生活目标的程序,惨遭失败。
     当时我接触编程尚不足半年。不可否认,我的编程技术还十分稚嫩与笨拙,但这并不是问题的关键。
     擅长下将棋的我误以为自己“真的懂将棋”了。但从某种意义上说,我其实对将棋一无所知。非但如此,当年的我对智能接近没有概念――智能究竟是什么呢?
     2 计算+存储=电脑?
     这个问题10年前就引起了我的注意,在本书对该问题进行深入展开前,我们先来了解一些基本的概念――什么是电脑,什么是编程?
     在现代社会中,电脑是不可或缺的。小到人手一部的手机,大到飞机上的操控系统,生活中有着数不清的电脑装置。但从本质上讲,这些为丰富的活动提供支持、看似功能繁多的电脑装置实际上能做到的只有以下两点。
     其一,“单纯的计算”。
     在进行加减乘除及其他同级别的运算时,电脑的计算速度非常可怕,简单来说就是计算器的功能。其运作机制虽然简单,但光凭惊人的速度这一点,也足以满足很多需求了。
     其二,“存储”。
     大家对于电脑强大的存储功能并不陌生,它庞大的存储量可以帮助我们解决很多问题。例如电子词典,仅仅是将英语单词等相关内容存储进电脑,便可使我们的查询效率比翻阅纸质词典时更加高效。
     除了不断重复“单纯的计算”和“存储”两大功能以外,电脑基本没有更多的功能了。我们之所以认为电脑有能力完成除此以外的更多任务,是因为程序员通过编写程序给电脑下达命令,使它能够更好地利用这两种功能去解决多样的问题。
     那么,拥有此种特性的电脑在面对将棋时,该如何设计其程序呢?记录下所有职业棋手的棋局就可以变强吗?
     遗憾的是,答案是否定的。与今天相比,10年前的电脑将棋虽然实力极弱,但要记录下所有职业棋手的对弈过程也并非难事。然而,不论10年前的电脑收录了多少棋谱,它都一直未能击败人类。
     P2-7