社区
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理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
...全文
394
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实现
中国象棋
游戏源码解析
htmltable {th, td {th {pre {简介:Python作为一种流行的编程语言,在游戏开发领域同样表现出色,尤其适合实现策略丰富的
中国象棋
。本项目提供了一个完整的Python源码压缩包,包含运行
中国象棋
所需的所有代码。玩家可体验使用兵、炮等棋子的规则,通过棋盘表示、棋子类、游戏逻辑、用户界面和AI算法等模块来实现游戏。源码有助于学习Python面向对象编程、游戏逻辑构建以及代码组织技巧,是提高Python编程能力,特别是在游戏开发领域的重要资源。
python
中国象棋
github_GitHub - linbirg/icyChessZero:
中国象棋
alpha zero程序
icyChessZero
中国象棋
alpha zero这个项目受到alpha go zero的启发,旨在训练一个中等人类水平或高于中等人类水平的深度神经网络,来完成下
中国象棋
的任务。目前这个项目仍在积极开发中,并且仍然没有完成全部的开发,欢迎pull request 或者star。 然而受到计算资源限制,这样庞大的任务不可能在一台机器上完成训练,这也是我完成了分布式训练代码的原因,希望各位小伙伴能...
中国象棋
C++完整项目实现教程
简介:本项目利用C++语言在Visual Studio环境中开发出功能完备的
中国象棋
游戏。项目内容不仅包括棋盘和棋子的基础布局及规则,还实现了人机对弈和人人对战模式。通过项目实践,开发者将学习C++编程、VS IDE使用、象棋规则实现、人机交互、图形用户界面设计、事件驱动编程、文件数据处理、错误处理与调试,以及单元测试等综合技能。
中国象棋
将帅问题
题目描述 题目分析 代码实现在《编程之美》中看到的题目,特此记录。题目描述如果象棋中只有将和帅,并且它们只能在田字格中走。那么不发生冲突的位置列举出来。要求是只能使用一个byte进行存储。题目分析将帅各有9个位置,那么存储只要18种状态。那么使用前4 bits表示将,后4 bits表示帅。那么我们就可以得到相应的位置存储。下面定义对左右两边位置的存取。定义原来的数字是 a。如需要把右边置为 n, 那
VinXiangQi:
中国象棋
智能化对弈的技术革新与体验升级
在数字化时代,
中国象棋
这项传统智力运动正面临着前所未有的智能化转型机遇。想象一下,当你在屏幕前面对复杂棋局苦思冥想时,一个智能助手能够瞬间识别棋盘布局,提供精准走棋建议,甚至自动完成落子操作——这不再是科幻场景,而是VinXiangQi带来的真实体验。作为一款基于YOLOv5深度学习技术的象棋AI助手,VinXiangQi正在重新定义人们与传统棋类游戏的交互方式,让古老智慧在人工智能时代焕发新生。
JavaScript
87,984
社区成员
224,681
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章