国际象棋程序设计六局面评估函数_第1页
国际象棋程序设计六局面评估函数_第2页
国际象棋程序设计六局面评估函数_第3页
国际象棋程序设计六局面评估函数_第4页
国际象棋程序设计六局面评估函数_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、国际象棋程序设计六:场面评估函数国际象棋程序设计六:场面评估函数5/5国际象棋程序设计六:场面评估函数国际象棋程序设计(六):场面评估函数Fran?oisDominicLarame/文已经六个月了,我知道你们有人感觉我不会闭口,可是你们错了,这是我的国际象棋程序设计连载的最后一篇。还有,我的Java象棋程序(看上去很烂)已经做好了,和这篇文章一同上传给了GameDev网站,这个程序仍是能够考证这些连载内容的。这个月的话题场面评估函数的确很特别,搜寻技术截然不相同,着法产生能够只依据规则来办理,而场面的评估则需要很深入完好的分析。能够想象,假如我们不知道某个场面会致使哪方获胜,那么讨论这个场面的

2、相对强弱将是不可以能的。所以,好多要讨论看法对于其余游戏来说就不是这么回事了,有的则根本不可以够用。对于你自己的游戏,考虑用什么样的评估方法,这是你作为程序员应当知道的。【译注:对于中国象棋要特别注意,好多看法不可以够从国际象棋照般,我写过中国象棋和国际象棋比较研究一文,详尽论述过这个问题。】抓紧时间,让我们来看一些场面讨论的尺度,而且需要认识它们有什么作用。子力均衡简单地说,子力均衡(MaterialBalance)就是指两方各有哪些棋子。依据象棋文件,后的价值是900分,车500,象325,马300,兵100,王是无价的。计算子力均衡是特别简单的,每方的子力价值就是:MB=Sum(NpxV

3、p)这里Np是棋盘上这各种类的子的数目,Vp是子的价值。假如你在棋盘上的子力价值比敌手多,那么你的形势好。【说句提外话,外国人把“吃”说成“抓获”(Capture),意思是棋子其实不是消逝了,而是临时退出战场了,所以说子力价值时必然要重申“棋盘上”。】看上去特别简单能否是?可是这和象棋的场面讨论还差很大距离呢。CHESS4.5的作者预计了好多地点上的要素,比方灵巧性和安全性差不多凑近1.5个兵。实质上,用不着考虑其余,这就足够能够下出好棋了。【注意,在把“兵值”这个看法运用到中国象棋的时候,最好也把车设成500,这时灵巧性和安全性的要素就能够参照国际象棋,也不超出150分。详尽的子力价值可参照

4、中国象棋和国际象棋比较研究(二)子力价值一文。】的确,有些状况下为了经过子力互换让场面获得进展,你必然牺牲某些棋子(甚至是后)。可是最好是经过搜寻来发现,比方弃后能够致使3步杀,你的搜寻函数不需要额外的代码就会找到杀棋(前提是它看得足够深远)。假如你硬是要在讨论函数里写特其余代码,来确立能否应当弃子,这类事情将是恶梦。极罕有程序会用像我开始所说的那个讨论函数。因为计算过于简单,人们会在上边增添点东西,都是这么做的。举一个尽人皆知的例子,当你子力上处于当先时,互换相等的子力是有益的。互换一个兵是不错的选择,因为它为你的车开放棋盘,可是你必然在棋盘上保存一些兵直到残局,以修建防守屏障也许升变为后。

5、最后,假如开局库里走出弃子的开局,你不用为程序担忧,所以你要把“歧视因子”(ContemptFactor)加到子力均衡的讨论中。比方当子力落伍150分甚至更多时,你仍旧让程序感觉是当先的。要注意,子力均衡在象棋和西洋棋里拥有很高的地位,可是在黑白棋里倒是欺骗性的。的确,棋局最后你必然控制更多的格子才能赢,可是你最幸亏中局阶段控制子的个数。在其余游戏像五子棋【Go-Moku的确应当是五子棋,我想不出还有什么不吃子的黑白棋类了】及其变种N子棋(Connect-N)【详尽怎么下我也不知道】,子力均衡是不会变化的,因为素来没有被吃的子。灵巧性和对棋盘的控制将死的特点之一是没有合理的着法。直觉上,忧如选

