# 介绍
这学期的五子棋对我来说真是意义非凡,他驱动我从一个只是对c语言略知一二的几乎纯小白学会了很多东西,上网查资料,翻阅各种博客,提前预习一些数据结构,一个学期一大半空闲时间都花在了写五子棋,从最初的完全无从下手,到能够自己创新出一些优化的东西。
依稀记得我的五子棋第一次动起来会堵人那个晚上,内心激动无比,感觉我就是“c语言大佬”QAQ,不过后来发现其实都是bug,会堵人纯属意外。
我这学期第一个月写出了能和我这个五子棋小白对打的版本,但后续的改进陷入了瓶颈,大部分时间花在了改进时间性能,没有优化算法,最后甚至没时间仔细研究一下VCT和VCF,棋力很一般,和几个网上找到的几个AI下都是完败,为此还是有些遗憾。
最后期末比赛中决赛平局,我们双方都是黑胜白负,最后猜大小输了喜提亚军。不过和冠军在小组赛比赛时我是黑白都负,所以这个亚军一点也不冤。
参考资料:
+ 象棋百科全书:<https://www.xqbase.com/>
+ gobang:<https://github.com/lihongxun945/gobang>
+ 清月连珠:<https://www.cnblogs.com/zcsor/p/3383090.html>
+ 《PC游戏编程(人机博弈)》 王小春
# 实现的东西
本AI采用PVS改进的alphabeta剪枝算法为主干,通过启发评估早期裁剪选出每步15-20个走法实现9层搜索加15层算杀。
+ PVS主要变例搜索
+ 迭代加深
+ 位棋盘生成走法
+ 5-15长度行评分缓存
+ 早期裁剪
# 未实现的东西
当初立下壮志,结果最后一个星期成了小阳人,加上最后也有点懒惰,一些已经有了思路的东西最终没有实现。
## **冲棋点哈希表**
我预先缓存了一行最多15个棋子所有情况对应的评分,因此大大缩短了评估时间。
事实上不仅可以缓存评分,还可以缓存对应棋盘的冲棋信息,即一行哪些点可以冲棋,是活三还是冲四,如此一来在获取走法的时候也会相当迅速,特别是在已经有活三冲四的情况下,我们很多时候只需要搜索冲四活四点进行防守或反击,在五子棋中后阶段大多都是这种情况。更精确更少的走法同时也意味着更深的深度。
## **开局库**
已经证明即使有禁手,黑棋也是必胜的。我在网上也找到了一些开局的必胜谱,但是我不知道怎么解析这些lib文件,貌似是什么静态库,虽然通过Renlib软件打开可以看谱,但是总不能纯靠手打录入这些信息吧,最后还是放弃了。
## **威胁空间搜索**
原文应该是Go-Moku and Threat-Space Search,作者:LV Allis,H.J. Van Den Herik,MPH Huntjens,不过国内十多年前的某篇五子棋论文里面有雷同的中文版,大概就是阐述了VCT和VCF的理论基础,给出了一个找致胜威胁的具体方法。
# 一些被弃用的东西
## **空着裁剪**
参考<https://www.xqbase.com/computer/advanced_nullmove.htm>,其实就是一步不下棋,然后给对方下,最后返回值仍然好到超过该层的beta值,说明正常下那肯定也会超过beta,那就直接返回beta。
## **zobrist置换表**
因为刚开始没有接触哈希表这种东西,一直想不通怎么才能实现这个置换表,查了好多资料终于实现以后却发现效果非常一般,占了好几百兆也就快了20%左右,然而评价方式改为局部刷新后,存储整个局面分的置换表感觉就不太有用了,但是这种哈希表缓存的思想特别有用。
## **历史表排序**
alpha-beta剪枝的顺序特别重要,因此可以通过迭代加深获取浅层节点的历史评分对节点进行排序,为每层搜索的最好节点和beta截断节点设置一个历史分,根据历史分排序显著提高速度,实现简单效果立竿见影。不过为了早期剪枝,同时有了评分表,就放弃了这种排序,直接通过评分排序。
## **MTD(f)搜索算法**
mtd(f)和pvs都是alphabeta剪枝的优化算法,只需要加几行就可以带来一定的速度优化,不过mtd(f)要略复杂一点,并且非常依赖于每次搜索的评分期望值,因此mtd(f)耗时不稳定。据说mtd(f)在并行计算上有优势,奈何本人水平太次,看不懂c语言并行计算的部分。
没有合适的资源?快使用搜索试试~ 我知道了~
ucas某菜鸡的五子棋作业UCAS-Renju.zip
共20个文件
c:8个
h:8个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 91 浏览量
2024-05-12
17:14:52
上传
评论
收藏 53KB ZIP 举报
温馨提示
五子棋游戏想必大家都非常熟悉,游戏规则十分简单。游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【技术】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
资源推荐
资源详情
资源评论
收起资源包目录
ucas某菜鸡的五子棋作业UCAS-Renju.zip (20个子文件)
manualType.properties 10B
UCAS-Renju-master
Renju
src
forbid.h 662B
set.h 1KB
evaluate.c 16KB
AI.h 1KB
set.c 5KB
game_mode.h 315B
common.c 540B
AI.c 13KB
common.h 2KB
main.h 158B
evaluate.h 6KB
bit_board.c 8KB
bit_board.h 2KB
game_mode.c 3KB
main.c 898B
forbid.c 6KB
提交版.exe 66KB
README.md 4KB
系统.txt 7B
共 20 条
- 1
资源评论
枫蜜柚子茶
- 粉丝: 7243
- 资源: 5114
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【贝叶斯算法】该文件是一个用于实现贝叶斯算法的 Python 脚本 贝叶斯算法基于贝叶斯定理,用于分类和预测问题
- 3个小项目分别是利用 Python 实现报表自动化、某连锁超市、某银行数据分析,展示了问题分解、数据清洗、数据分析与可视化的过程
- 基于Java图书管理系统毕设(源码+使用文档)
- COLMAP3.9版本下载资源包
- Python和R语言应用案例,提供1年的图书馆借阅数据,并进行大数据分析
- 基于Java局域网监听软件毕设(源码+使用文档)
- 遗传算法学习笔记 -DEAP库学习笔记
- MNIST手写数字识别数据集
- 推荐系统基本知识,相关算法以及实现 (python)
- Python大作业相关文档2024.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功