优化黑白棋估值参数

    实际是个统计工作。但这里不打算讲模板参数的计算,因为模板估值本身可能不少人还不了解,另外,模板参数计算起来非常复杂,虽然其原理并不难,详细原理请参考 http://www.cs.ualberta.ca/~mburo/ps/improve.pdf ,本文实际是对这篇论文的简化和个人理解。顺便说一下, http://www.cs.ualberta.ca/~mburo/publications.html 这里有很多关于黑白棋的论文,要写黑白棋的朋友不可不看。
    相信大家对稳定子、行动力、潜在行动力的概念都已经很清楚了。所以在此考虑一个简单的估值模型。f(p)=w1*f1(p) + w2*f2(p) + w3*f3(p),其中p为一个局面,f1是稳定子个数,f2是行动力,f3是潜在行动力,w1,w2,w3是他们的权重。要估值准确,就需要设置w1,w2,w3的值,通常我们都是猜测他们的值,或根据经验来设定。但是这样不能达到最优。实际上,我们可以统计大量的已知结果的棋局,来求出他们的值。对于已知的棋局,其结果是已知的,那么对于大量的棋局,我们要使得每个局面下通过f(p)计算得到的值尽量接近最终结果,这就是一个多元线性拟合问题。最终的目的是使每个局面的估值误差的平方和(我认为绝对值的和也可以)达到最小化。
    对于这类问题,一般可以用多元线性回归来求解,求解一个方程组。但对于这里的情况而言,由于样本数量巨大,可达数百万个局面,直接求解方程组已经不可能。只能采用逐次逼近的办法。用w来表示向量(w1,w2,w3),f表示向量(f1,f2,f3),逼近迭代式如下
w(t+1)=w(t)-b(Grad(E(w),w))*w(t),其中b>0是一个重要参数,控制了迭代速率。
其中E(w)=Sigma(Delta(w,k)^2)/N,k=1...N
Delta(w,k)=局面k的估值和局面最终结果的差值,Delta(w,k) = r(pk) - (w1*f1(pk) + w2*f2(pk) + w3*f3(pk))
N是总局面数,Sigma是求和
Grad(E(w),w))是对E求w的偏导数,注意,这里是向量
结果是 -2*Sigma(fi(pk)*Delta(w,k))/N
因此,最终的迭代式就是
wi(t+1)=wi(t) + 2*b*Sigma(fi(pk)*Delta(w,k))/N,k=1...N
其中wi的初始值可以选择0,但我对其中b的取值还不知道如何去估计,只能随便给了一个,注意,b取值过大可能导致迭代不收敛。
    以上讲了一个简单的估值模型,实际应用中,估值参数在不同的游戏阶段有很大的不同,因此需要分段处理,但处理方法一样。比如将游戏分为20个阶段,根据局面中棋盘上剩余的空格数来分段,或者干脆分为60个阶段,每一步都是一个阶段。

你可能感兴趣的:(黑白棋研究)