6、择余地越大体好,比方选手在30种着法内找出一步好棋,这类可能总要比限制在3步内高。在象棋中,灵巧性是很好评估的计算同一场面下每方的合理着法,你已经能做到了【还要复习一下着法的产生吗?】。可是这个数字可是占一小部分。为何呢?就因为好多着法是漫无目的的。比方你每次让车向退后一格,着法是合理的,但不产生作用。其余,不惜代价试图限制敌手的灵巧性,会让程序进行一系列漫无目的的将军,同时摧毁自己的防线。因为消除将军平常只有3到4种合理着法,所以鉴于灵巧性的程序会走出劣着去将军对方,过会儿就会发现什么事也没干成,并且自己的兵力也成人心松懈了。【我以为这类结果的本源在于没有把将军着法考虑进“静态搜寻”中,假如

7、考虑进去了,那么将军的时候不做场面讨论,根本不存在敌手灵巧性很低的设想。】可是,有些理智的灵巧性评估方法,会起点作用。我的程序就“坏象”赏赐罚分,即象的行动路线被一系列同色格的兵阻截的状况,当马太凑近棋盘边沿时也同样办理。另一个例子是车,在开放或半开放线(即没有兵或只有一个兵的纵线)上价值更高。和灵巧性有亲密联系的是棋盘的控制能力。在象棋中,假如一方对某个格子产生攻击的棋子数目超出对方,那么这一方就控制了这个格子。走到受控制的格子通常是安全的,走到被对方控制的格子则是危险的。(有一些例外,把后走到被敌方兵攻击的格子里,不论你有多少子能够吃他的兵,这不论怎样不是好想法。还有,你成心把子送到对方嘴

8、里,可是对方有更重要的格子需要保护。)在象棋中,控制中心是开局的基本目标。可是,控制能力在某种程度上是很难计算的,它需要在任何时候都更新数据库,来记录棋盘上全部被攻击的格子。好多程序都这么做,但我的没有。灵巧性对于象棋程序来说其实不是特别重要的,但在黑白棋里却特别重要(在残局中有极少子可走的一方会坠入很深的窘境)。而对围棋而言,对棋盘的控制则是成功的标致。形势发展有个教条,下象棋时轻子(象和马)要尽早投入战斗,王要尽早易位,车和后尽量少动,直到重点时辰作出决定性的攻击。这是有好多原由的,马和象(还有兵)能控制中心,来支持后的火力,把它们调换出去能为底线开导车的路线。跟着棋局的进行,车就能够跑到

9、第七行(即开始对对方的兵着手),形成巨大的损坏力。我的程序用了一些因子来权衡形势的发展。第一,任何王和后前没有动过的兵都要扣分,阻截车的马和象也要扣分,这样能够让后在其余子力出动后才开始动,假如敌手还有后,那么王易位到安全地点时则赏赐很大的加分(有易位权可是没有易位的也赏赐少许加分)。你能够看到,形势发展的要素在开局阶段很重要,可是立刻将失掉意义。在大约10回合此后,要权衡的要素基本上都发生过了【即能加分的都加了,要扣分的都扣了】。注意,在西洋棋之类的游戏中,偏向于形势发展可能很不好。事实上,先走的一方要空出后边一行的空位,这就已经吃亏了,而在这些地方防范形势发展,平常是不错的选择。兵形象棋大

10、师门常说,兵是象棋的灵魂。所以生手很难意会的是,强手在对局时会因为一个兵的损失而早早服输。象棋书本中提到好多兵的种类,有些是有益的,有些是有害的。我的程序考虑了以下几点。叠兵或三叠兵,一方两个或多个兵在同一列上是很坏的,因为它们的挪动相互阻截了;对兵,两方两个兵“头碰头”相互阻截去路,会造成很大的阻拦;通路兵,当兵进展到不会有对方兵攻击或阻截时【即同一列和相邻列里都不可以够有对方的兵】,就会变得特别兴盛,因为它们更简单抵达底线实现升变;孤兵,两边都没有伙伴兵保护的兵,最简单遇到攻击,最需要追求保护;满兵,棋盘上有太多的兵会影响灵巧性,为车开放一条纵线才是好想法。最后兵形上要注意的是:后边跟了车

