基于博弈树启发式搜索的五子棋游戏

来源:互联网 发布:win10软件注册表 编辑:程序博客网 时间:2024/05/17 15:05

这是人工智能课的一个实验。下面就大概像实验报告那样写了。

1、实验目的:理解和掌握博弈树的启发式搜索过程和α-β剪枝技术,能够用某种程序语言开发一个五子棋博弈游戏。

2、实验内容:设计一个15行15列棋盘,要求自行给出估价函数,按极大极小搜索方法,并采用α-β剪枝技术。采用人机对弈方式,对弈双方设置不同颜色的棋子,一方走完一步后,等待对方走步,对弈过程的每个棋局都在屏幕上显示出来。当某一方在横、竖或斜方向上先有5个棋子连成一线时,该方为赢。

3、关键函数的设计:①估价函数的设计:下子后,求在该点的所有8个方向上4格之内的所有的没有阻隔的白子的和加上没有阻隔的黑子的数目之和,和为估价函数的值。直观来说就是,如果在该点下子后连成同颜色的棋子越多,该点的估价值越大,同时阻挡另一种颜色的棋子越多,估价值也越大。②判断是否有一方胜出:设计is_win函数,在每一次下子后检查是否是终局(一方胜出或者棋盘下满和局)。对于棋盘上每一个已经下了棋子的点,检查其4个方向上是否有连续5颗同颜色的棋子,若有,则有一方胜出。③寻找候选点,用于建立博弈树:对于棋盘上每一个还没有下子的点,测试其附近8个点是否已经下了棋子,若有,把该点加入候选点。④搜寻最佳着点:根据候选点建立4层的博弈树,再利用估价函数对节点进行比较,得出最佳着点。

4、 实验总结:在认真阅读、理解了书本所讲解的原理后,我开始设计五子棋程序。有了概要设计后,我选择了GTK+库来开发程序界面,这也是为了加深自己对GTK的熟悉。我先是做出了一个可以由两个玩家进行轮流下子的五子棋游戏,然后开始着重设计开发游戏的AI程序。经过一定时间的设计开发,最后做出了一个demo。但是发现AI的智能水平太低,根本无法下赢人类玩家。于是我又重新开始考虑估价函数的设计。我始终认为估价函数的好坏直接影响了AI的智能水平,而像其他的极大极小过程、α-β剪枝技术只不过是提高效率也就是提高AI的反应速度的方法。所以我的重点在于估价函数。在看了一下讲解五子棋对弈技术的书籍后,我开始为我原来简单的估价函数加入对“活三”的考虑。改善之后AI的智能明显提高。但还是远远不够,跟它对弈的时候就觉得它好笨。还有很大的改进空间。



2012-06-08

原创粉丝点击