社区
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理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
...全文
333
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 )也尽量少用。
中国象棋
的MFC源代码经过调试代码
中国象棋
的MFC源代码经过调试代码,直接就可以运行,有需要的赶紧下载
JAVA多线程游戏设计之
中国象棋
JAVA多线程游戏设计之
中国象棋
以及PDF版实验报告
中国象棋
C++完整项目实现教程
简介:本项目利用C++语言在Visual Studio环境中开发出功能完备的
中国象棋
游戏。项目内容不仅包括棋盘和棋子的基础布局及规则,还实现了人机对弈和人人对战模式。通过项目实践,开发者将学习C++编程、VS IDE使用、象棋规则实现、人机交互、图形用户界面设计、事件驱动编程、文件数据处理、错误处理与调试,以及单元测试等综合技能。
从零到一:Flutter多平台
中国象棋
引擎架构与实战指南
你是否曾为实现一个支持Windows、Web、Android多平台的
中国象棋
应用而头疼?是否在棋盘逻辑、AI引擎集成、资源管理等方面
遇到
过难以攻克的技术
瓶颈
?本文将带你深入剖析基于Flutter框架的
中国象棋
项目架构设计与实现细节,通过12个核心技术点的深度解析,帮助你掌握跨平台游戏开发的精髓。 读完本文,你将能够: - 理解Flutter多平台项目的架构设计与模块划分 - 掌握
中国象棋
核心规则...
HTML5实现的
中国象棋
在线小游戏:NAS部署与WebStation技术应用
中国象棋
,作为一种有着悠久历史的策略型游戏,不仅在中国乃至在世界范围内都有其忠实的爱好者群体。随着移动互联网和智能终端的普及,通过HTML5技术实现一个
中国象棋
小游戏,可以让用户随时随地在浏览器上体验到传统象棋游戏的魅力。本项目旨在利用HTML5的相关技术特性,如Canvas、LocalStorage、Web Workers等,构建一个无需插件即可在现代浏览器上运行的
中国象棋
小游戏。通过这样的方式,我们将为用户提供一个交互良好、运行流畅的在线象棋平台,增强用户体验。
JavaScript
87,994
社区成员
224,697
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章