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

文章目录

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

上一篇

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

搜索概述

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

  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.mzph.cn/news/207620.shtml

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

相关文章

海思3516DV500下的目标识别算法运行评估,包含yolov7,yolov8

目前在3516DV500下,自己训练的模型的评估实测结果。根据实际模型会有些许差异。 涉及到技术细节的部分因为商业用途,有部分省略。如需相关技术服务项目合作可私信联系。 我司推出的目标识别跟踪模块,支持热红外、可见光主流多光谱视频输入与目…

WeiPHP 微信开发平台 SQL注入漏洞复现

0x01 产品简介 weiphp 是一个开源,高效,简洁的微信开发平台,基于 oneThink 内容管理框架实现。 0x02 漏洞概述 weiphp 微信开发平台 _send_by_group、 wp_where、 get_package_template等接口处存在 SQL 注入漏洞,攻击者利用此漏洞可获取数据库中的信息(例如,管理员后台…

三数组最小距离:2020年408算法题

算法思想 算法实现 #define INT_MAX 0x7fffffff //c语言int类型最大值 //计算绝对值 int abs(int a){if(a<0) return -a;else return a; } //判断a是否为3个数中最小值 bool isMin(int a,int b,int c){if(a<b&&a<c) return true;return false; }//主函数 in…

平台工程文化:软件开发的创新路径和协作之道

在快速发展的软件开发领域&#xff0c;具有前瞻性思维的企业组织正在拥抱平台工程文化的变革力量。这种创新方法强调创建共享平台、工具和实践&#xff0c;使开发人员能够更快、更高效地交付高质量的软件。在本文中&#xff0c;我们将深入探讨平台工程文化的核心原则和深远的好…

C语言期末考试复习PTA数据类型及表达式-分支结构程序-循环结构-数组经典选择题

目录 第一章&#xff1a;C语言数据类型和表达式 第一题&#xff1a; 第二题&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 第五题&#xff1a; 第六题&#xff1a; 第七题&#xff1a; 第八题&#xff1a; 第九题&#xff1a; 第二章&#xff1a;分支结构程序…

打包 抖音直播云游戏

抖音直播云游戏 oaid资源中的bcpkix-jdk15to18-1.68.jar与抖音云游戏的资源冲突。 其实资源名称是一样的&#xff0c;拷贝时资源名称有变化。 为解决此问题&#xff0c;需要规范化文件的资源名称&#xff0c;将.置为_ Error: Command failed: cmd /c echo off && Chc…

NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserv

问题 在IDEA运行HBASE脚本时出现如下报错&#xff1a; org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family table does not exist in region hbase:meta,,1.1588230740 i…

Java多线程并发(二)

四种线程池 Java 里面线程池的顶级接口是 Executor&#xff0c;但是严格意义上讲 Executor 并不是一个线程池&#xff0c;而只是一个执行线程的工具。真正的线程池接口是 ExecutorService。 newCachedThreadPool 创建一个可根据需要创建新线程的线程池&#xff0c;但是在以前…

深入了解数据库锁:类型、应用和最佳实践

目录 1. 引言 2. 数据库锁的基本概念 2.1 悲观锁和乐观锁 2.2 排他锁和共享锁 3. 悲观锁的应用场景 3.1 长事务和大事务 3.2 并发修改 3.3 数据库死锁 4. 悲观锁的最佳实践 4.1 精细控制锁的粒度 4.2 避免死锁 4.3 考虑乐观锁 5. 案例分析 5.1 银行系统的转账操作…

【GEE笔记】随机森林特征重要性计算并排序

随机森林是一种基于多个决策树的集成学习方法&#xff0c;可以用于分类和回归问题。在gee中可以使用ee.Classifier.smileRandomForest()函数来创建一个随机森林分类器&#xff0c;并用它来对影像进行分类。 随机森林分类器有一个重要的属性&#xff0c;就是可以计算每个特征&a…

人工智能虚拟化环境

人工智能虚拟化环境通过模拟、管理和优化计算资源、数据资源和软件环境&#xff0c;可以为人工智能算法和应用提供更加高效、灵活和可靠的运行平台。本文将探讨人工智能虚拟化环境的概念、技术和应用&#xff0c;并展望其在人工智能领域的未来发展。 首先&#xff0c;人工智能…

LVGL的学习

该LVGL基于LVGL的8.2版本 开关的控件Demo lv_obj_t* switch_obj lv_switch_create(lv_scr_act());lv_obj_set_size(switch_obj, 120, 60);lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0); 对象&#xff1a; 对于这一类对象&#xff0c;他们有共同的属性的几个特征。 创建部…

.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能

前言 前段时间有同学在微信群里提问&#xff0c;要使用.NET开发一个简单的爬虫功能但是没有做过无从下手。今天给大家推荐一个轻量、灵活、高性能、跨平台的分布式网络爬虫框架&#xff08;可以帮助 .NET 工程师快速的完成爬虫的开发&#xff09;&#xff1a;DotnetSpider。 注…

Vue3组件使用问题

Vue3组件学习 文章目录 Vue3组件学习一、Message 全局提示组件返回数据换行问题二、DatePicker 日期选择框组件限制选定年份问题 一、Message 全局提示组件返回数据换行问题 问题&#xff1a;使用中发现仅仅通过写入\n或<br/>&#xff0c;无法实现回车显示的结果。 解决…

在Pytorch中使用Tensorboard可视化训练过程

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 本节课我们来讲一下如何在pytouch当中去使用我们的tensorboard 对我们的训练过程进行一个可视化 左边有一个visualizing models data and training with tensorboard 主要是这么一个教程 那么这里…

Flutter一直 Running Gradle task ‘assembleDebug‘

Flutter升级到3.13.7之后&#xff0c;一直Running Gradle task ‘assembleDebug’&#xff0c;之前运行还没问题。 试了各种方法&#xff0c;比如添加阿里云镜像&#xff0c;flutter\packages\flutter_tools\gradle目录下修改build.gradle.kts文件&#xff0c;都不行。 参考大佬…

Termux+Hexo结合内网穿透轻松实现安卓手机搭建博客网站发布公网访问

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

ArkTS语言难吗?鸿蒙指南

HarmonyOS的开发语言是ArkTS、JS(JavaScript)。 ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在学习…

骨传导耳机品牌排行榜哪家强?盘点2024年骨传导耳机排行榜前十

随着科技的发展&#xff0c;耳机已经从单纯的音乐播放工具&#xff0c;演变为我们生活中不可或缺的伴侣。其中&#xff0c;骨传导耳机凭借其独特的传声方式&#xff0c;逐渐受到越来越多消费者的青睐。骨传导耳机通过骨头直接传递声音&#xff0c;避免了外耳道感染和中耳疾病&a…

Java 简易版 TCP(一对一)聊天

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…