您的位置:首页 > 大数据 > 人工智能

【五子棋AI】启发算法——迭代加深与内部迭代加深

2013-10-08 09:06 881 查看
        α—β剪裁函数会一直搜索到指定深度然后返回,但是当走法生成器生成较多走法或深度设置较深时,往往会导致较长时间无法返回,从而无法进行较为准确的时间控制——因为如果即时返回,我们还没有得到结果,很尴尬的说。于是我们可以尝试搜索较浅的深度,然后返回一个值,如果没有胜利,那么尝试更深的深度。这样配合局面评价记录(置换表技术),可以对更深的搜索有一定的启发作用,而浅层搜索所消耗的时间所带来的负面影响(重复搜索)相对于时间控制和启发作用带来的好处相比要小,所以这是一个被广泛应用的技术,无论核心是PVS,还是MTDF。提到MTDF不得不说我的实验结果来看即使使用粗评价、减少棋型评分差异也没有得到比PVS更好的效果,可能与走法生成器的排序有关。 

        所以,迭代加深是一个非常有用的时间控制和启发方式。而且,代码也非常简单:

      for i = 1 to maxdepth

            vl=alphabetafull(-matevalue,matevalue,i)

      if vl >=winvalue then

      else if vl<=-winvalue then

      end if 

      if lasetime >=maxtime then 

      end if

大体就是这样。

        

            然后讨论一下“内部迭代加深”,内部迭代加深的意思是说在遍历全部可能走法之前,先浅层搜索一下得到一个浅层搜索的最好走法,然后把这个走法放在其他走法前面。也就是说,内部迭代加深是一种基于探测式的走法排序优化。在我的测试中,内部迭代加深起到了非常好的效果,它甚至要比置换表、杀手走法有效很多。所以在明确了内部迭代加深之后,代码应该比较容易写,我参考了象棋巫师的源代码,采用相同的深度约束和空窗探测,也就是说使用了相同的代码,虽然一个是VC一个是VB.NET,但说好听的我又踩了巨人的肩膀子一脚…………

全部文章和源码整理完成,以后更新也会在下面地址:

http://www.vbdevelopers.org

http://www.softos.org
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  五子棋