国际象棋顺序设想(六):局势评价函数
 
François Dominic Laramée/
 
  以前六个月了,我知道你们一些人以为我不会闭嘴,然则你们错了,这是我的国际象棋顺序设想连载的最终一篇。另有,我的Java象棋顺序(看上去很烂)以前做好了,和这篇美文一同上传给了GameDev网站,这个顺序照样能够考证这些连载内容的。
  这个月的话题——局势评价函数——实在很稀奇,搜索手艺迥然分歧,着法发生能够只依据划定礼貌来处置责罚,而局势的评价则要求很深切完全的剖析。能够想象,若是咱们不知道某个局势会致使哪方失利,那末评定这个局势的一定强弱将是不能够的。因而,许多要议论观点关于其他游戏来说就不是这么回事了,有的则基础不能用。关于你自身的游戏,斟酌用甚么样的评价要领,这是你作为顺序员应当知道的。【译注:关于中国象棋要稀奇注重,许多观点不能从国际象棋照般,我写过《中国象棋和国际象棋对照研讨》一文,详细论述过这个问题。】
  抓紧时刻,让咱们来看一些局势评定的规范,而且要求相识它们有甚么功用。
 
子力平衡
 
  简朴地说,子力平衡(Material Balance)就是指双方各有哪些棋子。依据象棋文献,后的价值是900分,车500,象325,马300,兵100,王是无价的。盘算子力平衡长短常简朴的,每方的子力价值就是:
 
MB = Sum (Np x Vp)
 
  这里Np是棋盘上这种类型的子的数目,Vp是子的价值。若是你在棋盘上的子力价值比对手多,那末你的形式好。【说句提外话,本国人把“吃”说成“抓获”(Capture),意义是棋子并非消逝了,而是暂时加入战场了,以是说子力价值时一定要强调“棋盘上∈瑁】
  看上去异常简朴是否是?然则这和象棋的局势评定还差很大距离呢。CHESS 4.5的作者预计了许多职位上的重点要点,譬喻灵活性和平安性差不多靠近1.5个兵。现实上,用不着斟酌其余,这就足够能够下出好棋了。【注重,在把“兵值”这个观点运用到中国象棋的时刻,最好也把车设成500,这时刻灵活性和平安性的重点要点就能够够参考国际象棋,也不凌驾150分。详细的子力价值可参考《中国象棋和国际象棋对照研讨()——子力价值》一文。】
  确实,很多若干状况下为了经由历程子力交流让局势失掉希望,你必需牺牲某些棋子(以至是后)。然则最好是经由历程搜索来发现,譬喻弃后能够致使3步杀,你的搜索函数不要求分外的代码就会找到杀棋(条件是它看得足够长远)。若是你硬是要在评定函数里写稀奇的代码,来一定是否是应当弃子,这类事项将是噩梦。
  很少有顺序会用像我最先所说的谁人评定函数。由于盘算过于简朴,人们会在下面增长点器械,都是这么做的。举一个众所周知的案例,当你子力上处于抢先时,交流相等的子力是有益的。交流一个兵是不错的选择,由于它替你的车开放棋盘,然则你必需在棋盘上生存一些兵直到残局,以修建进攻屏障也许升酿成后。最终,若是残局库里走出弃子的残局,你不用为顺序忧郁,因而你要把“轻视因子”(Contempt Factor)加到子力平衡的评定中。譬喻当子力落伍150分以至更多时,你依然让顺序以为是抢先的。
  要注重,子力平衡在象棋和西洋棋里具有很高的职位,然则在是非棋里却是诈骗性的。确实,棋局最终你必需掌握更多的格子才气赢,然则你最幸亏中局阶段掌握子的个数。在其他游戏像五子棋Go-Moku实在应当是五子棋,我想不出另有甚么不吃子的是非棋类了】及其变种N子棋(Connect-N)【详细怎样下我也不知道】,子力平衡是不会转变的,由于一直没有被吃的子。
 
