提子算法的好坏对整个程序的性能影响是很大的。尽管在实际对局中,提子行为并不经常发生,但每次落子时计算机都得判断是否需要提子。根据围棋规则,可得提子算法的步骤,以黑棋落子为例:
1)依次判断与该落子点相邻的白子所在棋串(棋盘上实线相连的棋子集)的气,如为0,则提走棋串。
2)如果1)中不存在提子行为,则计算该落子点所在棋串的气是否为0,若不为0,则落子合法,若为0则不合法。
这只是个粗略的步骤,其中涉及到两个问题:1)怎样取得棋串。2)怎样计算棋串的气。
一个显而易见的方法是——需要时深搜棋串,顺便求出棋串的气。这个方法的巨大cost也是可以想见的,因为存在大量的重复计算。于是考虑在棋局进行过程中保存棋串的数据结构——一种解决方案是把一个棋串作为一个循环链表,棋子作为链表的结点。这是个不错的方法,因为棋串的合并操作可以方便地进行,但具体实行起来又会碰到些问题需要解决——比如怎样快速地通过一个棋子找到所在的棋串链表。
我的方案显得简单一些,把棋串作为并查集的树形结构,树根的坐标可作为树的标号。同样可以方便地进行棋串合并操作。棋串在棋局进行过程中保存气的坐标,棋串合并时只需作或运算。
分享到:
相关推荐
基于FPGA的围棋提子算法的设计与实现.pdf
人工智能学习应用实验作业,围棋博弈,使用的是java语言实现
- 此项目的核心算法是强化学习——基于蒙特卡洛树搜索地UCT算法,参考了AlphoGo的算法原理实现了基本的MCTS算法和UCT算法,同时也创造性地对算法框架、回报函数、超参数等进行了改进,从而更适用于围棋死活题求解。...
围棋博弈机器学习算法的研究及应用.pdf
内容索引:VB源码,游戏编程,围棋,提子算法 棋盘中心点横坐标,棋盘中心点纵坐标,棋盘从(1,1)点到(1,17)点在VB环境中的长度,1表示是黑子,0表示无棋子,-1表示是白子,只有该标志为真,才可以下棋,全局固定变量,每...
不围棋功能现,命令行界面,没有图形界面,但实现了对战等功能
人工智能 五子棋 围棋 博弈树 实验 课程设计
c#开发的围棋,实现提子算法,分享给大家
围棋C语言程序实现源代码.docx围棋C语言程序实现源代码.docx
围棋C语言程序实现源代码.pdf围棋C语言程序实现源代码.pdf
人工智能-机器学习-围棋博弈机器学习算法的研究及应用.pdf
java实现的围棋基本算法,实现围棋的基础功能,落子,切换棋手,吃子
大学生计算机博弈之不围棋的算法研究,该文档有利于深入剖析不围棋算法,从围棋继承下来的算法,在不围棋领域有很好的应用。
分析了幻影围棋计算机博弈系统的模型与结构,结合Alpha-Beta搜索算法和蒙特卡洛算法的优势,依据棋盘状态采用不同的搜索算法,调用搜索引擎产生下子,在此基础上开发实现了一个幻影围棋博弈系统,能有效的交互和处理...
DarkForest这是一个幻影围棋计算机博弈程序,一个可以和人类下棋的程序。幻影围棋介绍:幻影围棋是一项欧洲的棋类游戏,因为下棋规则是基于围棋,但又是在围棋的基础上加入了信息不完全的限制——看不到对方的落子,...
围棋 算法 提子 胜负判断 代码 围棋 算法 提子 胜负判断 代码围棋 算法 提子 胜负判断 代码
[纯C语言 + Win32 API]一步一步写个围棋程序之十二:实现对弈
本论文将快速走子网络方法应用在围棋博弈的蒙特卡洛树搜索算法中,实现了基于深度学习和蒙特卡洛树搜索算法的围棋博弈智能体,利用本论文实现的智能体与传统的基于模式的蒙特卡洛树搜索算法智能体对弈,验证了算法的...
以前编写的Win32围棋对棋程序,生成一个exe文件,运行菜单中有自己建立服务端,其它人可以观战。先一个程序建立棋局,第二个人输入地址加入到对棋,再是其他人加入到观战,是客户/服务方式,程序有点老。主要是对局...