五子棋人机对战的实现

最近我一直在编写五子棋的AI,但是搞了这么长时间,棋力一直停留在比较水的阶段,难以有什么比较好的突破。不知道贴吧里有没有别的朋友研究过类似的问题,于是想到来贴吧讨论一下。
我的程序主要遵循如下思路:
首先,建立几个棋型计算函数,可以判断棋盘上的各种冲四、活三、活二等棋形,并给每种棋形赋予适当的分值。
第一步,判断是否存在VCF。若存在,直接返回该点的坐标。若不存在,则进行第二步:对于每个落点,判断对方是否存在VCF。若不存在,则称该点为“可行落点”。
然后,在每一步分析时,首先利用上述棋形判断函数计算每个可行落点出的分值。然后,选取分值较高的若干个点。
对于每一个点,假设当前行棋方将棋子落于该点,然后对于下一步继续进行树状递归搜索。当搜索达到一定深度之后,使用棋形判断函数计算棋盘上各种棋形的数量,并确定各种行棋结果的分值。使用MAX-MIN搜索,并利用alpha-beta剪枝,选取在最优行棋路径中可使最终分值最高的落点,也即当前的最佳落点。
我的AI大概就遵循这个思路。下面说一说这个程序的性能吧。
计算速度:在我的计算机中,每秒钟至多能计算1600步左右。(我的最初版AI是每秒钟40步,如今已经提高很多了)对比目前大多数的主流五子棋软件,这个速度是远远不足的。对于最高等级(10级),大概可以再1-2分钟内走一步棋。归根结底,如今棋力较低,根本原因在于计算速度很慢。不知道大家有没有什么更好的算法,可以提高计算速度?
搜索深度:在最高等级(10级)中,对于黑白双方,分别至多可以搜索5步棋,总计10步。其实再深一点也可以,不过搜索时间就难以忍受了。
搜索宽度:在最高等级(10级)中,每一步的搜索宽度分别为16,11,8,6,5,4,3,3,...同理,这个搜索宽度也是在合理时间内能达到的极限了。
棋力:这个多说无益,大家自己试一试吧。总之比较水就是了。
http://pan.baidu.com/netdisk/singlepublic?fid=734215_2758869657
界面:也请大家自己体验吧,图发太多了比较乱。那个控制台就请无视吧,那是我调试的时候使用的。
缺点(或者说BUG):当盘面上的眠三比较多的时候(7-8个),对VCF的分析将会非常缓慢,甚至几十分钟,乃至几个小时。这个我已经想到了解决办法,不过还没有付诸实际。
嗯,就是这样了。我到这里来,一是想分享一下我最近这段时间的成果,二是想知道大家有没有什么好的改进思路。

你可能感兴趣的:(算法,mfc,五子棋)