灵活性和对棋盘的掌握
 
  将死的特征之一是没有恰当的着法。直觉上,似乎选择余地越约莫好,例如选手在30种着法内找出一步好棋,这类能够总要比限制在3步内高。
  在象棋中,灵活性是异常不错评价的 盘算统一局势下每方的恰当着法,你以前能做到了【还要温习一下《着法的发生》吗?】。然则这个数字仅仅占一小局部。为甚么呢?就由于许多着法是漫无目的的。譬喻你每次让车向退却一格,着法是恰当的,但不发生功用。其余,不惜价值试图限制对手的灵活性,会让顺序停止一系列漫无目的的将军,同时摧毁自身的防线。由于消除将军一般只需34种恰当着法,以是基于灵活性的顺序会走出劣着去将军对方,过会儿就会发现甚么事也没干成,而且自身的军力异样成众志成城了。【我以为这类效果的泉源在于没有把将军着法斟酌进“静态搜索”中,若是斟酌出来了,那末将军的时刻不做局势评定,基础不存在对手灵活性很低的假象。】
  然则,很多若干明智的灵活性评价要领,会终点功用。我的顺序就“坏象”提供罚分,即象的举动线路被一系列同色格的兵阻挠的状况,当马太靠近棋盘边缘时也异样处置责罚。其余一个案例是车,在开放或半开放线(即没有兵或只需一个兵的纵线)上价值更高。
  和灵活性有亲切联系的是棋盘的掌握才气。在象棋中,若是一方对某个格子发生进击的棋子数目凌驾对方,那末这一方就掌握了这个格子。走到受掌握的格子一般是平安的,走到被对方掌握的格子则是危险的。(有一些破例,把后走到被敌方兵进击的格子里,不论你有若干子能够吃他的兵,这不论怎样不是好主张。另有,你有意把子送到对方嘴里,然则对方有更主要的格子要求珍爱。)在象棋中,掌握中央是残局的基本目的。然则,掌握才气在某种水平上是很难盘算的,它要求在任什么时候刻都更新数据库,来纪录棋盘上一切被进击的格子。许多顺序都这么做,但我的没有。
  灵活性关于象棋顺序来说其实不长短常主要的,但在是非棋里却异常主要(在残局中有很少子可走的一方会堕入很深的逆境)。而对围棋而言,对棋盘的掌握则是胜利的美丽。
 
形势生长
 
  有个教条,下象棋时轻子(象和马)要尽早投入战役,王要尽早易位,车和后只管少动,直到重点时时刻刻作出注定性的进击。这是有许多缘由的,马和象(另有兵)能掌握中央,来支持后的火力,把它们调换进来能为底线疏通车的线路。随着棋局的停止,车就能够够跑到第七行(即最先对对方的兵着手),组成伟大的损坏力。
  我的顺序用了一些因子来权衡形势的生长。首先,任何王和后前没有动过的兵都要扣分,阻挠车的马和象也要扣分,如允许以让后在其他子力出动后才最先动,若是对手另有后,那末王易位到平安职位时则提供很大的加分(有易位权然则没有易位的也提供少许加分)
  你能够发现,形势生长的重点要点在残局阶段很主要,然则马上将失意义。在约莫10回合以后,要权衡的重点要点基本上都发作过了【即能加分的都加了,要扣分的都扣了】
  注重,在西洋棋之类的游戏中,倾向于形势生长能够很欠好。现实上,先走的一方要空出前面一行的空位,这就以前亏损了,而在这些中央制止形势生长,一般是不错的选择。
 
兵形
 
  象棋巨匠门常说,兵是象棋的灵魂。因而新手很难体味的是,强手在对局时会由于一个兵的损失而早早认输。
  象棋书籍中说到许多兵的类型,很多若干是有益的,很多若干是有害的。我的顺序斟酌了以下几点。
  1. 叠兵或三叠兵,一方两个或多个兵在统一列上是很坏的,由于它们的移动相互阻滞了;
  2. 对兵,双方两个兵“头晤面”相互阻挠去路,会引发很大的阻滞;
  3. 通路兵,投军希望到不会有对方兵进击或阻滞时【即统一列和相邻列里都不能有对方的兵】,就会变得异常壮大,由于它们更随意纰漏抵达底线完成升变;
  4. 孤兵,双方都没有同伴兵珍爱的兵,最随意纰漏遭到进击,最要求追求珍爱;
  5. 满兵,棋盘上有太多的兵会滋扰灵活性,为车开放一条纵线才是好主张。
  最终兵形上要注重的是:前面跟了车的通路兵长短常危险的,由于任何吃掉它的子都邑成为车的盘中餐。若是有一个车在通路兵的前面(统一列),那末我的顺序提供极高的加分。
 
王的平安和取向
 
  咱们很早就谈到过王的平安了,在残局和中局里,珍爱王是最主要的,易位是最好的设施。
  然则在残局里,王周围的许多子都没了,他转眼间酿成了进击性子力!把它留在兵阵的前面险些是虚耗资源。
  “取向”(Tropism)在这里权衡的是一个子进击对方王的难易水平,一般用距离来权衡。取向的盘算划定礼貌跟军种有关,不外通用的划定礼貌是,你越靠近对方的王,你对他的压力就越大。
 
