人工智能原理复习--搜索策略(一)

文章目录

  • 上一篇
  • 搜索概述
  • 一般图搜索
  • 盲目搜索
  • 下一篇

上一篇

人工智能原理复习–确定性推理

搜索概述

问题求解分为两大类:知识贫乏系统(依靠搜索技术解决)、知识丰富系统(依靠推理技术)
两大类搜索技术:

  1. 一般图搜索、启发式搜索
  2. 基于问题规约的与或图搜索

求解问题包括:1. 目标表示 2.搜索 3.执行
初始状态集合和操作符集合定义了问题的搜索空间

搜索策略评价标准:

  1. 完备性
  2. 最优性
  3. 时间复杂性
  4. 空间复杂性

一般图搜索

状态空间搜索是一般图搜索的代表形式,用状态空间搜索来求解问题的系统均定义一个状态空间,并通过适当的搜索算法态空间中搜索解答路径

状态空间表示法:定义状态的描述形式,将一切状态表示出来,再定义一组操作算子,通过他们将问题由一种状态转变为另一个状态。问题求解过程就是不断通过操作作用于状态的过程,得到操作状态到目标状态所用的操作序列的过程。

而使用操作最少或较少的解称为最优解,采用不同的搜索策略得到的结果顺序也可能不同。



状态空间可表示成二元组(S, O):
S:表示所有可能到达的合法状态构成的集合
O:表示操作算子的集合
状态就用一个矢量来表示某一时刻问题现状的快照

状态空间图:1. 结点:状态 2. 有向弧:状态的变迁 3.弧上的标签:导致状态变迁的操作算子
问题的状态空间是一个表示该问题的所有可能状态及其变迁的有向图

状态空间表示例子在这里插入图片描述

  1. 状态:(1, 0, 1) 表示状态位(正,反,正)
  2. 操作算子:
    a:表示翻转第一个钱币
    b:表示翻转第二个钱币
    c:表示翻转第三个钱币

在这里插入图片描述
传教士与野人问题
描述:N个传教士带领N个野人划船过河;
需要满足三个约束条件:

  1. 船上人数不得超过载重限量,设为K个人
  2. 任意时刻(包括两岸、船上)野人数量不得超过传教士
  3. 允许在河的某一岸或者在船上只有野人而没有传教士

求解当N = 3,K = 2时的状态空间有向图
解:
状态表示:
(m, c, b)表示(传教士在左岸的实际数量,野人在左岸实际数量,船是否停在左岸(0/1))
共有 4 x 4 x 2 = 32中状态
其中合法状态:

  1. 左岸传教士和右岸传教士人数大于野人
    m = 1, c = 1; m = 2, c = 2;
  2. 左岸只有野人没有传教士
    m = 0, c = 0, 1, 2, 3
  3. 左岸只有传教士没有野人
    m = 3, c = 0, 1, 2, 3

不可能达到的合法状态:

  • (0, 0, 1)人过去了船飘了回去
  • (0, 3, 0) 传教士过去不带野人不符合目的
  • (3, 0, 1) 野人过去但是船回来了
  • (3, 3, 0) 只有船过去了

操作算子:
L(x, y)表示从左岸向右岸划船,x表示传教士人数,y表示野人数量
R(x, y)表示从右岸向左岸划船,x表示传教士人数,y表示野人数量

x, y取值为(1, 0) , (2, 0), (1, 1), (0, 1), (0, 2)
可以看出野人自己也会划船

在这里插入图片描述
而整个状态空间搜索可以用五元组表示:
SE=(S,O,E,I,G)
E–搜索引擎(搜索策略/算法)
I–问题的初始状态
G–问题的目标状态

基本思想:通过搜索引擎E寻找一个操作算子的调用序列,使问题从初始状态I变迁到目标状态G之一。
解答路径就是从初始状态到目标状态的操作算子的调用序列。

搜索树:
一般图的搜索过程是或图,操作算子之间时一种“或”的关系

