【人工智能基础】状态空间搜索

embedded/2024/9/23 19:25:19/

状态空间法

状态空间:一个问题全部可能的状态以及其关系的集合。

状态空间图:以图的形式表示问题的状态空间,节点对应状态,边对应状态转移算子,边上的权对应转移所需的代价

问题的解:是从最开始状态到目标状态的一条路径。

状态空间法就是将问题抽象为图:

状态->节点

操作->边

状态空间->图

问题的解->路径

求解过程->寻找路径

如:求三个硬币,一次翻两个,能否使三枚初始状态为数字面向上的硬币最终变为三枚国徽面向上的硬币。

我们可以枚举出三枚硬币可可能出现的全部8种状态,记数字面全部向上的状态为0,国徽面全部向上的状态为7,观察0节点是否能根据规则达到7节点。

图的搜索算法

通用图搜索算法

将所有节点分为三类:未知节点、已知已扩展节点(closed)、已知未扩展节点(open)

每次从open表中取一个节点N进行扩展,将扩展出来的新节点加入open表。结束后这个被选取的节点N加入closed表。

已扩展节点表为空还没找到目标节点,则问题无解.

状态空间图的分类

显式图:把状态空间图的全部要素(问题相关的全部状态、状态之间的关系)都以显式的像是存入知识库。

隐式图:初始时只存储初始状态,目标状态,状态之间的转移规则等信息。求解过程中,由初始状态出发,根据状态转移规则逐步生成所需的部分状态空间图。

状态空间图的计算机表示

Node.state 节点状态 Node.father 父节点指针 Node.g 历史已用代价

盲目搜索策略

广搜-open表为FIFO表

  • 有解则一定能找到解
  • 在单位耗散值的条件下,且问题有解,能找到最优解
  • 方法与问题无关,具有通用性
  • 效率低

深搜-open表为FILO表

  • 一般不能保证找到最优解
  • 当深度限制不合理时,可能找不到解
  • 最坏情况,搜索空间等同于穷举
  • 方法与问题无关,具有通用性

启发式搜索策略

对open表中的节点代价进行评估,选取代价最小的点进行扩展 f(n)=g(n)+h(n) g(n)已用代价 h(n)启发函数 代价优先(一致代价)搜索:只考虑g(n),令h(n)为0 爬山法(贪婪法):只考虑h(n)

A*算法h(n)<=h*(n)

  • 算法可纳(有解问题,总能找到最优解)
  • 在保证h(n)M=h*(n)的前提下,h(n)越大越好,h(n)越能准确的估计实际最小代价

评估函数的单调性

  • 单调性(节点对(i,j),j为i的后继,评估函数对于所有的这种节点对都满足f(i)<=f(j))

博弈树搜索

博弈树适用于双方对弈的层次结构

使用Max表示本方,Min表示对方

最大最小法

原理
  • 扩展当前棋局的全部N层子节点
  • 确定各子节点评估值
  1. 最底层节点静态评估
  2. 其余子节点苹果汁需要逐层交替倒推(Max节点取最大值,Min节点取最小值)
步骤
  • 生成规定深度的全部博弈树
  • 计算所有最底层节点的静态估计函数值
  • 自底向上逐层计算非终结节点的倒推估计值
  • Max取最大,Min取最小

α-β剪枝

由于博弈树规模巨大,构造完整的博弈树需要消耗大量时间和内存

  • 对于Max父节点,先探明的子节点可为父节点取值提供下界信息(α),小于α的未探明子节点可以忽略
  • 对于Min父节点,先探明的子节点可为父节点取值提供上界信息(β),大于β的未探明字节的可以忽略

α剪枝:α父≥β β剪枝:α≥β父

  • 跨层比较
  • 有界深搜生成博弈树

剪枝演示

下图中我们看嘴左边的分支,由于MIN会选取评估值最小的节点,所以我们可以知道在这个节点的评估值为-3 

剪枝1

下图中,我们在右边第一个节点中找到了一个评估值为-6的节点,表示如果MAX选中这个分支,可以获得的最高得分只有-6(MIN会选择评估值最小的节点),-6<另一个分支的评估值-3,所以不需要评估后面的分支,我们就可以知道如果走这个分支我们最高只能获得-3分 

剪枝2

 再看另一边,这边我们找到的第一个节点就是两分,由于MAX会倾向于获取高分这个分支的分数最低为2

所以对于MIN来说,选择这个分支的收益比选择前面那个-3的分支的收益低。 

剪枝3

 后面的节点都不需要再评估了 

剪枝4

 由此我们省去了6个节点的评估的时间,并且只进行了4次评估就做出了选择。


http://www.ppmy.cn/embedded/3586.html

相关文章

KNIME 国际化支持投票

你的投票也许能让 KNIME 中文化快一点点。 i18n 是个很搞笑的单词&#xff0c;它是英文 internationalization 国际化的缩写。18 指的是首字母i和末字母n中间有18个字母。另外还有什么 K8s 也是一样&#xff0c;中间省去了8个字母 ... 真是懒的可以。指北君还想起一个类似的笑话…

c#+unity基础

序列化&#xff1a; [SerializeField]&#xff0c;点不出来&#xff0c;只能在面板上显示绑定游戏物体 //公有隐藏 特有函数 特有函数&#xff1a;不需要调用&#xff0c;自动执行 Awake最先执行->OnEable 面向对象思想 面向对象思想&#xff1a;分为具体对象和抽象对…

MapReduce 机理

1.hadoop 平台进程 Namenode进程: 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个&#xff0c;分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log)&#xff…

vue 下载文件 处理后台返回的文件流

1. 下载文件很常见&#xff0c;下载成各种格式的也很常见&#xff0c;本质就是后台返回一个文件流&#xff0c;我们前端去处理一下就行&#xff0c;但是如果因为某些条件&#xff0c;没有返回文件流&#xff0c;返回告诉你&#xff0c;文件出现错误了&#xff0c;那我们就需要把…

【Flutter】自动生成图片资源索引插件一:FlutterAssetRefGenerator

介绍 FlutterAssetRefGenerator 插件&#xff1a;windows上 点击生成图片索引按钮后&#xff0c;pubspec.yaml 会出现中文乱码&#xff0c;需要手动改乱码&#xff1b;mac上没问题。 优点&#xff1a;点击图标自动生成。 目录 介绍一、安装二、使用 一、安装 安装FlutterAsset…

算法:指针

常见的双指针 面试题 17.09. 第 k 个数----三指针 有些数的素因子只有 3&#xff0c;5&#xff0c;7&#xff0c;请设计一个算法找出第 k 个数。注意&#xff0c;不是必须有这些素因子&#xff0c;而是必须不包含其他的素因子。例如&#xff0c;前几个数按顺序应该是 1&#…

conda新建环境报错An HTTP error occurred when trying to retrieve this URL.

conda新建环境报错如下 cat .condarc #将 .condarc文件中的内容删除&#xff0c;改成下面的内容 vi .condarc channels:- defaults show_channel_urls: true default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.…

34. 【Android教程】菜单:Menu

作为 Android 用户&#xff0c;你一定见过类似这样的页面&#xff1a; 它就是我们今天的主角——菜单&#xff0c;它的使用场景和作用不用多说&#xff0c;几乎每个 App 都会用到它&#xff0c;今天我们就一起来看看 Android 提供的几种菜单类型及用法。 1. 菜单的几种类型 根…