没有合适的资源?快使用搜索试试~ 我知道了~
PB16110173_徐煜森_五子棋AI1
需积分: 0 0 下载量 21 浏览量
2022-08-03
14:11:58
上传
评论 1
收藏 570KB PDF 举报
温馨提示
试读
11页
1. (推荐)使用 Visual Studio(版本最好大于等于 2017)创建与源代码同 1. 因为在源代码中使用了 system 函数,所以可能无法在 Li
资源详情
资源评论
资源推荐
五子棋 AI 实验报告
徐煜森 PB16110173
本报告包含:五子棋 AI。
一. 实验环境
本次实验所有代码均在 Windows 10 系统下使用 Visual Studio 2017 完成。若
需要编译源代码可以使用以下两种方法之一:
1. (推荐)使用 Visual Studio(版本最好大于等于 2017)创建与源代码同
名的 Visual C++项目 -> Windows 控制台应用程序,将源代码导入;修改
项目属性 -> C/C++ -> 在预处理器定义中添加一行参数
_CRT_SECURE_NO_WARNINGS,之后即可完成编译。
2. 在源代码中删除 Visual C++预编译头 #include "stdafx.h" 之后在 Windows
系统下使用任意 C++编译器编译源代码。
注意:
1. 因为在源代码中使用了 system 函数,所以可能无法在 Linux 系统中编译。
2. Visual C++默认不允许使用 C 中不安全的库函数,因此需要按照上述步骤
添加参数_CRT_SECURE_NO_WARNINGS,来禁止编译时的警告。
与源代码一起提交的可执行文件(.exe 文件)可以在 Windows 系统下运行。
二. 实验输入输出说明
本实验采用控制台进行输入输出。其中输出包含各类提示和当前棋盘情况,
玩家在看到“请输入落子位置”的提示后,输入落子坐标,坐标包括一个行坐标
一个列坐标,表示玩家落子位置,坐标之间使用空格分隔。
输入示例:
输出示例:
游戏开始后会输出提示,之后每个回合都会输出当前是哪方的回合、棋盘状
态、落子位置和落子后的效用值。输出落子后的效用值可以帮助玩家判断局势和
提升棋力。
三. 算法与评估函数
1. 算法分析
本次实验主体算法为 Alpha Beta 剪枝搜索算法。我实现的搜索有三层:第一
层为 Max 层,AI 搜索每种落子位置并选出效用值最大的位置落子;第二层为 Min
层,AI 搜索玩家每种可能的落子位置,并假定玩家选取效用值最小的位置落子;
第三层为效用值层,评价当前棋局的效用值。
Alpha Beta 剪枝的主要思想是通过记录当前搜索结果中最大效用值 Alpha 和
最小效用值 Beta 来减少搜索次数。因为 Min 节点一定会选取效用值最小的策略,
而 Max 节点一定选取效用值最大的策略:当 Min 节点遇到一个效用值小于 Alpha
的策略时就可以知道,它上层的 Max 节点一定不会选取到它的策略,因此可以
剪枝来减少搜索次数;同样对 Max 而言,当它遇到一个效用值大于 Beta 的策略
时,它上层的 Min 节点一定不会选取到它的策略,因此也可以剪枝。
Alpha Beta 剪枝算法在本实验中的作用就是减少搜索次数,从而加快 AI 计算
速度。本次实验第一层 Max 层和第二层 Min 层都会遍历所有可以落子的位置,
来找出最优的策略。若朴素地进行搜索,而不使用剪枝,搜索速度会变得很慢,
可能无法在一回合的限时内完成搜索,另外也会让玩家的体验变差,使玩家抗拒
与 AI 下棋。
2. 评估函数
本次实验对评估函数的设计源自于五子棋的各类棋型。首先介绍五子棋的几
个基本棋型:
a) 连五:五个同色棋子连在一起,获胜。
b) 活四:四个同色棋子连在一起,且有两个连五点(即有两个点可以下,
形成连五),下一回合获胜。
c) 冲四:四个同色棋子连在一起,且只有一个连五点。
d) 活三:可以形成活四的三个连在一起的同色棋子。
e) 眠三:只能形成冲四的三个连在一起的同色棋子。
f) 活二:可以形成活三的两个连在一起的同色棋子。
g) 眠二:只能形成眠三的两个连在一起的同色棋子。
h) 死四:两头都被封堵的四个连在一起的同色棋子。
i) 死三:两头都被封堵的三个连在一起的同色棋子。
j) 死二:两头都被封堵的两个连在一起的同色棋子。
接下来就是为各个棋型设置得分:
连五(长连)被设置为 50000 分,远超其他各个棋型,目的是使 AI 不放过
每个胜利的机会,同时也对玩家的可能胜利的情况进行封堵。活 四 、冲 四 、活 三 、
眠三、活 二 、眠 二 的得分依次递减,指 引 AI 下出更容易胜利的棋型。将死四、死
三、死二的分数被设置为-5,指 引 AI 尽量少使自己的棋型被封堵,同时有尽量多
去封堵玩家的棋型。死棋设置的负分绝对值小于活棋,通过这种设置来鼓励 AI 以
进攻为主,因为五子棋先手优势很大,AI 不断进攻更容易较快取胜。
值得注意的是在计算棋局的效用值时,也要考虑落子位置所带来的收益,落
子在靠近棋盘中心的位置得分应该更多,我设置的落子位置得分如下:
剩余10页未读,继续阅读
挽挽深铃
- 粉丝: 12
- 资源: 274
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0