一定权重
 
  现在咱们一定了有那些重点要点是要求权衡的,然则咱们怎样注定它们的权重呢?
  这是个异常有价值的问题,能够花几年时刻(也实在一些人在做)用线性搭配的设施来调整评价函数,有时把灵活性设很多一些,有时更强调平安性,等等。我固然希冀有一个一定的谜底,惋惜没有,由于再好的评定函数都邑遇到贫苦和失误。若是你的顺序足够强,那异常不错。若是不是,那末试试其余计划,让它和你正本的顺序下,若是能赢下大少数,那末新的计划就是一个提高。
  有三种要领能够试试:
  1. 经由历程优化评价函数取得的结果,要到达加深一层搜索所到达的异样效果,这长短常难题的。若是你很疑惑,那末宁肯把评价函数设得简朴些,把更多的处置责罚器资源留给Alpha-Beta搜索。【有关资料注解,加深一层搜索约莫可以使棋力提升200(ELO),这是相等可观的。】
  2. 除非你想和天下冠军去比,否则你的局势评定函数没需要要稀奇有用。
  3. 若是你的顺序实在很快,你能够花些时刻用适当的算法来革新评价要领。然则工具棋来说,花上几千年时刻都是有能够的。【这里指用适当的算法来调整权重,譬喻线性回来离去剖析、神经网络算法等,每做一步骤整,都要求用少量的对局来调研,以是事情量异常大。】
  【最终想说明我的看法,即局势评价函数是悉数象棋顺序的中心。人们越来越把精神调集到局势评价函数上,好的象棋顺序往往用上万行的顺序来剖析局势,但它们的作者很少会泄漏出其中的细节。一个最简朴的设施就是去看一些公然了的象棋顺序,譬喻:Crafty的评价函数有4000多行,主要包孕以下四方面的内容:
  (1) 子力价值,仅仅是简朴地把每一个子的价值加在一同;
  (2) 兵的价值,不只斟酌兵的一定职位,也斟酌通路兵(稀奇在残局中)
  (3) 跟每一个子职位有关的子力价值,即子力的天真性、谐和性等重点要点;
  (4) 王的平安性,既斟酌王周围的兵阵,也斟酌能够进击王的其他棋子。
  上述译自Crafty源顺序的第一段,其中的细节能够参考这个顺序的其他片断。】
 
下三十天
 
  好了,没有下三十天了,就这些了。
  若是我要把这个连载拖得长一些,我能够写一些关于残局库(Opening Book)、残局库(Endgame Library)、稀奇重点一定象棋的硬件,以及许多许多其他的内容。我固然写得出来,然则我才不写呢。我计划把一局部内容留下到我往年秋天要写的书里,其他内容我也不知道究竟有无用。另有一个缘由,我也懒得写下去了。
  我希冀你们喜欢看我的器械,希冀你们能学到两三个有用的窍门。若是真的学到了,那末明年看我写的其余器械吧(GDCE3)【我也不知道是甚么学科,GDC似乎是图形显现掌握芯片,横竖和象棋没任何相干】,而且在你公司里的项目师或顺序员眼前好好夸我,好吗?
  太愉快了!
 
  François Dominic Laramée200010
 
  【译后注:总的来说Laramée写的器械照样对照浅易的,没有代码和过于专业的知识(纵使是有,我也以前在译注中说清楚明晰)。然则也许是我英语水平的问题,他的某些表述其实不能体谅,因而纵使很别扭地翻译出来了,照样要在译注中加上自身的体谅,这让我异常费劲。不外总算一切都完毕了。
  与此同时,我还网络了许多专题方面的美文,也许有三十来篇,正本是想翻译的,以展现我在顺序设想方面的结果,然则没有时间了(况且在Laramée的美文里我也展现过瘾了)。我置信读者看了这六篇连载后一定以为还不足,最少关于想设想象棋引擎的读者来说,仅仅看这么点器械是远远不足的,因而我把这些原文放在我的网站上,置信关于学历顺序设想的读者来说,看这些美文应当是没有问题的。
  若是你读到有疑问的中央,无妨和我交流,也许你的疑问是很就价值的。若是你找到文中显著的毛病(包孕错别字),一定要写信给我,我的事情是无偿为象棋喜爱的人和顺序设想师做的,以是也要求你们的资助。】
 
  原文:http://www.gamedev.net/reference/programming/features/chess6/
  译者:象棋百科全书网 (webmaster@xqbase.com)
  类型:全译加译注
  • 上一篇 国际象棋顺序设想():低级搜索要领
  • 下一篇 概述
  • 返 回 象棋百科全书——计算机象棋
  • www.xqbase.com