您的位置:首页 > 其它

我的电脑学习历程.第七章.中国象棋--结束?还是开始?

2010-11-19 01:02 218 查看
关于中国象棋的资料:http://www.xqbase.com/index.htm



大学的四年中,大一和大二的课程,基本上都是基础课,主要包含了公共基础课,数学基础课和计算机基础课三大部分。大三我们搬到了新校区--貌似和其它211学校一样,新校区总是在郊区,很大,建筑很漂亮,但总的来说,也很荒凉。有老师说,荒凉地段好读书。其实,只要有心读书,繁华一样纷扰不了你;如果无心读书,荒凉则代表着孤独和寂寞。幸好,我还有读书的念头。



大三开始上专业课程。在这些专业课中,《抽象代数》、《数值逼近》等等,都是对计算机帮助很大的课程。其实这些课程本身,也要用到计算机工具来求解问题。而《最优化理论与计算》《信息论基础》更是直接和计算机相关。可以说,现代数学的主流方向,就是建立在计算机科学上的。用数学这个工具来解决实际问题,大致包括下面几个过程:

1.提出问题。

2.分析问题。

3.构建模型。

4.求解模型。

5.得出结论。

第一步、第二步和第五步,不论是现代数学,还是传统数学,思想上都是差不多的。但第三步和第四步,现代数学通常就需要依赖计算机,和传统数学有很大区别了。

传统数学进行到第三步时,如果问题是关于无限的,或者是连续而不可求解的,就束手无策了,只能去分析模型的性质,可能的结果等等。但对于现代数学来说,则先需要把模型中的东西离散化,然后根据分析找到一个范围(这一步可能会不需要),再从范围中任意找一个起点,从起点出发,无限逼近我们建立的模型。所以在一般情况下,计算机求解出来的模型的解,通常是不精确的。但是,这样做,几乎任何问题都可以通过计算机求出一个或多个解来。至于这个解是否准确,或者说精确度有多高,首先则取决于建立的模型,其次则取决于求解模型的算法。为什么现在的大学生《全国数学建模大赛》和ACM大赛这么火热?因为它们体现的就是大学生的建模能力和模型求解能力。

我们在数学上使用的编程工具,最主要的是MATLAB。这是一个很强大的数学软件,我们有专门的课程讲MATLAB编程,而这门课程,就是为后续的数学专业课准备的--我们绝大多数的数学专业课都有上机实验。MATLAB最主要的能力,当然还是矩阵处理。我的MATLAB学得并不是很好,如果用它来处理简单的矩阵问题,我自信还能办得到,但如果用它进行一些稍微复杂的应用,我就无能为力了。我们后来有一些《微分方程数值解》的上机实验,需要用MATLAB来编程,而我基本上都是照本宣科,毫无自己的思想在内。实在是很惭愧。

当然,我们用到的数学编程软件,不止MATLAB一个,比如还有主要用于统计分析的SAS,主要用于最优化问题求解与分析的LINGO等等,这些东西专业性比较强,我也是在读大学才开始接触,学得并不好,就不在此多说了。



计算机方面的专业课,则主要有《3D MAX》《FLASH》《网页***》《数据库原理》《网络基础》等等。当时还记得开了J2ME的课程,这些课程我在未进大学时就有所接触,而进入大学后,和我选定的方向有些偏差,故都学得一般,没什么突出的亮点,也不多说。

大学后期,我印象最深的,是毕业设计。

大学里的毕业设计,题目可以自己拟定,也可以老师出题。或许真是大学生的素质现在滑落得很厉害,据说在我们前一届的同学让自己拟题,结果有很多人都无法从生活中找到可以研究的问题。因此,我们这一届,原则上是老师出题,但允许学生和老师协商。我自然是找老师协商的一份子,因为我的《中国象棋》程序还没完成,我希望在离开校园的时候,能够给它划上个句号。

我选择的指导老师,是教授我们计算机课程中实践能力最强的睢佰龙老师,遗憾的是,他主要做的是嵌入式,在PC上的具体编程,无法给我太多的指导。不过,我仍然很感谢他在设计上对我的指导。

我的中国象棋设计之初,又犯了和大一时一样的毛病:总想找个核心点,然后对它进行层层包裹,逐步扩充功能--这是一个从内到外的过程。这个思想本身并没有什么问题,事实上,它和组件模型思想有些类似,当然,从开发方法角度来说,它其实就是敏捷开发的基本方法。只是,这个方法,对程序员的要求非常高,需要设计者拥有非常丰富的经验--因为你在设计核心时,就要考虑到后续扩展时的各种可能和面临的问题,甚至最好还能在潜意识中考虑到你当前没有考虑到的问题(^_^)。我自然是没这个本事的,所以第一次设计尝试,以失败而告终。

在和指导老师交流了好几次后,我又开始了第二次设计:先定一个规模及框架,然后再逐步细化。这个思想,就和前面说的刚好反了过来,这是一个从外到内的过程。不过这样设计,显然在实现方面要容易许多。我设计的三大基本功能是:人机对战,人人对战,网络对战。也就是说,我首先考虑的是对手的类型:人类,机器,还是网络?至于网络那边是什么,我不管,它可以是人,也可以是AI,由中枢控制模块进行连接识别、操作控制和信息转发。网络对战自然使用SOCKET收发消息,而机器思考部分的引擎通信,则采用UCCI(通用中国象棋引擎接口)标准。我设计的次要功能,则是分析和打谱。

设计人机对战,是我第一次真正意义上接触人工智能,只是博弈所涉及的人工智能,还是比较局限的,主要只包含两大块:搜索策略和机器学习。机器学习鉴于我能力有限,最终没能完成。完成的只有搜索策略。

为了实现搜索策略,我参考的东西比较多,主要有《PC游戏编程(人机博弈)》和《C/C++中国象棋入门与提高》这两本书,还有本文前所列出的网站,以及《ElephantEye》引擎的源代码。

1.单从博弈编程来说,《PC游戏编程(人机博弈)》是一本非常不错的书,由王小春先生编写。这本书对中国象棋搜索策略的各种算法都有介绍,比较全面。但也正如王小春先生在书中所说,这本书以清晰为第一考虑要素,因此注定在某些设计上和搜索实现上不够简洁。书中提供的一般搜索方法,当搜索深度达到三层以上时,就会变得很慢。而达到五层以上时,基本上没什么实用价值了。

2.《C/C++中国象棋入门与提高》这本书并不太好,感觉有很多内容,都是从www.xqbase.com上摘录下来的。



或许是时间太短了,等我的象棋基本上能实现人机对战的时候,毕业设计已到了尾声了,而我的整个设计,才完成大约1/3。没办法,硬着头皮,我也走上了讲台。

从大一用VB写象棋打谱程序开始,到大四完成象棋人机对战程序,我的大学生涯,终于划上了一个句号--虽然我觉得这个句号并不怎么完美。我只知道,在我完***机对战程序时,我终于踏出了在人工智能方面学习的第一步。现代人工智能的核心,不在搜索策略上,而应该在神经网络上,我知道我还差得很远。我更希望的,真正达到图灵说的那个水准的人工智能,它在天上,而我在地上。



我的这个第一步,会不会也是我的最后一步?未来无法预知。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