人工智能AI 全栈体系(十二)

第二章 计算机是如何学会下棋的

下棋一直被认为是人类的高智商游戏,从人工智能诞生的那一天开始,研究者就开始研究计算机如何下棋。著名人工智能学者、图灵奖获得者约翰·麦卡锡在 50 年代就开始从事计算机下棋方面的研究工作,并提出了著名的 α-β 剪枝算法。很长时间内,该算法成为了计算机下棋程序的核心算法,著名的国际象棋程序深蓝采用的就是该算法框架。

一、可以穷举吗?

1. 棋类人机大战简史

请添加图片描述

  • 1996 年,正值人工智能诞生 40 周年之际,一场举世瞩目的国际象棋大战在深蓝与卡斯帕罗夫之间举行,可惜当时的深蓝功夫欠佳,以 2:4 的比分败下阵来。1997 年,经过改进的深蓝再战卡斯帕罗夫,这次深蓝不负众望,终于以 3.5:2.5 的比分战胜卡斯帕罗夫,可以说是人工智能发展史上的一个里程碑事件。

  • 到了 2006 年,为了庆祝人工智能诞生 50 周年,中国人工智能学会主办了浪潮杯中国象棋人机大战,先期举行的机器博弈锦标赛获得前 5 名的中国象棋系统,分别与汪洋、柳大华、卜凤波、张强、徐天红 5 位中国象棋大师对弈,人机分别先行共战两轮 10 局比赛,双方互有胜负,最终机器以 11:9 的总成绩战胜人类大师队。

  • 转眼到了 2016 年,又值人工智能诞生 60 周年,人工智能的发展已不可同日而语,呈现出蓬勃发展之势。沉默多年的计算机围棋界突然冒出个 AlphaGo,先是 4:1 战胜韩国棋手李世石,转年又战胜我国的柯洁。至此,在计算机下棋这个领域,机器已经完全碾压人类棋手,机器战胜人类最高水平棋手已无任何悬念。

在这里插入图片描述

  • 三次重要事件均与人工智能提出的秩年有关,三大棋类机器战胜人类顶级棋手的时间顺序也刚好与三大棋类可能出现的状态数的多少一致,这也许只是一种巧合,在本章可以看到,状态数的多少并不是棋类难度的主要问题。

2. 分钱币游戏

  • 分钱币游戏是这样的,桌上有若干堆钱币,每次对弈的一方选定一堆钱币,并将该堆钱币分成不等的两堆,这一过程称为行棋。甲乙双方轮流行棋,直到有一方不能行棋为止,则对方取胜。下图给出了初始状态为 8 个钱币的例子,图中给出了该问题所有可能的走法。

在这里插入图片描述

  • 假设甲方先行行棋,甲方可以将 8 枚硬币分成(6,2)两堆,或者(5,3)两堆,或者(7,1)两堆,但不能分成(4,4),因为这是分成了相等的两堆,这是规则所不允许的。下一步轮到乙方行棋,“1”这堆不能选,因为无法分成两堆,“2”这堆也不能选,因为不能分成不相等的两堆,“6”、“5”、“7”都是可选的,但是要注意“6”只能分成(4,2)或者(5、1),而不能分成(3,3),因为(3,3)是相等的两堆。按照这样的原则,在图中给出了所有可能的行棋方法。
  • 甲方如果按照红色箭头走成(7,1),则乙方只能选择“7”这堆,将“7”分成(6,1)或者(5,2)或者(4,3),也就是图中按照黄色箭头得到(6,1,1)、(5,2,1)、(4,3,1)。无论对于这三种情况的哪一种,甲方都可以按照红色箭头选择行棋到(4,2,1,1),比如乙方行棋到了(6,1,1),则甲方将“6”分成(4,2),如果乙方走的是(5,2,1),则甲方将“5”分成(4,1)即可。而一旦甲方走到了(4,2,1,1),则乙方只能行棋到(3,2,1,1,1),这时甲方只需将“3”分成(2,1),得到(2,2,1,1,1,1),则乙方无棋可走,必输无疑。也就是说,对于这样一个分钱币游戏,甲方是存在必胜策略的。
  • 只要甲方走棋正确,乙方无论如何是不可能获胜的。
  • 对于分钱币游戏这样的简单问题,或者再稍微复杂一点的游戏,依靠穷举所有可能的方法也许可以找到必胜策略,但是对于象棋、围棋这样的变化非常多的棋类,是不可能穷举其所有可能性的。这也是目前在一些人中存在的误解,认为现在计算机速度这么快,存储这么大,对于国际象棋、中国象棋这样的棋类,完全可以依靠穷举战胜人类。其实这是非常错误的看法。

