当前位置: 首页 > news >正文

学习笔记整理之状态图与状态图搜索

开篇

本篇笔记来自于我对于学习人工智能的笔记整理,整理自《人工智能导论》(廉师友版)第三章的部分。

何为状态图?

状态图(也叫状态机图或有限状态机)是一种用来描述系统行为的工具。它通过图形化的方式表示系统在不同状态下的可能行为和状态之间的转换。

  • 什么是状态?
    状态是系统在某一时刻的条件或情况。可以想象成系统的“情景”或“模式”。比如,自动贩卖机的状态可能包括“待机中”、“接受硬币”、“出货中”等。
  • 状态图的组成部分
    • 状态(节点):代表系统的某个具体条件或情景。状态通常用圆圈或矩形表示。
    • 转换(边):表示系统从一个状态转变到另一个状态的过程。转换通常用箭头表示。
    • 事件或条件:引发状态转换的触发事件或条件。这些通常在箭头旁边标注,说明在什么情况下状态会发生变化。

状态图搜索

描述

所谓搜索,顾名思义,就是从初始节点出发,在图中试探地前进,寻找目标节点的过程(也可以反向进行)。那么,当目标节点找到后,路径也就找到了。所以寻找目标和寻找路径是一致的。可以想象,由于图中有许多节点和边,因此搜索过程中经过的节点和边,按连接关系,便会构成一个树形的有向图。这种树形有向图称为搜索树。

搜索方式

用计算机来实现状态图的搜索有两种基本方式:树式搜索和线式搜索。

树式搜索

所谓树式搜索,形象的说就是以“画树”的方式进行搜索。即从树根(初始节点)出发,一笔一笔的描绘出一棵树来。准确的讲,树式搜索就是在搜索过程中记录所经过的所有节点和边。所以树式搜索所记录的轨迹始终是一棵“树”,这棵树也就是搜索过程中所产生的搜索树。

线式搜索

所谓线式搜索,形象的说就是以“画线”的方式进行搜索。准确的讲,线式搜索在搜索过程中只记录那些当前认为是处在所找路径上的节点和边。所以,线式搜索所记录的轨迹始终是一条线(折线)。

线式搜索的基本方式可分为不回溯和可回溯的两种。

  • 不回溯

不回溯的线式搜索就是每到一个“岔路口”仅沿一条路进行前进,即对每一个节点始终都仅生成一个子节点(如果有子节点的话)。生成一个节点的子节点也称为对该节点进行拓展。这样,如果扩展到某一个节点,该节点恰好就是目标节点,则搜索成功;如果直到不能再扩展时,还没找到目标节点,则搜索失败。

  • 可回溯

可回溯的线式搜索也是对每一个节点都仅扩展一条边,但当不能再扩展时,则退回一个节点,然后再扩展另一条边(如果有的话)。这样,要么最终找到了目标节点,搜索成功;要么一直回溯到初始节点也未找到目标节点,则搜索失败。

  • 搜索策略

对于状态图搜索,已经提出了许多策略,大体可分为【盲目搜索】和【启发式搜索】两大类。

盲目搜索

盲目搜索就是无“向导”的搜索,启发式搜索就是有“向导”的搜索。那么,树式盲目搜索就是穷举式搜索,即从初始节点出发,沿连接边逐一考察各个节点(看是否为目标节点),或者反向进行;而线式盲目搜索,对于不回溯的就是随机碰撞式搜索,对于回溯的则也是穷举式的搜索。

启发式搜索

启发式搜索则是利用“启发性信息”引导的搜索。所谓的“启发性信息”就是与问题有关的有利于尽快找到问题解的信息或知识。

按搜索范围的扩展顺序的不同,搜索又可分为广度优先和深度优先两种类型。树式搜索即可深度优先进行,也可广度优先进行;不回溯的线式搜索,则总是深度优先进行。

搜索算法

树式搜索算法

  • 算法描述
    (注:这里强烈建议自己在纸上画一画,会更容易理解)

1.把初始节点S0放入OPEN表中
2.若OPEN表为空,则搜索失败,退出
3.移除OPEN表中第一个节点N放入CLOSED表中,并冠以顺序编号n
4.若目标节点Sn = N,则搜索成功,结束
5.若N不可扩展,则转2
6.拓展N,生成一组子节点,对这组子节点做如下处理:

  • 删除N的先辈节点(如果有的话)
  • 对已存在于OPEN表的节点(如果有的话)也删除之;但删除之前要比较其返回初始节点的新路径与原路径,如果新路径“短”,则修改这些节点在OPEN表中的原返回指针,使其沿新路径返回
  • 对已存在于CLOSED表的节点(如果有的话),做与b同样的处理,并且再将其移出CLOSED表,放入OPEN表重新拓展(为了重新计算代价)
  • 对其余子节点配上指向N的返回指针后放入OPEN表中某处,或对OPEN表进行重新排序,转2

不回溯的线式搜索

1.把初始节点S0放入CLOSED表中
2.令N=S0
3.若N是目标节点,则搜索成功,结束
4.若N不可扩展,则搜索失败,退出
5.拓展N,选取其一个未在CLOSED表中出现过的子节点N1,放入CLOSED表中,令N=N1,转步骤3

可回溯的线式搜索

1.把初始节点S0放入CLOSED表中
2.令N=S0
4.若N是目标节点,则搜索成功,结束
4.若N不可扩展,则移除CLOSED表中的末端节点Ne,若Ne=S0,则搜索失败,退出。否则,以CLOSED表新的末端节点Ne作为N,即令N=Ne,转步骤3
5.扩展N,选取其一个未在CLOSED表中出现过的子节点N1,放入到CLOSED表中,令N=N1,转步骤3

以上便是本次笔记的全部整理内容,后面会把对应算法的描述和具体代码实现整理。

相关文章:

  • AI模型的泛化性的第一性原理是什么?
  • 解释器模式(Interpreter Pattern)
  • Spark on yarn的作业提交流程
  • AppInventor2原生进度条组件LinearProgress用法及注意点
  • 试过沃尔玛的无人机送货吗?今年覆盖范围将翻番
  • 傲火集团传媒基地武汉启幕 构建数字娱乐产业生态闭环
  • yolov5环境配置
  • 拉深工艺——有凸缘圆筒形件的拉深(实例分析)
  • slam--运动方程和观测方程
  • 【驱动设计的硬件基础】处理器的分类
  • 解决蓝牙MAC 地址倒序问题
  • 如何快速删除谷歌浏览器在mac启动台生成的网页图标
  • 从零开始学Python(3)——函数
  • python-76-基于uv的python虚拟环境和包管理工具
  • 基于大模型预测单纯性孔源性视网膜脱离的技术方案大纲
  • Makefile 学习笔记
  • AI大模型从0到1记录学习 大模型技术之机器学习 day27-day60
  • 介绍一下 TCP方式程序的通讯,服务器机与客户机
  • DeepSeek AI功能演示:如何生成Verilog脚本
  • 延时神经网络 vs CNN vs RNN:时空建模的三种武器对比
  • 怎么把自己做的网站放到百度上/网络销售的方法和技巧
  • 怎么完整下载网站模板/ps培训
  • 网站tdk优化/优化大师使用方法
  • 企业网站建设相关书籍在线阅读/怎么在腾讯地图上添加自己的店铺
  • 阿里云 wordpress 邮件/连云港网站seo
  • 网站建设入门要求以及建站流程/做营销策划的公司