搜索术语:

  1. 节点深度:根节点指示初始状态,不同情况对应的操作顺序长度
  2. 节点扩展:应用操作算子将上一状态转变到下一状态而拓展出节点
  3. 路径:要求路径是无环的
  4. 路径代价:

符号说明:
s – 初始状态节点
G – 搜索图
OPEN – 存放待扩展节点的表
CLOSE – 存放已被扩展的结点的表
MOVE-FIRST(OPEN) – 取OPEN表首的节点作为当前要被扩展的节点n同时将结点n移至CLOSE表

分为两个阶段:

  1. 初始化
    • 建立只包含初始结点s的搜索图G:={s}
    • OPEN:={s}
    • CLOSE:={}
  2. 搜索循环
    • MOVE-FIRST(OPEN)-取出OPEN表首的结点n作为扩展节点,同时将其移到close表
    • 拓展n的子节点,插入图G和OPEN表
    • 适当标记和修改指针
    • 排序OPEN表

扩展的节点分为3类:

  1. 全新节点(直接加入到OPEN表中)
  2. 已出现在OPEN表中的节点(在OPEN表排序,找最短搜索顺序)
  3. 已出现在CLOSE表中的节点(当前确定的路径)

盲目搜索

提高搜索效率的关键是优化OPEN表中节点的排序方式

BFS
扩展当前节点后生成的子节点总是置于OPEN表的后端,及OPEN表作为队列,先进先出,是搜索优先向横向方向发展。

性质:

  1. 当问题有解时,一定能找到解
  2. 当问题为单位代价时,有解时,一定能找到最优解
  3. 效率较低,具有通用性,属于图搜索方法

优缺点:

  1. 找到目标节点的路径最短
  2. 时间和空间复杂度都比较高,无用节点较多

DFS
扩展当前节点后生成的子节点总是置于OPEN表的前端,即OPEN表作为栈,后进后出,使搜索优先向纵深方向发展。

由于人工智能中一条路径的深度不可测,所以这样做不一定找得到最佳解,甚至可能找不到解,所以为了保证能找到解所以应加上深度界限(有界DFS),或者采取不断加大深度界限的办法,反复搜索(迭代加深DFS)。

DFS的性质:

  • 不能保证找到最优解
  • 当深度限制不合理时,可能找不到解
  • 最坏情况下相当于穷举,是一个通用的与问题无关的方法

优缺点:
优点:比BFS使用较少的空间
缺点:既不是完备的,也不是最优的

BFS与DFS的比较

DFSBFS
适用场合当问题有多个解且只需要找到其中一个时,往往对深度进行限制确保搜索到的是最短路径
共同优缺点优点:不需要设计排序方法,简单易行,适用于复杂度不高的问题缺点:节点排序的盲目性,白白搜索了大量无关的状态节点

有界DFS
按深度优先算法进行,但是要给深度一个限制

深度dm很重要,当dm过小时可能找不到解是不完备的,当dm过大时,搜索过程会产生过多的无用节点,即浪费了计算机资源,又降低了搜索效率

主要问题就是深度限制值dm的选取

迭代加深搜索
先任意给定一个较小的数作dm,然后按有界深度算法搜索,若在此深度限制内找到了解,则算法结束,否则增大深度限制dm,继续搜索。

相对于整个树的结点来说,距离根节点的节点就是很少的,对这些节点反复扩展对于整个树来说是很小的,所以相对看了负担实际很小。

四种方法的比较

  • 四种方法都可以用于生成和测试后面改进的算法的性能
  • 宽度优先搜索需要指数数量的空间,深度优先搜索的空间复杂度和最大搜索深度呈线性关系
  • 迭代加深搜索对一颗深度受控的树采用深度优先的搜索,它结合了宽度优先和深度优先的优点,和宽度优先搜索一样,它是最优的,也是完备的。但对空间要求和深度优先搜索一样是适中的。
