社区
JavaScript
帖子详情
做个中国象棋,遇到瓶颈了
大狗狗
2019-08-29 07:10:57
这是我目前发现的最强的基于JS的中国象棋AI:
https://www.cnblogs.com/royhoo/p/6426394.html
该程序能思考6-8层(相当于3-4回合),用时不超5秒。足以对抗一般象棋玩家。
下面是我写的象棋AI:
该AI也是基于alpha-beta搜索。但目前搜索6层需要10多秒,在性能上和前面的差了很多。我写了很长时间了,感觉象棋AI理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
...全文
373
7
打赏
收藏
做个中国象棋,遇到瓶颈了
这是我目前发现的最强的基于JS的中国象棋AI:https://www.cnblogs.com/royhoo/p/6426394.html 该程序能思考6-8层(相当于3-4回合),用时不超5秒。足以对抗一般象棋玩家。 下面是我写的象棋AI: 该AI也是基于alpha-beta搜索。但目前搜索6层需要10多秒,在性能上和前面的差了很多。我写了很长时间了,感觉象棋AI理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
大狗狗
2019-09-24
打赏
举报
回复
昨天又发现一个中国象棋JS程序:
https://bbs.csdn.net/topics/390750777
下载地址:
http://download.csdn.net/detail/xzy88/7147611
这个JS象棋比较简洁易懂,从中我获得灵感,发现了我的程序和royhoo(最开头提到的)程序在底层代码上的差距,经过改进。现在我的6层搜索用时已成功降到5秒以下,和royhoo的不相上下了。我已经站到了royhoo的身后。
大狗狗
2019-09-22
打赏
举报
回复
加上置换表了,现在搜索6层(三个回合)平均用时低于10秒了。在速度上依然没法与开头我提到的JS象棋相比。我也研究了下它的代码,发现:
1. 双方在最基础的步法获取getMoves性能上是接近的,连续执行100万次,我的用时仅比它多数百毫秒。
2.我对搜索方法进行了尽可能优化,在alpha-beta方法里采用了杀手表及历史表启发。它的代码里诸如空着裁剪之类的技术被我注释掉了,仅保留杀手表及历史表。不同的是我对静态评分函数进行了精简,在消除水平线效应前提下,尽可能减少分枝。
3.在同样棋局下进行6层搜索,我的代码共搜索约100万个分枝,它的代码则比我多搜了二十多万分枝(它的静态评分函数未精简)。但让我搞不懂的是,它的速度反而大大快于我。
目前我的代码还未做到最优化,比如车的出动速度慢,对空头炮的防御不足。但战斗力还是可观的,甚至可以做到弃大子绝杀。打败我这样的象棋菜鸟问题不大。只是在时间上让人不能完全满意。6层三回合的搜索,在电脑象棋软件里也就是最多一秒钟的事。最开头提到的那个JS象棋,我们在底层上是完全不一样的。这也是我搞不懂为啥它搜6层,分枝比我多,用时却大大小于我的原因。
文盲老顾
2019-09-09
打赏
举报
回复
mark,收藏起来慢慢看
大狗狗
2019-09-08
打赏
举报
回复
通过优化数组,6层用时减到7秒以下。这是在开局情况下,中局阶段棋子数量减少搜索用时也大幅减少。勉强能达到要求了。如果需要还可以把置换表再加上去。大家可以看看我写的文章:
https://blog.csdn.net/Win32FanEx/article/details/89712719
冰川711
2019-08-30
打赏
举报
回复
让我想起了 FC版的中国象棋 第三个老头~
大狗狗
2019-08-30
打赏
举报
回复
楼上的黑白棋写的很好,佩服。我感觉置换表适用于较深的搜索,即10层以上。而对于JS版的中国象棋程序,由于语言局限,想实现10层以上搜索基本不可能。(电脑思考时间不超过5秒)JS版中国象棋程序搜索层次也就是4-8层。这种较低层次下,置换表作用不大。我最开始提到的那个JS中国象棋,我下载代码后,把它的置换表注释掉,结果发现对速度影响并不大。而MTD(f)算法是更高级的技术了,我不打算考虑使用。
我使用了历史启发和杀手启发,目前我6层搜索要查看到近100万的分支,耗时在10秒左右。开局、中局阶段每一步大约有40种走法,如果能在8次内找到最佳走法,6层搜索查到的分枝不到30万,剩下的都被剪了。如果在10次内找到最佳走法,那么要查找的分枝就是100万。我觉得自己的算法不好但也不太差。但10秒的用时太长了,我的目标是控在5秒内,最好是3秒左右,但必需保证6层搜索。
我想在getMoves方法上下功夫,但我发现在编程中,无非就是空间换时间,但100万的分支,光是用来存贮mvs,就是惊人的空间消耗!我觉得自己已经技穷了。。
天际的海浪
2019-08-29
打赏
举报
回复
我写过一个黑白棋的AI
https://blog.csdn.net/jslang/article/details/46712823
你用置换表了吗?可以加入历史启发和MTD(f)算法等加快alpha-beta搜索。 看看校验棋子走法和局面估价函数运算时间是不是过长。 代码中循环最好都用while()和for()。不要用数组的forEach()之类的方法。for( in )也尽量少用。
Python实现
中国象棋
游戏源码解析
本文聚焦于Python实现
中国象棋
游戏的源码。介绍了Python在游戏开发中的应用、优势及未来趋势,深入探讨
中国象棋
规则的编程实现,包括棋子和游戏规则。还阐述了棋盘与棋子的数据结构设计、游戏逻辑与胜负判断,以及用户界面和图形展示的实现,提供学习Python游戏开发的重要资源。
突破传统对弈
瓶颈
:VinXiangQi如何用AI重构
中国象棋
体验
VinXiangQi是一款基于YOLOv5视觉识别、Fairy-Stockfish决策引擎和跨平台自动化技术的开源
中国象棋
辅助工具。它解决人工录棋低效、策略计算延迟及多平台兼容难三大痛点,实现0.3秒高精度棋盘识别、百万级局面/秒评估能力,并支持JJ象棋、天天象棋等主流平台自适应交互,显著提升人机协同对弈效率与教学体验。
python
中国象棋
github_GitHub - linbirg/icyChessZero:
中国象棋
alpha zero程序
icyChessZero是一个受Alpha Go Zero启发的
中国象棋
深度学习项目,目标是训练出达到人类中上水平的棋力。项目尚在开发中,采用分布式训练,已有四台GPU机器参与。文章介绍了项目的现状、推荐的运行环境和加入集群的步骤,以及未来的发展计划。
中国象棋
C++完整项目实现教程
本项目用C++语言在Visual Studio环境开发
中国象棋
游戏,涵盖棋盘棋子布局规则、人机对弈和人人对战模式。介绍了C++编程基础、VS IDE使用、象棋规则实现、人机交互、图形用户界面设计等知识,助开发者掌握综合技能。
中国象棋
将帅问题
本文记录《编程之美》中
中国象棋
将帅问题,要求在只有将帅且只能在田字格走时,列举不冲突位置并只用一个byte存储。分析了用前4 bits存将、后4 bits存帅的存储方式及存取操作,还对比了不同代码实现,指出计算余数是
瓶颈
,可考虑用减法替代。
JavaScript
87,987
社区成员
224,683
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章