象棋人机对弈程序的思想

电脑与玩家下象棋,围棋,五子棋,斗地主,三国杀等等,我们称之为人机博弈。下面以象棋为例,说说人机博弈程序的基本思想。

  这种对弈程序主要涉及到3个方面,分别是走法产生、估值算法和搜索技术。

<ignore_js_op>

  走法产生就是遍历当前局面的所有可行走法。

<ignore_js_op>

  上面的程序描述了红卒的走法。只要遍历每一种棋子的走法,通过AddMove添加到列表之中,走法表便形成了。

<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

  了解走法产生后,就要介绍下估值算法了,总之就是评估一个局面好坏的算法。这里介绍三种评估方法,其一是计算棋子的价值,其二是计算棋子的灵活性(棋
子有没有被挡住),其三是计算棋子的关系(有没有威胁到对方棋子),将这几种方法结合起来,就可以得出较好的估值结果了。

<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

<ignore_js_op>

  有了走法产生和估值,就能够产生一颗博弈树,接下来就要了解怎样找到一个最好的走法了。

<ignore_js_op>

<ignore_js_op>

  可以用下面的图来解释极大极小值算法,这是一个两层的博弈树,c1的估值是8,c2的估值是10。假如程序走红方,现在在B1局面,轮到黑方下棋,最
坏的情况就是黑方走到c1局面,因为这时候局面对红方的估值最小。所以B1的估值是c1,c2,c3的最小值,也就是8,B2和B3同理,得出的估值分别
是5和10。假如现在在局面A,轮到红方走,那自然要走一步对自己最有利的,于是选择了B3。

<ignore_js_op>

<ignore_js_op>

如下图所示,当程序计算到c4的时候,得出c4是7,因为B2取的是下面节点的最小值,所以B2 <= 7,而B1 =
8,所以在A局面到B1,B2,B3局面选择时,就不可能选择B2了。这时候C5和C6就可以不用计算了,直接抛弃,有点像减掉一棵树的枝叶,称为剪枝,
这是对搜索算法的一种优化。

<ignore_js_op>

  完成了,了解了这一思想,你便也了解了五子棋、围棋、斗地主、三国杀等等人机博弈程序的思路了。

<ignore_js_op>

时间: 2024-09-15 20:54:59

象棋人机对弈程序的思想的相关文章

基于Qt Creator实现中国象棋人机对战, c++实现

GitHub地址: https://github.com/daleyzou/wobuku 这是自己大一学完c++后,在课程实践中写过的一个程序,实现象棋人机对战的算法还是有点难的, 自己当时差不多也是写了两个月左右吧!当时看书又有很多问题得不到解决,所以就在网上找了一个视频跟着写. 当然,这其中有很多功能都是自己扩展的. 我把视频分享出来,希望能对新手有帮助吧! 视频地址:链接:https://pan.baidu.com/s/1pIp6UMJ6LXsuJ3GT80NGfw 密码:9k8y 注意:

深度理解微信小程序的思想

这篇文章不涉及小程序技术方面得问题,只讨论小程序的核心问题. 探讨一个问题最好的方法是问"为什么",这篇文章主要思路是通过回答以下几个问题来探讨微信小程序的"思想". 为什么微信要开发微信小程序? 微信开发小程序的一个目的据说是打通线上与线下的联系,因为微信目前的月活跃用户数量已经达到了8亿  ,但是除去微信支付,其他功能与线下几乎没有联系,所以微信希望能利用一个功能将微信的影响力扩展到线下,所以小程序就出来了.其次,很多人开玩笑说微信的目标是手机上的另一个操作系统

团队-象棋游戏-最终程序

托管平台地址:https://gitee.com/zixiao520/Chinesechess/blob/master/ChineseChess.zip 小组名称:Narcissu 小组成员合照: 程序运行方法:右键点击使用浏览器运行 程序运行示例及运行结果: 其他附加内容:无

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

下载自 http://www.newxing.com/Code/VC/game/1750.html 运行界面如下: 看下类图: 资源: 主对话框: 源码说明: 本人机对弈程序采用了多种搜索算法.以下是本程序主要的类说明: 1.CEveluation类:估值类,对给定的棋盘进行估值. 2.CMoveGenerator类:走法产生器,对给定的棋盘局面搜索出所有可能的走法. 3.CSearchEngine类:搜索引擎基类. 4.CNegaMaxEngine类:负极大值法搜索引擎. 5.CAlphaBe

[转]100个经典C语言程序(益智类问题)

目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 1.7 分数四则运算 17.平分七筐鱼 18.有限5位数 19. 8 除不尽的数 21.4位反序数 22.求车速 23.阿姆斯特朗数 24.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+c

Unity3D对弈游戏:狼吃羊游戏

简介 中文名:狼与羊 英文名称:Wolves&Sheep 游戏类型:休闲/棋类 玩家人数:单人或双人 游戏下载:Windows.Android 游戏描述:童年时与小伙伴常玩的一种游戏,游戏简单易懂而又变化多样. 第一节 游戏规则 棋盘可以用小石头在泥土里上随手就画出来了,棋子中的狼和羊可以用树枝或者小石子代替. 准备 找两块大点的石头当作狼,二十四块小石头是羊,狼和羊必须放置在网格的交叉点上,每个交叉点上最多有一个棋子. 开局 两个狼分别放在上下两个脖子上,羊8个放在中间一圈的交叉点上,狼先走羊

[转]100个经典C语言程序

本文转载自:http://blog.sina.com.cn/s/articlelist_1615065844_0_1.html 1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线*问题分析与算法设计如果在程序中使用数组,这个问题十分简单.但若规定不能使用数组,问题就变得不容易了. 关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行. 为了获得本文要求的图形就必须在一行

java围棋对弈实例

围棋作为一个棋类竞技运动,在民间十分流行,为了熟悉围棋规则及技巧,以及研究简单的人工智能,决定用Java开发围棋游戏.主要完成了人机对战和玩家之间联网对战2个功能.网络连接部分为Socket编程应用,客户端和服务器端的交互用Class Message定义,有很好的可扩展性,客户端负责界面维护和收集用户输入的信息,及错误处理.服务器维护在线用户的基本信息和任意两个对战用户的棋盘信息,动态维护用户列表.在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能.分析估值模块中的影响精准性的几个要素,以

人工智能之人机博弈(1)

每个程序猿的心中都有一个AI梦,而人机博弈是最简单的一种AI形式. 看了阿尔法狗和李世石之战后,就一直在研究AI的一些知识,包括传统的人机博弈算法,以及阿尔法狗的蒙特卡罗加神经网络的算法.甚至还重温了高等数学的知识. 为了给家里小朋友学棋,花了一个多月的休息的时间,开发了这个国际跳棋软件.支持人机对战,经专家们测试,AI棋力达到中等以上棋手的水平. 对国际跳棋感兴趣的朋友,可以到下面地址下载试用一下.暂时不开源,等我完善了程序,再考虑开源出来.并写一些文章总结和分享开发的过程.  下载地址: h