标准宽度优先深度优先有界深度迭代加深
时间 b d b^d bd b m b^m bm b d m b^{dm} bdm b d b^d bd
空间 b d b^d bd b ∗ m b*m bm b ∗ d m b*dm bdm b d bd bd
最优
完备如果 d m > d dm > d dm>d

b是分支系数,d是解答深度,m是搜索树的最大深度,dm是深度限制

下一篇

未完待续

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

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

相关文章

2023.12.7 关于 MySQL 事务详解

目录 事务的四大特性 原子性 一致性 持久性 隔离性 事务并发执行 脏读 不可重复读 幻读 四个隔离级别 read uncommitted read committed repeatable read serializable 事务的四大特性 原子性 一个事务中的所有操作,要么全部完成,要么全部…

MIT线性代数笔记-第26讲-复习二

目录 26.对称矩阵及正定性打赏 26.对称矩阵及正定性 实对称矩阵的特征值均为实数,并且一定存在一组两两正交的特征向量 这对于单位矩阵显然成立 证明特征值均为实数: ​    设一个对称矩阵 A A A,对于 A x ⃗ λ x ⃗ A \vec{x} \lambda…

Pipenv环境配置+Pytest运行

环境配置 使用Pipenv进行虚拟环境管理,Pipfile为依赖模块管理文件。 安装pipenv:brew install pipenv根项目根目录下执行命令创建虚拟环境: pipenv install在Pycharm中指定项目运行的虚拟环境 :File->Settings->Project:-…

好莱坞明星识别

一、前期工作 1. 设置GPU from tensorflow import keras from tensorflow.keras import layers,models import os, PIL, pathlib import matplotlib.pyplot as plt import tensorflow as tfgpus tf.config.list_physical_devices("GPU")if gpus:gpu0 …

【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则表达式定义 )

【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式的开发手册 前提介绍正则表达式正则表达式的历史正则表达式的定义正则表达式的组成普通字符非打印字符特殊字符限定符限定符案例分析贪婪匹配/非贪婪匹配方式 定位符选择组合符后向引用 总结心得 前提…

5.10 Windows驱动开发:摘除InlineHook内核钩子

在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩,对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能,此类功能的实现一般可在应用层进行,而驱动层只需要保留一个读写字节的函数即可…

[⑦ADRV902x]: JESD204学习笔记

前言 JESD204B/C基于SERDES(SERialization/DESerialization)技术,也就是串化和解串,在发送端将多位并行的数据转换为1 bit的串行数据,在接收端将串行数据恢复成原始的并行数据。 在JESD204接口出现以前,数…

stm32串口编程实例-实现数据的收发功能

大家好,今天给大家介绍stm32串口编程实例,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 串口是USART(通用同步/异步收发器)的俗称。 实际上,串行总线并不…

git常用命令指南

目录 一、基本命令 1、创建分支 2、切换分支 3、合并分支 4、初始化空git仓库 二、文件操作 1、创建文件 2、添加多个文件 3、查看项目的当前状态 4、修改文件 5、删除文件 6、提交项目 三、实际操作 1、创建目录 2、进入新目录 3、初始化空git仓库 4、创建文…

C 语言 变量

变量初始值 全局变量:初始值是 0 局部变量:初始值是 随机的 类型限定符 通常不需要显式使用 register 关键字来优化变量的存储和访问。 关键字 _Complex和_Imaginary分别用于表示复数和虚数(二者皆是数学概念) 变量的声明和定义 c…

计算机方向的一些重要缩写和简介

参考: 深度学习四大类网络模型 干货|机器学习超全综述! 机器学习ML、卷积神经网络CNN、循环神经网络RNN、马尔可夫蒙特卡罗MCMC、生成对抗网络GAN、图神经网络GNN——人工智能经典算法 MLP(Multi Layer Perseption)用在神经网络中…

LeetCode Hot100 78.子集

题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 方法:灵神 选 or 不选 class Solution {private final List&…