请添加图片描述

  • 以中国象棋为例分析一下。在考虑不同的走棋顺序的情况下,总的状态数大约为 1 0 150 10^{150} 10150 ,假设 1 毫微秒可以产生一个状态,则产生出这些状态大约需要 1 0 134 10^{134} 10134 年。这是什么概念呢?从存储上考虑,地球上的原子总数约 1 0 50 10^{50} 1050 个,如果一个原子可以存储一个状态的话,则需要 1 0 100 10^{100} 10100 个地球才有可能存储得下这些状态。从时间上考虑,按照宇宙大爆炸的理论推算,宇宙年龄大概为 1.38 × 1 0 10 1.38 \times 10^{10} 1.38×1010 年,假设从宇宙诞生那一刻起就有一台高速计算机以每毫微秒生成一个状态的速度在运算,到目前为止也只产生了其中的 1.38 × 1 0 − 124 1.38 \times 10^{-124} 1.38×10124 %,也就是 0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138%。

  • 中国象棋的状态数特别大,依靠穷举所有可能的状态获得必胜策略的想法是行不通的。

  • 国际象棋的状态数稍微少一些,但也没有质的差别,围棋状态数则更多。

  • 所以结论就是不能靠穷举出所有可能状态的方法找到必胜的行棋策略。

3. 总结

请添加图片描述

  • 棋类历史上有过三次著名的人机大战事件。大家对计算机围棋系统 AlphaGo 战胜李世石、柯洁,计算机国际象棋系统深蓝战胜卡斯帕罗夫比较熟悉,在这两次人机大战之间,我国的五套计算机中国象棋系统战胜了人类五位中国象棋大师,也是人工智能发展史上的一件大事。

  • 在一些人中经常有这样的误解:认为现在计算机速度这么快,存储这么大,对于国际象棋、中国象棋这样的棋类,计算机完全可以依靠穷举出其所有可能状态的方法战胜人类,这是非常错误的看法。无论是国际象棋还是中国象棋,由于其可能出现的状态数过于庞大,是不可能通过穷举所有可能状态的方法找到必胜策略的。三次人机大战均与人工智能提出的秩年有关,三大棋类机器战胜人类顶级棋手的时间顺序也刚好与三大棋类可能出现的状态数的多少一致(按照可能的状态数多少从小到大排序依次为国际象棋、中国象棋和围棋),这也许只是一种巧合。

二、极大-极小模型

  • 下象棋的人,在下棋时是如何考虑走哪步棋的?
  • 在轮到自己行棋时,自己会考虑有哪几种下法,再考虑对于自己每种下法对方会如何考虑,自己再如何考虑……,然后看几步棋之后的局面如何,再选择一个自己认为好的走步。职业棋手能考虑到 7、8 步。
    请添加图片描述

1. 极大-极小模型

  • 这个思考过程可以用下图来示意。图中最上方的方框表示当前棋局,轮到甲方行棋,甲方考虑自己有 a 和 b 两种走法,下一步轮到乙方行棋,针对棋局 a,乙方可以有 c、d 两种走法,而对于 b,乙方可以有 e、f 两种走法。下一轮又该轮到甲方行棋……。假设甲方只思考了 4 步棋,则形成了下图的搜索图,最后一行就是双方四步后可能出现的棋局。从甲方的角度来说,他希望最后走到一个对自己有利的局面,而对乙方来说他也希望走到一个对乙方有利的局面。

