博舍

中国象棋人工智能实现 象棋人工智能ai

中国象棋人工智能实现

中国象棋在我看来最难的人工对战中电脑怎能走这个问题,以下为本人浅见,希望各位多多包涵!

1.初步尝试

电脑的优势在于强大的计算能力,虽然其不知道怎么走合适,但是它能够模拟的将每一种走法都走一遍,选最优的走法来走。我们的思路就有了,首先需要解决两个问题:

(1)怎么判断局面最优?

(2)怎么模拟走?

第一个问题可以用每一个棋子的重要程度来打分,比如将最重要,所以给1000分,而车次之给100分,炮80等等

第二个问题因为每一个中国象棋实现方式不同,所以我分享一下本人代码

电脑模拟走一步的代码:

movBoard::getbestmove(){/**1.获取所有可能走的步数*2.试着走一下*3.看看局面怎么样*4.选择最好的走法*/QVectorcanstep;canstep=getallstep();intmaxscore=-100000;movret;for(autoit=canstep.begin();it!=canstep.end();it++){movstep=*it;fakemove(step);//模拟走一步intscore=ctscore();//计算局面分unfakemove(step);//返回if(score>maxscore)//计算最大的局面分{maxscore=score;ret.equal(step);}}qDebug()

基于大数据的人工智能象棋

这学期上了一门云计算与大数据的课程,课程设计是要求做一个基于大数据的人工智能象棋出来。整体来说还是比较有难度的,平常都是在Win10环境下进行开发部署,现在要求部署到服务器上面,就会遇到各种各样的问题。

文章目录基于大数据的人工智能象棋项目简介实现方案前端后端下棋接口学习接口数据库爬虫+数据处理部署+整合购买服务器安装xftp6和xshell在服务器上安装java、mysql、tomcat在阿里云的管理控制台打开防火墙8080的端口在解压好的tomcat/bin下启动tomcat,./startup.sh,就可以访问服务器了sql脚本导入用Maven将项目打包成war包,发送到服务器tomcat/webapps下查看日志文件,tomcat/logs下的catalina.out可以查看tomcat的日志报告。通过互联即可进行访问数据库连接问题基于大数据的人工智能象棋项目简介

实现一个能够通过互联网访问的,基于大数据的简单的人工智能象棋。

实现方案前端

前端方面是老师直接给了代码,http://avatarsys.org:8007/chess.html,整个页面是用canvas实现的,代替了用图片表示象棋棋子的传统方式。但是只提供了点击下象棋,限制象棋走法等基本的功能,对于后边提及到的功能均要求自己实现。图1是整个页面的布局,横轴为0-8和纵轴为0-9,图二上的坐标(x,y)标记了每个棋子,它们是独一无二的。这样,通过一段64位的字符串即可代表整个棋盘的即时布局状态,比如,棋盘的初始状态为(-是让大家方便看清楚,实际上是不存在的):00102030405060708012720323436383-89796959493929190977178666462606

这样页面发生任何变动都可能通过64位的字符串来了解到是如何变化的。上面就是整个页面布局的介绍。所以,用户(默认是红方)每走一步,前端都会发送一个请求,将当前页面的棋局状态(64位的字符串)发送给后端,使得后端能够根据这段字符串进行处理。后端会响应回来一个四位的字符串(后端部分会在下面介绍),这四位字符串代表黑方(即机器人)要怎么走,比如返回“0001”,即黑方的左上角的车要向下挪一格。那么前端接受到这四位字符串,要更新页面,然后切换控制权给用户,让用户继续下棋。

在下棋的过程中,可能会遇到机器不会走的情况,那是因为我们爬取的数据不够多,不能够覆盖所有情况,所以我们要让机器自己学习。我们小组的想法是这样的。遇到机器不会走的情况,将黑方控制权给用户,让用户帮我们下,学习用户的下法,不同的用户遇到这样的棋局是如何下的,统计该棋局下每个用户的走法,遇到新的走法则记录,遇到同样的走法则其数据库字段的频率+1,后端查询时即根据最高频率进行选择(即选择最多人走的走法)。由于时间关系,我们小组没有做用户登录的功能,所以无法根据用户来学习,只实现了很简单是不懂就学习,学完之后它的频率是一直都是1,不会进行优化学习的。

在这个学习的过程中,前端要做的就是记录红方走前的棋局状态,称为chessStatus1,记录用户控制黑方走之后的棋局状态,称为chessStatus2,将两个棋局状态发送给后端,保存到数据库中。然后再讲控制权切换回给红方。

上面就是前端大概功能和做法了,其实最难的还是生成棋盘状态部分。这部分不是我负责的,所以也不好写。嘿嘿,这里就懒得去理解解释了。狗头保命。

后端

我负责的是后端的部分,用Maven搭建的骨架,语言选择的是JAVA,编译器是IDEA,框架使用了SSM,数据库是MYSQL。后端部分的代码比较少。老师要求用REST风格来写,这里只写了两个API,GET是下棋接口,POST是学习接口。

下棋接口

前端发送过来的是chessStatus,调用Service到数据库进行查询,如果没有就返回"null",如果找到了最优棋盘status,则要进行处理。其实就是要将两个棋局进行比较,就是一个寻找两个字符串中不同字符的算法(不同的字符最多有两个,最少有一个),因为我们要返回的是某个棋子的变化动作,棋子走一步可能它的(x,y)坐标只有一个变化了,也可能是x和y都变了,所以有些特殊情况进行处理,代码如下。

学习接口

这就非常简单了,直接插入数据就行了

数据库

数据库表(就一张表)及字段

爬虫+数据处理

嘿嘿,这两部分也是其他人负责的,整个项目就这两部分最重要了。这里就简单贴一下他们写的思路吧。

部署+整合

部署是部署在阿里云的服务器上边,这个过程还是比较复杂的,有很多坑。

购买服务器

阿里云的地址:https://www.aliyun.com,我买的是轻量级服务器,系统选的是ubuntu18.04,学生认证,一个月10块钱,相当于白嫖,购买完进去之后,设置用户名和密码就可以使用了。

安装xftp6和xshell

想要通过本地直接访问远程服务器可以使用xshell,想要向服务器传输文件可以使用xftp6,这两款软件都挺好用的,隶属于NetSarang的软件。然后在两款软件上配置一下主机地址即公网ip、用户名和密码就可以访问到我们的服务器了。

在服务器上安装java、mysql、tomcat

这部分大家上网搜一下教程就可以了。要提醒的一点就是,mysql安装完之后一定要记得取消无密访问的设置,然后配置好用户名和密码,不然后面连接会出问题。

在阿里云的管理控制台打开防火墙8080的端口

在解压好的tomcat/bin下启动tomcat,./startup.sh,就可以访问服务器了

sql脚本导入

mysql-uroot-pxxx;进入数据库usebigdata_aichess;使用该数据库source./chessdata.sql运行脚本文件

用Maven将项目打包成war包,发送到服务器tomcat/webapps下

查看日志文件,tomcat/logs下的catalina.out可以查看tomcat的日志报告。通过互联即可进行访问

数据库连接问题

前端发送请求的路径,要改换成公网的ip,SSM连接数据库的配置文件,例如db.properties要下的jdbc.url还是localhost,不用换,这个看你是访问服务器上的数据库还是本地的数据库,如果远程访问,需要开放权限,以及这个可能涉及到跨域问题,前端发送的请求路径也不能够写成绝对路径了。

象棋名手326人工智能版

象棋名手326人工智能版是一款功能强大的象棋软件。该软件支持设置引擎水平、保存当前的棋局、编辑棋谱信息和编辑局面,有翻转棋盘、电脑红方、电脑黑方、立即出招和悔棋等各种功能,可谓是练棋的好帮手。

推荐阅读:象棋名手64位破解版丨象棋名手7.52破解版丨象棋名手六核完美破解版

【软件设置】

一、开局库的支持

为了方便棋友继续使用现有的开局库,象棋名手完全兼容obk格式的开局库,支持.obk格式界面开局库。将.obk界面开局库拷贝到名手软件目录,更名为op_book.obk,名手软件就可以继续使用之前的界面开局库了。

二、残局设置

1、名手支持名手格式残局库评估库,名手格式残局库评估库在生成时占用更少的内存,在储存时占用更少的硬盘,让高端和低端机器都具有生成更多残局库评估库的能力。下载工具后点击开始即可生成。棋子代码:车[r]、马[n]、炮[c]、兵[p]、士[a]、相[b]、将[k]。

2、在名手软件目录下有名手的配置文件xqms.rc,用文本编辑器打开,通过编辑usetb=1启用残局库或编辑usetb=0禁用残局库,编辑tbcache=512设定残局库使用的缓存大小,编辑tbpath=目录设置在名手软件目录下有名手的配置文件xqms.rc,用文本编辑器打开,通过编辑usetb=1启用残局库或编辑usetb=0禁用残局库,编辑tbcache=512设定残局库使用的缓存大小,编辑tbpath=目录设置残局库的路径。残局库典型配置文件参数如下:

//设置是否使用残局库1:使用残局库0:不使用残局库

 

三、哈希表大小设置

在名手软件目录下有名手的配置文件xqms.rc,用文本编辑器打开,通过加入hash=数字配置哈希表大小,例如加入hash=512设置成哈希表使用512兆内存。

四、线程数设置

在名手软件目录下有名手的配置文件xqms.rc,用文本编辑器打开,通过加入mt=数字配置引擎的线程数,例如加入mt=4设置成使用4线程进行并行运算。注意:设置的线程数根据购买的软件版本而定,不能超过购买版本允许的最大CPU核心数,超过后自动设置为线程为允许的最大CPU核心数。

人工智能:博弈

为了应付某人的毕设,研究过一段时间的人机象棋,现来谈谈详细的算法思路和流程。注:本文没有任何干货源码,写过二层遍历、基本评价函数与所谓“深度学习”算法下的人机象棋,棋力之弱小,就不献丑了。

首先,程序需要囊括象棋的基本着法,比如马走“日”字,相飞“田”,实现人人象棋是进行人机象棋的第一步。进入正题,试想如何实现象棋的AI?按着人的思路,很容易想到“博弈树”,所谓博弈树,就是一颗大树,根节点就是开局棋盘,第二层节点就是走了一步棋的棋盘,第三层棋盘就是在二层棋盘下对方走一步棋的棋

盘,以此类推。这颗树异常庞大,庞大到囊括了象棋所有的可能性,据统计,象棋每一步平均有50-70种走法,而平均30几回合决出胜负,所以一共大概有60的30次方种走法。大胆想象一下,如果计算机能完全模拟并

记忆这颗完全博弈树,那么无论什么棋局,计算机都能找到对应的节点,通过对节点后续所有走法的遍历,回推一个最佳走法,那么就能保证AI的绝对优势。这里提到一个词,“遍历”,人机象棋的一个核心就是遍历算法,即从当前棋盘开始,模拟后续的走法,返回最优走法,但是现在的计算机一般能保证的也只是5-10层的遍历,也就是说只能预测接下来5-10步的发展

。==>遍历算法的核心就是去模拟所有可能的情况,程序实现并不难,首先遍历每一个棋子,在遍历某一个棋子所有可能的走法,如果是多层,则是递归遍历,这是值得推敲的炮,马>兵等,注意一般我们令将的分值极大,比如车是100分,将可以设置成10000或者100000等,这样做是为了让机器

足够重视将,及时其他所有棋子都没了,也要保留将。这种分数评估都是按照经验来的,我当时按照参考书推荐设置的是炮80,马70等2、棋子的位置价值。每一种棋子都有位置矩阵,比如车在原位时位置价值为0,当其出动后,位置价值逐步提升,当车在对面半区尤其是中心位置时,位置得分较高。尤其是兵,当其未过河时,位置得分极低,当其

过河后位置得分突然变高,比棋子本身价值还要高。为什么要位置价值的原因就是在于不同位置的棋子重要度不一样。3、棋子灵活性价值。灵活性指棋子可能的走法,比如兵未过河时只有一种走法,当其过河后就有最多3种走法,走法越多,棋子灵活性越好,得分也就越高。灵活性的计算即遍历每一个棋子,用走法数乘基本灵活性

价值,最后得到总和就是灵活性得分。灵活性价值的意义在于定义棋子是否有多种走法,是否可以创造多种可能,比如若某一棋子被卡死,那它的价值就非常低。4、保护威胁价值。威胁价值指若有敌方棋子能吃到己方棋子,则认为这个棋子是受威胁的,平常下棋时这种情况就是快走开,或者用其他棋子保住,或者丢车保帅等,受威胁的棋子需要大量减分,甚至减棋子自身价

值相应的分数,这样做是为了让AI能够保护棋子。而保护价值指己方棋子对棋子的保护,比如连环马,如果走到连环马的位置上,将增加保护价值。保护威胁价值的意义在于在进行棋盘进行评价估分时会综合考虑其

他棋子的位置,敌方会有威胁,己方会有保护作用。==>评价函数直接决定了棋力大小,定义的各个部分的评价分数不一样将直接导致棋力不一,重视度不一样

天机象棋官方网站

软件简介

天机象棋界面简介

天机象棋界面是一款开创时代的新中国象棋界面软件,第一款采用智能图像识别技术,是第一款能识别直播或视频、图片中的棋盘棋子的象棋界面,也可识别走动中变形的棋子,可极速出子,智慧分配对局时间,可节省识别时间集拆棋、对弈、连线、收集棋谱于一体,功能全面、性能出众,能有效整合现有象棋资源,做到最大程度发挥棋力,是您学习中国象棋的必备工具。

l 设计理念:智慧、高效、高雅、便捷

l 智慧功能:一键连:天机于2022年1月1日,在业界中率先使用划时代的人工智能识别技术,完全做到一键连线。相较于第一代基于像素分析的识别技术、以及具有一定抗图像变形的第二代识别技术,天机的连线技术能够识别反连线器的特殊棋子(比如天天象棋的金棋子),以及提起和走动中剧烈变形的棋子,也能识别连线中途缩放大小的棋盘和棋子。使用天机界面,无需再对陌生棋盘进行低效繁琐的连线方案制作,直接点击连线按钮即可实现连线。天机界面智慧整合了现有的引擎、开局库、云残局库等资源;可根据开、中、残局阶段自动切换不同风格象棋引擎;也可根据局面具体情况智能分配运算时间;2022年5月1日版实现弈天协议连线中均势残局阶段自动提和和自动同意对方和棋请求,同时增加了免费加密天机开局库,目前支持任何用户通过天机界面免费对非加密库进行加密,实现人人可以做库作者,人人可以销售自己的商业库。

l 节能模式:业界首创节能模式,可根据分数和层数分别设置优势节能和均势节能模式。据用户测试:普通模式消耗1小时0.18度电,开启节能模式2小时消耗0.18度电。

l 高效:为了提高程序运行效率,使用VisualStudio2017重写天机界面,天机界面运行象棋引擎相较传统界面速度更快。使用深度优化的事件驱动框架,在维持运行效率的同时,显著降低界面CPU占用率,因此将更多CPU资源让位于AI引擎,从而在同等条件下可以思考更多的局面以提高棋力。同时在AI图像识别算法的加持下,可在连线中快速感知棋盘棋子变化,造就次时代的连线和出子速度,让对弈过程更加流畅、顺滑。

l 高雅:天机从设计之初对软件的布局及菜单的归类、按钮的设计、棋子、棋盘的要求,均体现了简洁、明快、朴素的风格,使用自定义控件SpinEdit和PathEdit美化界面,使天机界面具有棋类活动高雅的气质,使您使用时心情更愉悦。

l 便捷:天机独创一键自动连线技术,摒弃一、二代连线需要用户制作繁琐复杂的连线方案,勿需用户制作网站连线方案、勿需用户切换网站连线方案,在对局中任何时候,只需要点一下连线按钮,即可实现对目标棋盘的连线。最大程度做到了连线智能化、简单化,让连线不再麻烦。

l 可免费体验:天机界面可下载安装后直接免费体验,自带超特大免费佳佳引擎,连线功能开放,可连接天天象棋、JJ象棋等网站自动下棋。如需免费体验正版界面可先申请进天机QQ群970252976,然后在群内申请或在主页试用申请提交天机机器码,主页申请需填QQ号(未进QQ群一般不予开放试用体验)。在主页下载最新天机安装,在界面帮助处获取机器码,一般在下一个正式版本发布时集中开通短期正版界面试用。

l  终生使用:可以在电脑不坏的情况下可以实现终生使用。

天机象棋界面还有如下优点:

·         天机开局库采用高效数据库,具有体积小,读取速度快的优点;支持兵河OBK格式开局库;支持棋谱入库及开局库回删功能,支持批量修改开局库及批量添加开局库注释功能

·         图像连线对弈时,可极速出子,可支持同窗口下不同大小棋盘、棋子的识别(如天天象棋的评测、旁观、残局不同大小的棋盘,金棋子、玉棋子等)。在三代连线技术的加持下,天机可连接:天天象棋PC2017、QQ新中国象棋、QQ中国象棋角色版、王者象棋、微信小程序:天天象棋、微乐象棋、多乐象棋、JJ象棋、博雅象棋平台、途游象棋、哈灵象棋等象棋平台及部分网页象棋平台自动对弈

·         具有日趋完美的高品质商业开局库:天机官方商业库,采用10多万优质华山优质棋谱制作而成底库,历经几年在弈天华山不间断挂机,由纯人高手人机精修而成,在弈天华山排行榜中经常取得优异成绩

·         协议连接弈天棋缘:天机获得弈天棋缘官协议连线方许可,可在天机象棋界面直接登陆弈天棋缘帐号进行连线,可以读取弈天实时时间,因此可实现引擎运算时间最大化,可自动挂机及搜集棋谱,可以在均势残局时自动申请和棋或同意和棋。众所周知,弈天是强机、强软、强库聚集的地方,其棋谱的研究价值是其他网站不可比拟的。·         自带具有接近顶级商业引擎棋力Pikafish神经网络引擎,支持UCI协议引擎,可加载其他商业象棋引擎。

·         内置智能点击功能,在对弈过程中用户可双击Ctrl按键对需要点击的图标进行截图点击设置,即可实现自动续盘、自动拒绝和棋、悔棋等需求

·         资源占用率极低,给引擎留出更多的CPU资源

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