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

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

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

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


==>遍历算法的核心就是去模拟所有可能的情况,程序实现并不难,首先遍历每一个棋子,在遍历某一个棋子所有可能的走法,如果是多层,则是递归遍历,这是值得推敲的<==
遍历算法会产生博弈树,博弈树是可以进行剪枝处理的,比如最简单的剪枝对已经分出胜负的棋局不再遍历,就可以简化博弈树。更加优秀的方法是α-β剪枝等,有兴趣可以仔细推敲研究。
说完遍历,来聊聊评价函数,什么叫评价函数?对于一个棋盘,怎么判断这个棋盘对谁有利,这就需要评价函数了。通过评价函数对棋盘进行评分,分值越大越有利,棋局向分值大的方向发展。
评价函数分为4个部分:
1、棋子自身价值。自身价值不用多说,就是棋子越多局面越有利。且各棋子分值不一,比如车>炮,马>兵等,注意一般我们令将的分值极大,比如车是100分,将可以设置成10000或者100000等,这样做是为了让机器

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

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

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

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

他棋子的位置,敌方会有威胁,己方会有保护作用。
==>评价函数直接决定了棋力大小,定义的各个部分的评价分数不一样将直接导致棋力不一,重视度不一样<==
最后,提出“深度学习”算法,先上个流程图:

什么意思?先看虚线框外的内容,就是一个匹配的方法,就是在执行递归遍历和评价函数之前,先与大数据对比库进行匹配,如果库里有对应的数据,则直接用反馈回的走法进行走棋,就节省了遍历和评估的时间,极大加快速度。

那么大数据库怎么来,就需要用到机器学习方面的内容,遍历大量棋局,整合最佳走法,每一条对应一个棋局布局下的最佳走法。

OK,人机象棋介绍完毕,还想再说一句,博弈是AI中一个重要的部分,博弈蕴含很多思想,探究完人机象棋如何实现后,突然发现AI也就这样了!但是入门容易,优化很难!!!想提升一点速度都是一件不容易的事

人工智能:博弈--人机中国象棋相关推荐

  1. 中国象棋的人机博弈程序

    对此题目有兴趣的朋友们: 感谢你们抽出宝贵的时间来阅读这些浅显的文字. 很多人可能都知道chess的人机大战: 1996年,卡斯帕罗夫以4比2战胜"深蓝"(Deep Blue): ...

  2. 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码

    较高人工智能的人机博弈程序实现(多个算法结合)含C++源码 本文由恋花蝶最初发表于http://blog.csdn.net/lanphaday 上,您可以转载.引用.打印和分发等,但必须保留本文完整和 ...

  3. java象棋人机代码_中国象棋人机对弈Java版源码

    [实例简介] 中国象棋人机对弈Java版源码,包含人工智能实现(含多个难度级别,采用α-β迭代搜索算法) [实例截图] [核心代码] 中国象棋人机对弈Java版源码 ├── boards │   ├─ ...

  4. 中国象棋棋盘java_Java中国象棋博弈程序探秘[2]——棋盘的表示

    棋盘的表示 转载请保留作者信息: 作者:88250 MSN & Gmail & QQ:DL88250@gmail.com 在象棋博弈程序中,首先我们要确定下棋盘-棋子的数据结构描述. ...

  5. 《游戏学习》纯JS中国象棋人机对战html游戏源码

    源码下载地址:chinese_chess.zip_象棋机器人对战js-网络游戏文档类资源-CSDN下载 下载解压后,文件如下 html页面源码如下 <!DOCTYPE html> < ...

  6. java 明棋妙重新循环_Java实现中国象棋(人机对战)

    目录 简介 成品视频 实现思路 界面实现分为了三块 棋盘抽象类 按钮组抽象类 棋子绘制接口 棋盘界面实现 棋子的实现 按钮组的实现 监听工厂和监听类 棋盘绘制类的实现 开始游戏实现 停止游戏实现 游戏 ...

  7. 中国象棋java着算法_Java中国象棋博弈程序探秘[4]——生成有效着法

    生成有效着法 转载请保留作者信息: 作者:88250 MSN & Gmail & QQ:DL88250@gmail.com 着法生成就是要产生所有有效的着法,让电脑棋手在这些着法中选择 ...

  8. 中国象棋程序的设计与实现(三)--2012本科毕业论文等重要文档资料

    最近陆续发表了中国象棋程序的截图和源码,受到了不少CSDN网友的好评.中国象棋程序是我大学时期的最佳原创作品,同时这也是我的毕业设计选题.当然,我开发中国象棋主要还是为了锻炼.今天,正式向广大网友分享 ...

  9. 中国象棋程序的设计与实现 三 --2012本科毕业论文等重要文档资料

    最近陆续发表了中国象棋程序的截图和源码,受到了不少CSDN网友的好评.中国象棋程序是我大学时期的最佳原创作品,同时这也是我的毕业设计选题.当然,我开发中国象棋主要还是为了锻炼.今天,正式向广大网友分享 ...

  10. VC++源码分析 - 中国象棋源码分析

    下载自 http://www.newxing.com/Code/VC/game/1750.html 运行界面如下: 看下类图: 资源: 主对话框: 源码说明: 本人机对弈程序采用了多种搜索算法.以下是 ...

最新文章

  1. android studio jni路径配置
  2. 基于升序链表的定时器
  3. 企业如何从 0 到 1 构建整套全链路追踪体系
  4. goland 合并分支
  5. MkDocs 文档编辑器
  6. 过了初试,面试而不了了之
  7. 如何使用 vimdiff 来 git diff /svn diff
  8. FreeBSD学习笔记17-FreeBSD下安装MySQL数据库
  9. linux下rar-unrar命令使用
  10. 如何在 Ubuntu 16.10 的 Unity 8 上运行老式 Xorg 程序
  11. 神策分析 Android SDK 之用户路径采集
  12. Linux log工具:zlog编译安装及使用示例(同样适用交叉编译环境)
  13. 阿里与百度的网盘中场大战
  14. db9针232接口波特率标准_RS232串口通信:接口定义、标准接法详细说明,一看就懂了...
  15. 2021-08-07LabVIEW编程LabVIEW控制FS400308系列气体质量流量计例程与相关资料
  16. 前端性能优化 24 条建议
  17. 【重磅】凯文.凯利8个小时演讲实录
  18. 卸载office提示无法打开修补程序包 修补程序包是否存在的解决方法.
  19. Android使用java和kotlin混合开发时 发现黄油刀BindView失效
  20. 2021-11-15

热门文章

  1. Unity3D快速入门超详细视频教程(全套免费送)
  2. 逆向分析 工具、加壳、安全防护篇
  3. TCP/IP系列概述之体系结构原则
  4. 又一个Python数据分析学习利器!
  5. 保定学院计算机编程,惠普HP打印机驱动程序安装失败怎么办hewlett-packard上的文件...
  6. 一个计算机爱好者的不完整回忆(三十一)我的拼音输入法
  7. nodejs+express留言板功能实现
  8. Python 爬取留言板留言(一):单进程版+selenium模拟
  9. 【Protel】Protel99SE(附汉化包+SP6+增强工具+视频教程)
  10. eclipse安装插件速度很慢的解决方案