在这里插入图片描述

  • 假设局面是否有利可以用一个分值表示,大于 0 的分值表示对甲方有利,而小于 0 的分值表示对乙方有利,等于 0 则表示双方势均力敌,是一个双方都可以接受的局面。我们从倒数第二行的圆圈开始考虑,这一行应该轮到乙方行棋。比如对于节点 g,乙方可以有两个选择,一个可以得到分值 0,一个可以得到分值 5。由于分值越小对乙方越有利,所以乙方肯定会选择走获得 0 分值的那一步,而不会选择走获得 5 分值的那一步。对于节点 h 也同样,乙方肯定会选择获得-3 分值的那一步。这一行的其他节点也一样,都是从其子节点中选择获得分值最小的那步棋。所以我们可以总结为,对于这一层来说,乙方总是选择具有极小值的节点作为自己的走步。图中倒数第二行节点边标的数字就是乙方所获得的分值。
  • 我们再看倒数第三行的方框,这一行应该轮到甲方行棋。甲方刚好与乙方相反,他肯定会选择子节点中分值最大的那步棋。比如对于节点 c,甲方可以选择走到 g,可以获得 0 分值,也可以选择 h 获得-3 分值。由于分值越大对甲方越有利,甲方只会选择行棋到 g 获得 0 分值,而不会选择 h 获得-3 分值。这一行的其他节点也同样,图中标出了其他节点可以获得的分值。
  • 最后我们再看 a、b 两个节点。这两个节点又轮到乙方行棋。乙方同样会从其子节点中选取分值小的节点作为走步,这样 a 可以获得 0 分值,b 可以获得 1 分值。而 a 和 b 是当前局面下可能的两个选择。如果选择 a,无论对方如何行棋,甲方都可以获得至少 0 分值,如果选择 b,无论对方如何行棋,甲方都可以至少获得 1 分值。虽然 0 分值对于甲方也是可以接受的,但是 1 分值结果会更好。所以经过这么一番思考后,甲方决定如图中红色箭头所示的,选择行棋到 b。这是一个模仿人类下棋的过程。
  • 对于最后可能形成的局面人类只是大概估计一下是否对自己有利。这里之所以用数字表示,一方面是为了量化局面的有利程度,另一方面是为了以后用到计算机下棋上,计算机处理的话,必须表示为数字。
  • 由于这种方法一层求最小值、一层求最大值交替进行,所以称作极小-极大模型,是通过模仿人类的下棋过程得到的一个模型。其中求最小值的节点称作极小节点,求最大值的节点称作极大节点。
  • 上面说的这些内容,都是甲方为了走一步棋,而在他大脑内的思考过程,并不是甲乙双方真的在行棋。经过一番这样的思考后,甲方选择一步行棋,等待乙方下完一步棋后,甲方再根据乙方的行棋结果再次进行这样的思考。所以上述极小-极大模型只是描述了甲方走一步棋的过程。

2. 限定深度就可以穷举吗?

  • 计算机就是采用这种办法下棋的吗?
  • 还不是,因为这样做的话,对于实际的下棋过程计算量还是非常大的。以下国际象棋的深蓝为例,基本上要搜索 12 步,搜索树的节点数在 1018 量级,据估算,即便在深蓝这样的专用计算机上,完成一次搜索也需要大概 17 年的时间,所以这个极小-极大模型只是用来描述这样一种模拟人类下棋的过程,并不能真的用于计算机下棋,一些简单的棋类或许可能可以。

请添加图片描述

3. 总结

