# 人工智能导论大作业-黑白棋AI
## 实验内容
实验基于python tkinter库实现了一个图形化黑白棋人机对局程序,并实现了实时显示AI落子位置及思考时间等功能。其中AI部分实现了基于Minmax和Roxanne优先级策略的MCTS算法,在与人类玩家的对局中有较好的表现。
## 程序设计思路
实验基于python语言编写,程序划分为四个层次,分别由Board、Board_ui、monte_carlo和Play四个class定义。
### class Board
Board类定义棋盘状态(由一个8*8的numpy数组表示)及当前玩家,该类中方法包括在指定坐标位置落子、判断落子是否合法、判断当前对局状态等(是否获胜、是否有合法位置落子)。
### class Board_ui
Board_ui类使用tkinter库初始化绘制并动态更新棋盘UI,绑定鼠标点击事件,实现人类玩家点击位置落子操作以及玩家和AI轮流落子操作;同时实现按钮功能、弹窗功能及信息文本(AI落子时间、落子位置)的更新展示。
### class monte_carlo
monte_carlo类实现黑白棋AI算法,具体算法设计在后文详细介绍。
### class Play
Play类为整个程序的入口,负责初始化并启动程序。
## 算法设计
实验基于MCTS+Roxanne策略编写黑白棋AI,具体实现如下
### Roxanne策略
Roxanne在《Analysis of Monte Carlo Techniques in Othello》文中结合行动力、稳定子和各位置的权值等因素,给出了一张优先级表,如下所示:
![img](https://camo.githubusercontent.com/50f5c13d3df3d4d1d08e690549d786335ac3d60e329400d285cf93fc17885e12/687474703a2f2f692e696d6775722e636f6d2f347830716b35642e706e67)
本次实验将Roxanne优先级策略应用于MCTS的扩展和模拟过程中,以期更高效地选择最优棋步。
### MCTS
实验使用基于Minmax搜索的蒙特卡洛树算法,即UCT算法。在搜索树中的每个结点均包含当前棋盘状态、子结点列表、父结点、收益分数、结点访问次数以及结点深度。本实验中UCT算法每轮迭代分为以下四个步骤:
- 选择 从搜索树的根节点向下递归选择一个存在尚未被扩展子结点的结点,选择过程由UCB1算法实现。更新结点访问次数。
- 扩展 如果上步选择结点非终止结点,则使用Roxanne优先级策略扩展一个优先级更高的后继结点。
- 模拟 从扩展到的后继结点出发,模拟扩展搜索树,直到找到终止结点。其中模拟过程中也使用Roxanne优先级策略选择每一步的子节点。
- 反向传播 用模拟所得的胜负结果回溯更新模拟路径上结点的收益分数和访问次数。
考虑到初始棋盘状态下模拟过程所需时间成本较高,故在棋盘当前状态深度较浅时,适当减少迭代次数。设置迭代次数如下:
- 当根节点深度depth小于15时,设置迭代次数为60。
- 当根节点深度depth大于等于15时,设置迭代次数为150。
## 功能展示
### 选择是否先手并开始游戏
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427084920987.png" alt="image-20220427084920987" style="zoom:50%;" />
### 玩家落子后AI开始思考并落子
棋盘下方提示AI正在思考
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427085306209.png" alt="image-20220427085306209" style="zoom:50%;" />
AI落子并在棋盘下方显示落子位置(x,y)及花费时间
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427110751494.png" alt="image-20220427110751494" style="zoom: 50%;" />
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427085450954.png" alt="image-20220427085450954" style="zoom:50%;" />
### 当无合法棋步时给出提示并交换下棋方
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427120611186.png" alt="image-20220427120611186" style="zoom:50%;" />
### 游戏结束
显示获胜方及对局总时间
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427102140337.png" alt="image-20220427102140337" style="zoom:50%;" />
### 点击“重新开始”按钮重新开始游戏
<img src="https://github.com/HansSunY/Reversi/blob/main/IMG/image-20220427120823037.png" alt="image-20220427120823037" style="zoom:50%;" />
## 代码及注释
见附件
## 实验中的重难点
1. 程序层次的设计。本人认为应注重策略与机制相分离的原则,尽力保证每个模块(UI、Board、AI)之间的独立性,同时保证每个模块之间的接口简洁和高效。如果编写前没有设计一个好的层次框架,那么在编写过程中会遇到很多问题,本人在实验中深有体会。
2. 对于各种终局情况的考虑和特殊处理。对于一些较为“特殊”的终局状态,如在终局前双方均无合法步数可走等,如果不做特殊处理,会导致出现子节点列表为空等情况。很多细节在实际编程中都要考虑到。
3. AI算法时间优化。本人一方面关注UCT算法中的迭代次数,考虑到棋局开始之初的模拟路径较长,可以适当减小迭代次数,实验中简单实现了一个分段的迭代次数;另一面,在模拟阶段结点depth较小时,会判断是否有必要考虑角点(前几步不可能落在角点),这样可以减少模拟阶段的判断次数,提高效率。本人在这方面的尝试较浅,日后需要更多的探索。
没有合适的资源?快使用搜索试试~ 我知道了~
人工智能导论大作业-黑白棋AI+源代码+文档说明
共12个文件
png:9个
py:1个
md:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 170 浏览量
2023-12-26
00:24:13
上传
评论 2
收藏 323KB ZIP 举报
温馨提示
实验基于python tkinter库实现了一个图形化黑白棋人机对局程序,并实现了实时显示AI落子位置及思考时间等功能。其中AI部分实现了基于Minmax和Roxanne优先级策略的MCTS算法,在与人类玩家的对局中有较好的表现。 - - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 -------- -------------------------------
资源推荐
资源详情
资源评论
收起资源包目录
Reversi-main.zip (12个子文件)
Reversi-main
reversi.py 18KB
LICENSE 11KB
IMG
image-20220427102140337.png 68KB
image.png 6KB
image-20220427085306209.png 20KB
image-20220427120823037.png 28KB
image-20220427110751494.png 28KB
image-20220427084920987.png 27KB
image-20220427085945649.png 69KB
image-20220427085450954.png 25KB
image-20220427120611186.png 86KB
README.md 5KB
共 12 条
- 1
资源评论
- 2301_810332192024-04-25资源内容详尽,对我有使用价值,谢谢资源主的分享。
- weixin_62495322024-03-30怎么能有这么好的资源!只能用感激涕零来形容TAT...
- 2401_828700092024-03-15发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
- logtt22024-01-12感谢大佬分享的资源,对我启发很大,给了我新的灵感。机器学习的喵2024-03-23感谢下载,不懂的可以私聊
机器学习的喵
- 粉丝: 1888
- 资源: 2061
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功