【五子棋AI】启发算法——PV与杀手启发

来源:互联网 发布:道闸软件 编辑:程序博客网 时间:2024/06/06 06:42

          经常见到的是杀手启发。它用一个arr(maxdepth)(1)指记录PVS的最佳节点,当arr(curdepth)(0)无记录时记录到其中,如果有并且不与arr(curdepth)(0)相同,则arr(curdepth)(1)=arr(curdepth)(0)然后再记录到arr(curdepth)(0)。这样做的意义在于把当前深度上最新的和次新PV走法记录下来,在搜索到相同深度时,先搜索最新的,然后是次新的,这可以产生大量剪枝,当然你可以尝试记录3组甚至更多,但前人告诉我们,还是2组比较好。这就是杀手启发,杀手是说以前的好走法。在我的程序中,没有写杀手启发的代码,我使用了一个独有的与杀手启发具有类似功能的技术。但无果你没有更好的做法,杀手启发是一个必选启发算法。

         PV启发,这就是我使用的启发算法,将PV走法路线传入走法生成器。这本来是弥补”冲棋点“搜索不会”做棋“以及”漏掉妙棋“的做法,但确实起到了杀手启发的作用,虽然不一定有两层杀手效果好,但也有其出色之处——曾经在测试时,AI下了一步”风马牛不相及“的棋——成了一个21,一个距离3的22(在中局走法生成器我使用了强制剪裁——不生成这样的”低棋型“),当时的第一意识就是又出BUG了,等我改你丫的,其实我的五子棋水平不咋地,从前面提到的0.7版我就没赢过AI,但五六步之后我看到VCF的时候才意识到这个局面是一个典型的PV启发获得成功的例子。


         当然,无论是PV,还是杀手,都需要在生成器中加入额外的识别代码来识别是否是合理招法(空位)。因为”冲棋点搜索”的优势,所以由冲棋点排序表得到的走法一定是空点,所以这里说“额外”的扫描,如果你使用历史表等一些启发方法,大约每个走法都需要识别是否是合理招法或者进行一些额外的设置。


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

http://www.vbdevelopers.org

http://www.softos.org


原创粉丝点击