摘要:what 什么是继承?why 为什么要用继承?(继承有什么用?继承有什么优点?)how 怎么使用继承?when,where 什么时候,什么地方使用继承?if not 如果不使用继承,能否实现同样的设计,如果可以两个方案的区别又在什么地方what?继承是一个动词,相对与接口这一名词,理解上应该有所区别继承一种定义作为派生类基础的类的能力。派生类继承并可扩展基类的属性、方法和事件。派生类还可以用新的实......
摘要:转:[ 分享] 我收集的ebook。自己肯定是看不完的,收集是为了给用的到的朋友。 http://www.itpub.net/259894.html
......
棋类游戏的智能模块设计――浅谈人工智能
摘要:本文简单的介绍了计算机博弈算法.计算机博弈在某种形式上属于人工智能,而本文只介绍一下其中的一种简单形式——零与博弈,并给出了一个实例――黑白棋.
【程序编程相关:
FedoraCore2正式版使用问题解决】
关键字:搜索,估值,剪枝,alpha-beta,零与博弈 【推荐阅读:
[原创]用脚本控制Select的展开与折】
随着计算机处理速度的飞速提高,人们很早就提出了疑问:计算机是否会超越人类?世界国际象棋大师已被计算机打败,计算机已经超过了人类?看完本文,相信你会对计算机棋手的智能有所了解. 【扩展信息:
VC数字图像处理编程讲座之四】
引言
概念
什么是博弈?狭义地说,博弈中的博是指赌博,而弈就是下棋.赌博并不提倡,在这里所说的博弈就单指下棋.就一局棋而言,一方获胜,则另一方失利,在某些棋类中,如果双方僵持不下,则形成与棋.总之,在一局棋的任何一个时刻,一方获得的利益就相当于另一方的损失.也就是说,不会出现“双赢”的局面.这类问题被称为零与博弈,因为双方的所得加在一起等于0.
优胜劣汰
人类在下棋时一定会选择对自己最有利的走法,计算机也一样,人们编写的下棋程序也继承了人类的思考方法,即找到对自己最有利的走法.这种最有利的走法通常是可以赢得胜利的走法,比如象棋中某个走法可以将对方将死,又如黑白棋中棋子数多的一方胜利,那么我们的走法就要尽量是自己的棋子多,而对手的棋子少,当然,这样的黑白棋棋力很弱,后面会讲到这个问题.
搜索算法
但是棋类游戏不可能一步就决出胜负,象棋中不可能第一步就将对方将死;而对某个棋局的判断也不可能完全精确,在黑白棋中,初局时棋子多并不一定最终取得胜利,因为对手可能在后面的博弈过程中将局面扭转.想想人类下棋时,一般会假设我走这步,那么对手会怎样回应,如果对手回应了某一步,我再走哪一步,如果对手回应了另外某一步,我又该怎么走;然后再假设我走另外的某一步,如此反复下去.这个过程叫做搜索.
在这里我们要先回顾一下“树”这种数据结构以及树的遍历,如图一.
图一
图一是一个三层,12节点的树.树的遍历有深度优先遍历与广度优先遍历(如果对这些概念不清楚,请参考数据结构的书籍),深度优先遍历由于编程简单,内存占用小,在博弈中用的较多.现在我们假设一个棋局,计算机先走,它可以有若干种走法,而对应每种走法,计算机的对手又有若干种走法,将这句话展开,就得到了类似图一的一棵树.就拿图一来说,初始棋局是a,此时计算机有3种走法,分别导致棋局b.c.d,对于棋局b,计算机的对手有3种走法,分别导致棋局e.f.g,对于棋局c,对手的走法又导致棋局h.i,等等.
那么对于初始棋局a,计算机应该选择哪种走法呢?显然,计算机要选择b.c.d中对自己最有利的,对于这种有利与不利而言,计算机一般以分值来表示,比如对计算机越有利,分值越高,不少程序为了直观,将对双方平等的局面设为0分.但b.c.d局面并不是棋局结束,棋局还要继续下去,而且轮到对手走棋了,这时对于棋局b,对手也要从e.f.g中选择一个对他自己最有利的,对于棋局c,对手要从h.i中选择一个对他自己最有利的.注意,对对手最有利就是对自己最不利,因此,b的得分应该是e.f.g中最小的,c的得分应该是h.i中最小的,等等;而a的得分应该是b.c.d中最大的.这就是极大极小搜索的基本原理.
关于搜索,还有一个重要的问题,就是计算机的对手.在搜索过程中,计算机需要假设一个对手,而这个对手要是足够聪明的.那么这个对手是谁呢?实际上这个对手就是计算机自己....
下一页 摘要:1)instanceof:实现了某接口的类的对象也是该接口的实例;某类的对象也是该类超类的实例。
2)native()修饰的方法没有方法体,用一个分号";"代替大括号。
3)main不是关键字。
4)system.exit(int value),也就是说,只要是int的,就能够使jvm退出system.exit(´a´);同样的是合法的。
5)&......