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

news2024/11/26 2:28:22

文章目录

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

上一篇

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

搜索概述

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

  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.coloradmin.cn/o/1296608.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验3.5 路由器的单臂路由配置

实验3.5 路由器的单臂路由配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.SWA的基本配置2.RA的基本配置3.在RA上查看接口状态 六、任务验收七、任务小结 一、任务描述 某公司对部门划分了需VLAN之后,发现两个部门之间无法通信,但…

深入理解 Promise:前端异步编程的核心概念

深入理解 Promise:前端异步编程的核心概念 本文将帮助您深入理解 Promise,这是前端异步编程的核心概念。通过详细介绍 Promise 的工作原理、常见用法和实际示例,您将学会如何优雅地处理异步操作,并解决回调地狱问题。 异步编程和…

从阻抗匹配看拥塞控制

先来理解阻抗匹配,但我不按传统方式解释,因为传统方案你要先理解如何定义阻抗,然后再学习什么是输入阻抗和输出阻抗,最后再看如何让它们匹配,而让它们匹配的目标仅仅是信号不反射,以最大能效被负载接收。 …

【二分查找】LeetCode:2354.优质数对的数目

作者推荐 贪心算法LeetCode2071:你可以安排的最多任务数目 本文涉及的基础知识点 二分查找算法合集 题目 给你一个下标从 0 开始的正整数数组 nums 和一个正整数 k 。 如果满足下述条件,则数对 (num1, num2) 是 优质数对 : num1 和 num2 都 在数组 …

excel数据重复率怎么计算【保姆教程】

大家好,今天来聊聊excel数据重复率怎么计算,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: excel数据重复率怎么计算 在Excel中计算数据重复率可以通过以下步骤实现: 1. 确定重复…

初识Matter——esp-box控制两盏灯

初识Matter 一、效果展示 二、准备 1.ubuntu系统/Mac系统电脑 2.安装esp-idf及esp-matter环境 3.esp-box设备 4.两块esp32 5.两个led灯或使用板载灯 三、烧录固件(esp-box) 下载esp-box例程 git地址:GitHub - espressif/esp-box: Th…

基于单片机指纹考勤机控制系统设计

**单片机设计介绍,基于单片机指纹考勤机控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的指纹考勤机控制系统是一种用于管理员工考勤和实现门禁控制的设计方案。它通过使用单片机作为主控制器…

线性代数入门与学习笔记

该内容为重拾部分线性代数知识的学习笔记,内容上更多的是为了解决问题而学习的内容,并非系统化的学习。 针对的问题为:Music算法推导求解过程中的矩阵计算知识。 学习的内容包括:矩阵原理、矩阵行列式、矩阵的秩、线性变换矩阵变换…

J.408之数据结构

J-408之数据结构_北京信息科技大学第十五届程序设计竞赛(同步赛) (nowcoder.com) 思维好题,直接用两个set存没出现的数字就好了 // Problem: 408之数据结构 // Contest: NowCoder // URL: https://ac.nowcoder.com/acm/contest/68572/J // Me…

cmake生成表达式

不积小流&#xff0c;无以成江海 <CONFIG:RELEASE> config这个关键字&#xff0c;主要是看CMAKE_BUILD_TYPE这个变量的值是不是和冒号后的一样&#xff0c;一样的话就返回true, 否则就是false. cmake_minimum_required(VERSION 3.10) project(Test) set(CMAKE_CXX_STA…

腾讯地图系列(二):微信小程序添加插件(三种方法)以及插件AppId获取

目录 第一章 前言 第二章 添加插件 2.1 微信小程序添加插件方法一&#xff08;微信公众平台添加插件&#xff09; 2.2 微信小程序添加插件方法二&#xff08;通过项目配置添加插件&#xff09; 2.3 微信小程序添加插件方法三&#xff08;微信公众平台服务市场添加插件&…

OpenCL学习笔记(一)开发环境搭建(win10+vs2019)

前言 异构编程开发&#xff0c;在高性能编程中有重要的&#xff0c;笔者本次只简单介绍下&#xff0c;如何搭建简单的开发环境&#xff0c;可以供有需要的小伙伴们开发测试使用 一、获取opencl的sdk库 1.使用cuda库 若本机有Nvidia的显卡&#xff0c;在安装cuda库后&#x…

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式

理解 GET、POST、PATCH 和 DELETE 请求的参数传递方式 本文将向您介绍在使用 GET、POST、PATCH 和 DELETE 请求时如何传递参数。通过详细解释每种请求的参数传递方式和示例代码&#xff0c;您将了解如何正确地将数据发送到服务器并与之交互。 GET 请求的参数传递方式 在 GET…

Navicat 技术指引 | 适用于 GaussDB 分布式的数据生成功能

Navicat Premium&#xff08;16.3.3 Windows 版或以上&#xff09;正式支持 GaussDB 分布式数据库。GaussDB 分布式模式更适合对系统可用性和数据处理能力要求较高的场景。Navicat 工具不仅提供可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结…

spring boot学习第五篇:spring boot与JPA结合

1、准备表&#xff0c;创建表语句如下 CREATE TABLE girl (id int(11) NOT NULL AUTO_INCREMENT,cup_Size varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4…

JVS低代码表单引擎:数据校验与处理的先锋

随着信息技术的迅速发展&#xff0c;数据校验与处理已经成为了各类应用中不可或缺的一环。尤其是在涉及敏感信息&#xff0c;如密码处理时&#xff0c;其安全性和准确性显得尤为重要。JVS低代码表单引擎提供了强大的文本组件触发逻辑校验功能&#xff0c;它能够在用户填写数据的…

[笔记]ARMv7/ARMv8 交叉编译器下载

开发 Cortex-A7、Cortex-A72 或其他 ARM 架构 profile 芯片时&#xff0c;经常需要下载对应架构的交叉编译器&#xff0c;所以写这篇笔记&#xff0c;用于记录一下交叉编译器下载流程&#xff0c;免得搞忘。 编译环境&#xff1a;ubuntu 虚拟机 下载地址 我们可以从 ARM 官网…

二分查找|前缀和|滑动窗口|2302:统计得分小于 K 的子数组数目

作者推荐 贪心算法LeetCode2071:你可以安排的最多任务数目 本文涉及的基础知识点 二分查找算法合集 题目 一个数组的 分数 定义为数组之和 乘以 数组的长度。 比方说&#xff0c;[1, 2, 3, 4, 5] 的分数为 (1 2 3 4 5) * 5 75 。 给你一个正整数数组 nums 和一个整数…

教育心得整理

压抑使人反抗&#xff0c;反抗就是报复&#xff0c;报复就会引起犯罪。要消灭犯罪&#xff0c;我们必须杜绝引起孩子报复心理的行为&#xff0c;更重要的是&#xff0c;我们一定要对孩子表现出来爱与尊重 限制批评的次数限制每次批评的范围限制每次批评的强度 当彼此的信任和…

数据结构-线性表的链式存储结构

术语&#xff1a; 1.结点&#xff1a;数据元素的存储映像。有数据域和指针域两部分组成。 2.链表&#xff1a;n个结点由指针组成一个链表 3.结点只有一个指针域的链表&#xff0c;成为单链表或线性链表。 4.结点有两个指针域的链表&#xff0c;成为双链表。 5.首尾相接的链…