社区
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理论也研究的差不多了,实在不知道为啥速度还是这么慢。谁写过这类程序,能否指点一二?
...全文
348
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多平台项目的架构设计与模块划分 - 掌握
中国象棋
核心规则...
C/C++实现
中国象棋
游戏源码项目(含MFC与AI对战)
中国象棋
作为中国传统智力竞技项目,具有高度的策略性和规则严谨性。将其转化为可运行的计算机程序,不仅是对编程能力的综合考验,更是理解游戏逻辑建模、数据结构设计与人机交互实现的绝佳实践。本章明确项目总体目标:构建一个功能完整、逻辑正确、具备人机对战能力的
中国象棋
程序。项目涵盖核心游戏规则的代码化表达、C/C++语言的工程化应用、图形界面的集成以及人工智能对手的设计。通过本项目,读者将掌握从零开始开发复杂逻辑桌面游戏的全流程,理解如何将现实规则抽象为可计算模型,并为后续章节的理论推演和代码实践奠定基础。
JavaScript
87,995
社区成员
224,693
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章