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

devtools/2024/9/25 3:59:52/

状态空间法

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

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

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

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

状态->节点

操作->边

状态空间->图

问题的解->路径

求解过程->寻找路径

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

我们可以枚举出三枚硬币可可能出现的全部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/devtools/4313.html

相关文章

大创项目推荐 深度学习YOLO图像视频足球和人体检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习YOLO图像视频足球和人体检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非…

docker安装并跑通QQ机器人实践(2)-签名服务器bs-qsign搭建

在前文中&#xff0c;我们详尽阐述了QQ机器人的搭建过程及其最终实现的各项功能展示。接下来&#xff0c;我们将转向探讨该项目基于Docker构建服务的具体实践。本篇将以QQ机器人签名服务——qsign为起点&#xff0c;逐步展开论述。 1 获取和运行 xzhouqd/qsign:8.9.63 镜像 1.…

Java如何用EasyExcel插件对Excel进行数据导入和数据导出

文章目录 一、EasyExcel的示例导入依赖创建实体类数据导入和导出 二、EasyExcel的作用三、EasyExcel的注解 EasyExcel是一个阿里巴巴开源的excel处理框架&#xff0c;它以使用简单、节省内存著称。在解析Excel时&#xff0c;EasyExcel没有将文件数据一次性全部加载到内存中&…

程序员自由创业周记#32:新产品构思

程序员自由创业周记#32&#xff1a;新产品构思 新作品 我时常把自己看做一位木匠&#xff0c;有点手艺&#xff0c;能做一些作品养活自己。而 加一、Island Widgets、Nap 就是我的作品。 接下来在持续维护迭代的同时&#xff0c;要开启下一个作品的创造了。 其实早在2022的1…

labview中的同步定时结构

单帧定时循环定时比较精确&#xff0c;最常用的功能还是它的定时循环功能&#xff0c;定时循环允许不连接“循环条件”端子&#xff0c;可以连接定时循环“结构名称”端子&#xff0c;通过定时结构停止函数停止循环。 例子在附件中。

Ubuntu 忘记系统密码 如何修改密码

如果你忘记了Ubuntu系统的密码&#xff0c;你可以通过以下方法来修改密码&#xff1a; 通过GRUB引导菜单进入恢复模式 重启系统并进入GRUB引导菜单&#xff1a; 重启Ubuntu系统&#xff0c;并在启动时连续按Shift键&#xff08;或根据系统提示的其他按键&#xff09;&#xf…

网站卡顿的各种情况分析

首先&#xff0c;确定这些问题是否存在。 1.服务器带宽是否超出&#xff1f; 2.服务器里面是否还存在着运行其他软件导致服务器卡顿&#xff1f; 3.服务器配置是否达到标准需求&#xff1f; 4.服务器是否会超出延迟标准&#xff0c;或者PING值掉包严重&#xff1f; 以上四个问题…

广东莱斯广告,6.8米UV喷印推动粤东喷绘产业升级

广东莱斯广告作为汕头市大型的广告服务运营商,近日迎来了一件值得庆祝的事情:彩神6.8米UV喷印机运行一周年,销售服务商深圳嘉豪总经理李伟特地前来回访。该设备是深圳润天智数字设备股份有限公司开发的全球首台搭载XTRA6800H柯尼卡喷头的设备,设备特点是:1.色彩艳丽;2.超宽喷印…