请添加图片描述

  • 人类在下棋的过程中,一般是通过向前考虑若干步的方法找到自认为比较好的走法。受人类棋手下棋过程的启发,提出了计算机下棋的极小-极大模型。该模型是在有限搜索深度内穷举出所有可能的状态,从中找出一个在该搜索深度内的最好走法。
  • 由于搜索深度越深计算机下棋的水平越高,极小-极大模型虽然限制了搜索的深度,但是对于真实的棋类问题,要达到与人类大师抗衡的水平,还是因为计算量过大,耗时过多而不能满足实际要求。以深蓝为例,搜索深度限制为 12 步,用极小-极大方法实现的话,完成一次搜索需要耗时 17 年时间。这显然是不现实的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/182696.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑

近几年随着互联网快速发展,各行业领域都比较注重线上服务系统,通过陪诊小程序开发可以满足更多用户使用需求,同时还能提高用户使用体验。现在陪诊类的软件应用得到全面推广,在医疗行业当中陪诊小程序更贴近用户生活,可…

“七人拼团模式:创新玩法助力平台快速裂变引流“

七人拼团模式是一种结合了社交电商和拼购玩法的快速裂变引流模式。这种模式通过抽取平台营业所得作为奖励补贴用户,以更人性化的奖励机制吸引用户,服务用户,以此加快用户向粉丝的转变,为平台拉取有效流量。本文将介绍七人拼团模式…

什么是防火墙?详解三种常见的防火墙及各自的优缺点

目录 防火墙的定义 防火墙的功能 防火墙的特性 防火墙的必要性 防火墙的优点 防火墙的局限性 防火墙的分类 分组过滤防火墙 优点: 缺点: 应用代理防火墙 优点 缺点 状态检测防火墙 优点 缺点 防火墙的定义 防火墙的本义原是指古代人们…

DCU集群搭建虚拟环境方法简介

1.conda安装方法: wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh #下载miniconda安装包chmod 750 Miniconda3-latest-Linux-x86_64.sh #添加执行权限bash ./Miniconda3-latest-Linux-x86_64.sh #安装下载的minnconda32.集群安装…

VBA根据Excel内容快速创建PPT

示例需求:根据Excel中选中的单元格内容(3列)如下图所示,在已打卡的PowerPoint文件中创建页面。 新增PPT Slide页面使用第二个模板页面,其中包含两个文本占位符,和一个图片占位符。将Excel选中区域中前两列写…

c++实现观察者模式

前言 我觉得这是最有意思的模式&#xff0c;其中一个动&#xff0c;另外的自动跟着动。发布-订阅&#xff0c;我觉得很巧妙。 代码 头文件 #pragma once #include<vector> #include<string> #include<iostream>// 抽象观察者 class Aobserver { public:v…

xlua源码分析(二)lua Call C#的无wrap实现

xlua源码分析&#xff08;二&#xff09;lua Call C#的无wrap实现 上一节我们主要分析了xlua中C# Call lua的实现思路&#xff0c;本节我们将根据Examples 03_UIEvent&#xff0c;分析lua Call C#的底层实现。例子场景里有一个简单的UI面板&#xff0c;面板中包含一个input fie…

使用VSCODE链接Anaconda

打代码还是在VSCODE里得劲 所以得想个办法在VSCODE里运行py文件 一开始在插件商店寻找插件 但是没有发现什么有效果的 幸运的是VSCODE支持自己选择Python的编译器 打开VSCODE 按住CtrlShiftP 输入Select Interpreter 如果电脑已经安装上了Python的环境 VSCODE会默认选择普通…

yolov5--ptq--qat量化之敏感层分析

敏感层分析&#xff0c;应该是发生在ptq量化之前进行分析的操作&#xff0c;经过该操作&#xff0c;可得出哪些层不适合进行量化&#xff0c;则在接下来ptq时可以手动关闭这些层的量化。 进入敏感层分析函数sensitive_analysis中&#xff0c; 具体流程为&#xff1a; 首先验证…

安科瑞变电站综合自动化系统在青岛海洋科技园应用

