人工智能:博弈--人机中国象棋

news/2024/11/7 21:48:54/

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

首先,程序需要囊括象棋的基本着法,比如马走“日”字,相飞“田”,实现人人象棋是进行人机象棋的第一步。
进入正题,试想如何实现象棋的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也就这样了!但是入门容易,优化很难!!!想提升一点速度都是一件不容易的事


http://www.ppmy.cn/news/430078.html

相关文章

使用 HTML、CSS 和 JS 制作一个中国象棋

&#x1f482; 个人网站:【 摸鱼游戏】【萌怪大冒险】【2048】&#x1f91f; 风趣幽默的前端学习课程&#xff1a;&#x1f449;28个案例趣学前端&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼大军】 本文章为系列文章&#xff0c;共100个摸鱼小…

中国象棋AI算法研究

软件&#xff1a;象棋旋风6.2 设置一个困局&#xff0c;人很容易看出最优着法&#xff0c;测试象棋软件的局面评估算法 先上图&#xff1a; 如图&#xff1a;显然这是黑方的一个困局&#xff0c;虽然比红方多一个车和两个馬&#xff0c;但都被困住了&#xff0c; 此时人工对…

java实现中国象棋3:走棋规则的实现

前言 之前我们已经实现了棋子的移动&#xff0c;但是可以发现棋子可以任意移动&#xff0c;不遵循中国象棋的规则&#xff0c;这篇博客便是为了实现中国象棋的走棋规则。在这里默认大家都已经知道中国象棋走棋的规则&#xff0c;如果不知道请自行百度学习。 一、设计 findnum…

Java课程设计—中国象棋(源代码及视频)

你好&#xff0c;我是罡罡同学&#xff01; 代码谱第一页忘掉心上人&#xff0c;最后一页。。。。。。 打赏一点钱&#xff0c;帮我买包辣条&#xff0c;继续创作&#xff0c;谢谢大家&#xff01; 大家关注微信公众号 罡罡同学 回复中国象棋 就可以免费获得压缩包啦&#xf…

阿尔法贝塔剪枝——中国象棋人机对战

alpha-beta剪枝算法实现中国象棋人机对战 Github仓库&#xff1a;https://github.com/dick20/Artificial-Intelligence 问题介绍 本实验要求编写一个中国象棋博弈程序&#xff0c;使用alpha-beta剪枝算法&#xff0c;实现人机对弈。因为是人机博弈&#xff0c;因此我们需要使…

【C++】C++下的简易中国象棋

参考自Originum学长的博客&#xff0c;个人进行了一些小修改&#xff0c; 原博客地址&#xff1a;https://blog.csdn.net/Originum/article/details/80356452 联系邮箱&#xff1a;Originum126.com 本人博客地址&#xff1a;Megalomania 一个简单的中国象棋游戏&#xff0c;主要…

matlab识别中国象棋棋盘,一种基于图像处理的中国象棋识别系统及方法与流程

本发明涉及计算机图像识别技术,具体涉及一种基于图像处理的中国象棋识别系统及方法。 背景技术: 数字图像处理技术在机器感知领域应用十分广泛,主要目标是通过一些图像处理技术从图像中提取信息,该信息类似于人们采用语言和文字解释图像内容的过程,使用图像处理技术的典型…

中国象棋-单机游戏-微信小程序的项目开发流程详解

关于此文章能看懂的条件&#xff1a;对使用微信开发工具熟悉一点即可 在微信开发工具中&#xff0c;用小程序方式新建或打卡项目&#xff0c; 注意&#xff1a;如果是下载来的项目&#xff0c;解压后&#xff0c;要选小程序打开&#xff0c;选错是打不开的哦~ 如图 项目源代码…