|

楼主 |
发表于 2008-4-24 01:06:00
|
显示全部楼层
公布战胜人类顶级围棋棋手的"砍树+Monte Carlo 算
砍树+Monte Carlo算法及其原理
提要:本文给编制战胜人类顶级围棋手的程序指出编程时使用的算法及其原理。
几十年来经典计算机博弈界的一个最大的误区是谈到搜索法时老是在讲博弈树.这导致围棋问题的建模错误,因此难以出现突破.
现在已经研究清楚,大多数棋类博弈的数据结构并不是树,而是更一般的图,具体地讲是一个森林.特别是对围棋,其数据结构也是图,但这个图有一些很特别的地方,使得我们可以简化我们的算法为一个多项式的复杂度.我称之为"同态分支概率密度置信",而结点的空间密度分布是极端不均匀的,现已经找到办法,就是在围棋博弈森林中如何使用Monte Carlo算法的变种使得在博弈过程中,博弈方由一棵博弈树跳向另一棵博弈树的过程中,保持一个最大机会不是跳向一棵清晰的,在多项式时间复杂度和空间复杂度内可最终解决的问题的简单树,而是始终保持跳向50%机会是指数增长的复杂树,这样,在博弈森林中的重复博弈过程中,新算法始终保持自己有50%以上的机会跳向复杂度最大的树,如是乎不论是程序还是人类,都无法保证有50%以上的机会使用逆推归纳法穷尽这颗树,从而必须跳向森林中的另外一棵树.这样,使用了我的"森林中的同态分支预测和概率密度置信前向跳跃搜索"算法的程序,不论是和人类还是别的程序博弈,将最少有50%获胜的概率.
因此我们可以认为围棋问题的任何实例再上述策略下得到正确解的概率为p,并且有1/2<p<1 ,所以用Monte Carlo算法解围棋问题时,算法将在理论上是p正确的,该算法的优势为p-1/2。但对同一个局面,该策略总能给出同样的答案,所以Monte Carlo算法应用于围棋是一个一致的算法,如果我们在每一次运行时都独立的选择随机数,就可以将得到不正确的棋步概率变得小于一个指定的任意正整数,因此,Monte Carlo算法的改进算法:"森林中的同态分支预测和概率密度置信前向跳跃搜索"算法就是围棋问题的最终解。这应该就是围棋程序的最终解决方案了。
首先,围棋的初始局面无疑是一个具有时间指数复杂度的问题,目前我们仅仅需要作的是,找到一种算法,能在图的深度优先生成森林里,用多项式的时间找到另外一棵具有时间指数复杂度的树,首先该方法将遍历森林中的全部树改为搜索森林中的具有充分复杂度的树的问题,这就砍去了森林中的绝大部分树,然后再将遍历围棋博弈扩展形的复杂树问题转变变为在深度优先生成森林里寻找一棵(仅仅是无数棵复杂树中的一棵)复杂树的问题,这就又砍掉了剩下的无数棵树,最后将砍树的算法使用Monte Carlo算法优化,这样就又再砍掉了大部分的树,经过这样的砍伐,围棋搜索森林已经变为一种稀疏森林,但在这个稀疏森林中,仍然存在无数棵可以使用多项式时间算清的简单树,程序的任务并不在于找出最大的得分的棋步,而是将局面尽可能的维持在一个算不清的最复杂状态,等待对手犯错误而跳到一棵能算清的简单树上。一旦对手犯了一次错误,这盘棋程序就胜定了。当然程序也可能犯错误而被对手抓住,但与上文所指出,这个概率是1/2,所以程序就与人类的顶尖高手平起平坐了,如果再考虑到机器的不知疲倦的特性,就可以肯定在多盘的重复决战中,程序将战胜人类的顶级高手!
当然本文的结论并不是解决了围棋问题,只是解决了程序使用何种算法可以战胜人类顶级高手的问题。
如上文所指出,围棋问题目前最好的答案是:不贴目黑胜或者和的目数在0-1/4的范围,这个结果应该是目前世界上研究的最好结果了,不知会否有人能给出更好的结果。
这里是一个研究电脑围棋的地方,可以去看看.
http://www.computergo.net |
|