社区
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理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
...全文
314
7
打赏
收藏
做个中国象棋,遇到瓶颈了
这是我目前发现的最强的基于JS的中国象棋AI:https://www.cnblogs.com/royhoo/p/6426394.html 该程序能思考6-8层(相当于3-4回合),用时不超5秒。足以对抗一般象棋玩家。 下面是我写的象棋AI: 该AI也是基于alpha-beta搜索。但目前搜索6层需要10多秒,在性能上和前面的差了很多。我写了很长时间了,感觉象棋AI理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
复制链接
扫一扫
分享
转发到动态
举报
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源代码经过调试代码】是一个针对Windows平台开发的桌面应用程序,它利用Microsoft Foundation Classes (MFC)库来实现
中国象棋
的游戏逻辑和用户界面。MFC是微软提供的一种C++类库,它封装了Windows ...
JAVA多线程游戏设计之
中国象棋
本主题聚焦于使用Java多线程技术来设计一个
中国象棋
游戏,这涉及到游戏逻辑、用户交互、棋盘渲染等多个方面的综合运用。 首先,
中国象棋
游戏的核心是其规则引擎。在Java中,我们可以创建一个单独的线程来处理游戏...
中国象棋
C++完整项目实现教程
简介:本项目利用C++语言在Visual Studio环境中开发出功能完备的
中国象棋
游戏。项目内容不仅包括棋盘和棋子的基础布局及规则,还实现了人机对弈和人人对战模式。通过项目实践,开发者将学习C++编程、VS IDE使用、...
基于Swift的iOS
中国象棋
游戏HotChess开发入门
简介:本文介绍了使用iOS入门代码开发名为HotChess的
中国象棋
游戏,适用于初学者和经验开发者。探讨了Swift编程语言、UIKit框架、Core Graphics和Core Animation、游戏逻辑、MVC架构、SpriteKit/SceneKit、用户交互...
原创 关于
中国象棋
的
原创 关于
中国象棋
的
JavaScript
87,996
社区成员
224,708
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章