黑白棋的一些估值技术

黑白棋游戏中,对局面估值是决定棋力的根本因素。目前大多数黑白棋程序使用的估值方法有三种,基于棋子位置价值的估值、基于行动力的估值和基于模板的估值。这里简单介绍下前两种估值算法。

基于棋子位置价值的估值
很多人刚学会黑白棋的时候往往贪多,总想吃掉对方更多的棋子,这种算法叫做大食策略,结果往往输得很惨。
问题在于: 下棋过程中,最重要的不在于你的子有多少,而在于无论如何也不会再被对方吃掉的子有多少。这种子就叫做稳定子(stable discs)。在角上的子永远不会被吃掉,所以角上的子是最简单的稳定子的例子。如果占了角,同时又占了相邻边,那么该边上的子也就成了稳定子。
于是就产生了基于棋子位置价值的估值。这种算法的意思是,不同的棋格有不同的值,角的值大而角旁边的格子值要小。忽视对称的话,棋盘上有10个不同的位置,每个格子根据三种可能性赋值:黑棋、白棋和空。更有经验的逼近是在游戏的不同阶段对格子赋予不同的值。例如,角在开局阶段和中局开始阶段比终局阶段更重要。
采用这种算法的程序实现起来很简单,速度也快,于是许多程序开始采用这种逼近。但使用这种估值方法的程序棋力总是很弱,不过对于许多程序设计者来说,它有能力使程序强到击败它的创造者…

基于行动力的估值
更好的估值方法是根据行动力和潜在行动力来估值。首先介绍这两个概念。行动力是指一个局面上可以下棋的地方的多少,比如某个局面有10个地方可以走棋,那么行动力就是10。潜在行动力一般指对手棋子周围的空格数,因为只有对手棋子旁边的空格处才是可能可以走棋的地方,因此在一个局面上,对手旁边的空格越多对自己越有利,这就是潜在行动力估值。
这种算法的原则就是给自己留下好棋,让对手没有好棋可走。这拥有更久远更强的全局观,而不像棋格表那样局部化。如果代码有效率的话,可以很快发现,它们提高棋力很多。和另一种人类的策略一样,许多基于行动力估值的程序同时还有一些边角配置的知识,试图在中盘早期使棋子最少。

估值合并
一般程序的估值基于许多的参数,如行动力、潜在行动力、余裕手、边角判断、稳定子。但是怎么样将他们合并起来得到一个估值呢?一般采用线性合并。设a1,a2,a3,a4为参数,则估值s:=n1*a1+n2*a2+n3*a3+n4*a4。其中n1,n2,n3,n4为常数,术语叫“权重”(weight),它决定了参数的重要性,它们取决于统计值。

黑白棋程序的下载
http://www.othello.cn/downloads.htm
http://blog.csdn.net/NowCan/archive/2004/10/23/148621.aspx
http://www.soonghwee.cn/download/
http://www.disco.com.hk/disco.com.hk/6link/main6.htm

黑白棋战术指南
可以参看: FEDERATION FRANCAISE D'OTHELLO, 是法国黑白棋联盟所编写的一本小册子的电子版
里面对黑白棋战术有非常完整的研究: http://www.othello.cn/tactics1.htm#a1.1

发表评论

电子邮件地址不会被公开。 必填项已用*标注