11、的通路兵是特别危险的,因为任何吃掉它的子都会成为车的盘中餐。假如有一个车在通路兵的后边(同一列),那么我的程序赏赐极高的加分。王的安全和取向我们很早就谈到过王的安全了,在开局和中局里,保护王是最重要的,易位是最好的方法。可是在残局里,王身旁的好多子都没了,他片晌间变为了攻击性子力!把它留在兵阵的后边几乎是浪费资源。“取向”(Tropism)在这里权衡的是一个子攻击对方王的难易程度,平常用距离来权衡。取向的计算规则跟兵种相关,可是通用的规则是,你越凑近对方的王,你对他的压力就越大。确立权重此刻我们确立了有那些要素是需要权衡的,可是我们怎么决定它们的权重呢?这是个特别有价值的问题,能够花几年时间(

12、也的确有人在做)用线性组合的方法来调整评估函数,有时把灵巧性设得多一些,有时更重申安全性,等等。我自然希望有一个绝对的答案,惋惜没有,因为再好的讨论函数都会遇到麻烦和失误。假如你的程序足够强,那很好。假如不是,那么试一试其余方案,让它和你本来的程序下,假如能赢下大部分,那么新的方案就是一个进步。有三种方法能够试一试:经过优化评估函数获得的成绩,要达到加深一层搜寻所达到的相同见效,这是特别困难的。假如你很迷惑,那么宁愿把评估函数设得简单些,把更多的办理器资源留给Alpha-Beta搜寻。【相关资料表示,加深一层搜寻大体能够使棋力提升200分(ELO),这是相当可观的。】除非你想和世界冠军去比,不

13、然你的场面讨论函数不用要特别有效。假如你的程序的确很快,你能够花些时间用适合的算法来改良评估方法。可是对象棋来说,花上几千年时间都是有可能的。【这里指用适合的算法来调整权重,比方线性回归分析、神经网络算法等,每做一步伐整,都需要用大批的对局来试验,所以工作量特别大。】【最后想注明我的看法,即场面评估函数是整个象棋程序的核心。人们愈来愈把注意力集中列席面评估函数上,好的象棋程序常常用上万行的程序来分析场面,但它们的作者极少会显露出此中的细节。一个最简单的方法就是去看一些公然了的象棋程序,比方:Crafty的评估函数有4000多行,主要包含以下四方面的内容:子力价值,可是是简单地把每个子的价值加在

14、一同;兵的价值,不只考虑兵的相对地点,也考虑通路兵(特别在残局中);跟每个子地点相关的子力价值,即子力的灵巧性、协调性等要素;王的安全性,既考虑王四周的兵阵,也考虑能够攻击王的其余棋子。以上译自Crafty源程序的第一段,此中的细节能够参照这个程序的其余片段。】下一个月好了,没有下一个月了,就这些了。假如我要把这个连载拖得长一些,我能够写一些对于开局库(OpeningBook)、残局库(EndgameLibrary)、特别针对象棋的硬件,以及好多好多其余的内容。我自然写得出来,可是我才不写呢。我打算把一部分内容保存到我今年秋季要写的书里,其余内容我也不知道终归有没合用。还有一个原由,我也懒得写

15、下去了。我希望你们喜爱看我的东西,希望你们能学到两三个合用的技巧。假如真的学到了,那么明年看我写的其余东西吧(GDC或E3)【我也不知道是什么学科,GDC忧如是图形显示控制芯片,反正和象棋没任何关系】,而且在你企业里的工程师或程序员眼前好好夸我,好吗?太快乐了!Fran?oisDominicLarame,2000年10月【译后注:总的来说Larame写的东西仍是比较简略的,没有代码和过于专业的知识(即即是有,我也已经在译注中说了然)。可是也许是我英语水平的问题,他的某些表述其实不可以够理解,所以即使很别扭地翻译出来了,仍是要在译注中加上自己的理解,这让我特别费劲。可是总算全部都结束了。与此同时,我还采集了好多专题方面的文章,大体有三十来篇,本来是想翻译的,以展现我在程序设计方面的成就,可是没有时间了(何况在Lara

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论