安科瑞 耿敏花 摘 要&#xff1a;变电站综合自动化系统是将变电站内的二次设备经过功能的组合和优化设计&#xff0c;利用先进的计算机技术、通信技术、信号处理技术&#xff0c;实现对全变电站的主要设备和输、配电线路的自动监视、测量、控制、保护、并与上级调度通信的综合性…

UI设计感大型数据管理仪表盘后台模板源码

大型数据管理仪表盘后台模板是一款适合数据统计管理后台网站模板下载。提示&#xff1a;本模板调用到谷歌字体库&#xff0c;可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/20838点html

软件测试/测试开发丨利用ChatGPT自动生成架构图

点此获取更多相关资料 简介 架构图通过图形化的表达方式&#xff0c;用于呈现系统、软件的结构、组件、关系和交互方式。一个明确的架构图可以更好地辅助业务分析、技术架构分析的工作。架构图的设计是一个有难度的任务&#xff0c;设计者必须要对业务、相关技术栈都非常清晰…

【技术干货】开源库 Com.Gitusme.Net.Extensiones.Core 的使用

目录 1、项目介绍 2、为项目添加依赖 3、代码中导入命名空间 4、代码中使用 示例 1&#xff1a;string转换 示例 2&#xff1a;object转换 1、项目介绍 Com.Gitusme.Net.Extensiones.Core是一个.Net扩展库。当前最新版本1.0.4&#xff0c;提供了常见类型转换&#xff0c…

[动态规划] (十) 路径问题 LeetCode 174.地下城游戏

[动态规划] (十) 路径问题: LeetCode 174.地下城游戏 文章目录 [动态规划] (十) 路径问题: LeetCode 174.地下城游戏题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 174. 地下城游戏 题目解析 先明白下题题再来看。 [动态规划] (四) LeetCode 91.…

网络编程套接字(2)——简单的TCP网络程序

文章目录 一.简单的TCP网络程序1.服务端创建套接字2.服务端绑定3.服务端监听4.服务端获取连接5.服务端处理请求6.客户端创建套接字7.客户端连接服务器8.客户端发起请求9.服务器测试10.单执行流服务器的弊端 二.多进程版的TCP网络程序1.捕捉SIGCHLD信号2.让孙子进程提供服务 三.…

3D人像手办定制业务再掀热潮,这一次有怎样的革新?(方法篇)

最近&#xff0c;3D真人手办热潮再起&#xff0c;最出圈的一次当属亚运会的3D打印元宇宙体验舱里面各国运动员带火的真人手办定制项目。作为3D技术推广者&#xff0c;博雅仔也在后台接受了很多朋友的询问—— ◆ 技术已经成熟了吗&#xff1f; ◆ 个人定做3D真人手办市场价格…

superset study day01 (本地启动superset项目)

文章目录 什么是superset?superset文档 superset开发环境搭建superset后端环境1. 新建数据库2. 环境配置3. 修改py文件4. 迁移数据库5. 启动项目 superset 前端代码打包搭建完成,效果页面 什么是superset? Apache Superset™ 是一个开源的现代数据探索和可视化平台。 Super…

基于鹈鹕算法的无人机航迹规划-附代码

基于鹈鹕算法的无人机航迹规划 文章目录 基于鹈鹕算法的无人机航迹规划1.鹈鹕搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用鹈鹕算法来优化无人机航迹规划。 1.鹈鹕搜索算法 …

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DS18B20采集温度&#xff0c;光敏电阻采集光照、按键设置温度上下限&#xff0c;测量温度小于下限&#xff0c;启动加热&#xff0c;测量温度大于上限&#xff0c;启动降温。 二、硬件设计 …

网络工程师回顾学习

根据书本目录&#xff0c;写下需要记忆的地方&#xff1a; 参考之前的笔记&#xff1a; 网络工程师回答问题_one day321的博客-CSDN博客 重构第一部分需要记忆的&#xff1a; 第一章&#xff1a;计算机网络概论 计算机网络的定义和分类&#xff1a;计算机网络是指将地理位…