人工智能之搜索方法

article/2025/10/24 3:04:19

人工智能之搜索方法


人工智能课程复习笔记专题
人工智能绪论
人工智能之知识表示
人工智能之搜索方法
人工智能之经典逻辑推理
人工智能之专家系统
人工智能之不确定推理方法
人工智能之机器学习

一、搜索的基本概念

1、搜索的含义

根据问题实际情况,不断寻找可利用的知识,构造一条代价最小的推理路线,使问题得以解决的过程称为搜索。

搜索类型
按是否使用启发式信息:盲目搜索、启发式搜索
按问题的表示方式:状态空间搜索、与或树搜索

2、问题表示法

2.1状态空间表示法

状态空间表示法用“状态”和“算符”来表示问题

  • 状态:描述问题求解过程不同时刻的状态
  • 算符:表示对状态的操作
  • 状态空间:由初始状态集合,算符集合、目标状态集合构成的三元组。
  • 状态空间图:状态空间的图表示,节点为状态、有向边为算符

  • 解:初始状态到目标状态所使用的算符序列

例子:二阶“梵塔”问题状态空间方法
1)状态的表示
柱的编号用i,j来代表 (i,j)表示问题的状态其中: i代表A所在的柱子
j 代表B所在的柱子
状态集合 (9种可能的状态)s0=(1,1), s1=(1,2), s2=(1,3)s3=(2,1), s4=(2,2), s5=(2,3)s6=(3,1), s7=(3,2), s8=(3,3)

2)操作(算符)的定义
定义操作A(i,j)表示把A从i移到j;B(i,j)表示把B从i移到j。
操作集合(共12个算符):
A(1,2),A(1,3),A(2,1),A(2,3),A(3,1),A(3,2)
B(1,2),B(1,3),B(2,1),B(2,3),B(3,1),B(3,2)

3)状态空间图

2.1与或树表示法

与或树表示方法也称问题归约方法。
把复杂问题转换为若干个需要处理的子问题后再加以分别求解的策略,可以递归的进行,直到问题转换为本原问题的集合。

分解
将问题归约为一组子问题,当子问题都有解,原问题才有解。
即子问题的“与”同原问题等价

等价变换
将原问题归约为一组子问题,当子问题其中一个有解,原问题就有解。
即子问题的“或”同原问题等价

本原问题
不能再分解或变换,而且可以直接求解的问题。

端节点与终止节点
在与/或树中,没有子节点的节点称为端节点;若该端节点是本原问题,则为终止节点。

可解节点
满足一下条件之一:
1)它是一个终止节点
2)它是一个或节点,且其子节点至少有一个是可解节点。
3)它是一个与节点,且其子节点均为可解节点

不可解节点
可解节点的条件均不满足

解树
可推出初始节点为可解节点的所有可解节点构成的子树

例子

二、状态空间树的搜索方法

1、状态空间的盲目搜索方法

特点
1)按规定路线搜索,不使用启发式信息
2)适用于状态空间图为树结构的问题
搜索过程
OPEN表:待考查节点
CLOSED表:已考察节点
结束标志
目标状态出现

1.1宽度优先搜索

1)把起始节点放入OPEN表中
2)若OPEN表为空表则没有解,失败退出,否则继续。
3)把OPEN表的第一节点N放入CLOSED表中
4)考察节点N是否为目标节点,如果是则得到了解,否则继续
5)如果N不可扩展,转至2),否则继续。
6)取出N的所有节点放入OPEN表末尾,并为其配置父节点指针,然后转至2

例子

宽度优先改进
判断其子节点是否为目标节点,这样可以减少一层

1.2深度优先搜索

与宽度优先方法相同,只是第3)步从OPEN表取的是最后一个节点。

例子

有界深度优先搜索
固定深度:
到一定深度没有则搜索兄弟节点
可变深度:
先小深度,再变大
可变深度改进:
搜到解后该深度为最大深度,继续搜索,深度只能减小,直至找到最优解

1.3代价树

边上标有代价的树称为代价树。在代价树中,若用g(x)表示从初始节点S0到节点x的代价,用c(x1,x2)表示从父节点x1到子节点x2的代价,则有:
g(x2) = g(x1) + c(x1,x2)

代价树的宽度优先搜索
每次扩展时总是从OPEN表中选取全部代价最小的节点进行扩展。
代价树的深度优先搜索
每次扩展时总是选取刚扩展出来的节点中代价最小的节点进行扩展。

2、状态空间的启发式搜索

在搜索过程中,关键的一步是如何确定下一个要考察的节点,确定的方法不同就形成了不同的搜索策略。如果在确定节点时能充分利用与问题求解有关的控制信息,估计出节点的重要性,就能在搜索时选择重要性较高的节点,以利于求得最优解。

估计函数
f(x) = g(x) + h(x)
其中g(x)为从初始节点S0到节点x已经实际付出的代价;h(x)是从节点x到目标节点Sg的最优路径的估计代价, h(x)称为启发函数,它体现了问题的启发性信息。

局部择优搜索
当一个节点被扩展以后,按f(x)对每一个子节点计算估价值,并选择最小者作为下一个要考察的节点。

深度优先搜索:f(x) = d(x)
代价树的深度优先搜索:f(x) = g(x)
局部择优搜索:f(x) = g(x) + h(x)

全局择优搜索
每次总是从OPEN表的全体节点中选择一个估价值最小的节点。

宽度优先搜索:f(x) = d(x)
代价树的宽度优先搜索:f(x) = g(x)
全局择优搜索:f(x) = g(x) + h(x)

有序搜索

当搜索过程生成一个节点i时,需要把节点i的状态与已生成的所有节点的状态进行比较,若节点i是一个已生成的节点,则表示找到一条通过节点i的新路径。若新路径使节点i的估价值更小,则修改节点i指向父节点的指针,使之指向新的父节点;否则,不修改节点i原有的父节点指针,即保留节点i原有的路径。

(1) 把初始节点S0放入OPEN表,f(S0)。
(2) 如果OPEN表为空,则问题无解,退出。
(3) 把OPEN表的第一个节点(记为节点n)取出放入CLOSED表。
(4) 考察节点n是否为目标节点。若是,则求得了问题的解,退出。
(5) 若节点n不可扩展,则转第(2)步。
(6) 扩展节点n,生成其全部子节点。对节点n的每个子节点i,计算f(i)。考察节点i是否为已生成过的节点。① 如果节点i既不在OPEN表中,又不在CLOSED表中,则节点  i是一个新节点。为节点i配置指向父节点n的指针,把节点I 放入OPEN表中,然后对OPEN表中的全部节点按估价值从小到大的顺序进行排序。② 如果节点i已在OPEN表中或在CLOSED表中,则节点i是一个已生成过的节点。比较节点i刚计算的f(i)新值与表中记载的 f(i)旧值,若新的f(i)值较小则:(a)对表中节点i的有关记载进行下述修改:用f(i)的新值代替旧值,修改节点i指向父节点的指针,使之指向新的父节点n。(b)若节点i在CLOSED表中,则把节点i移回OPEN表。(7) 然后转第(2)步

A*算法

我们希望估价函数f是f*的一个估计,此估计可由下式给出:    f(n)=g(n)+h(n)  其中:g是g*的估计;h是h*的估计。对于g(n)来说。很显然g(n)≥g*(n)。对于h*(n)估计h(n),它依赖于有关问题的领域的启发信息。

定义1 :在GRAPHSEARCH过程中,如果第8步的重排OPEN表是依据f(x)=g(x)+h(x)进行的,则称该过程为A算法。
定义2 :在A算法中,如果对所有的x,h(x)≤h*(x)成立,则称h(x)为h*(x)的下界,它表示某种偏于保守的估计。
定义3 :采用h*(x)的下界h(x)为启发函数的A算法,称为A*算法。  

三、与或树的搜索算法

基本思想:
扩展(自上而下)
标示(自下而上)
结束条件:初始节点为可解或不可解

搜索过程:
(1)把原始问题作为初始节点S0,并将其作为当前节点。
(2)应用分解或等价变换算符对当前节点进行扩展。
(3)为每个子节点设置指向父节点的指针
(4)选择合适的子节点作为当前节点,反复应用(2)(3)步,在此期间要多次应用可解标示过程和不可解标示过程,直到初始节点被标示为可解节点或不可解节点。
可解标示过程:
由可解子节点来确定父节点,祖父节点等为可解节点的过程
‘与’节点只有当其子节点全为可解节点时,才为可解节点;
‘或’节点只要有一个子节点为可解节点,它就是可解节点。
不可解标示过程:
由不可解子节点来确定父节点,祖父节点等为不可解节点的过程
‘与’节点只要其子节点有一个为不可解节点,它就是不可解节点;
‘或’节点只有当其子节点都为不可解节点,它才是不可解节点。

1、与或树的盲目搜索

1.1与或树的宽度优先搜索

按照“先产生的节点先扩展”的原则进行搜索。
与/或树的宽度优先搜索与状态空间的宽度优先搜索的主要差别是,需要在搜索过程中需要多次调用可解标识过程或不可解标识过程.

1.2与或树的深度优先搜索

与/或树的深度优先搜索和与/或树的宽度优先搜索过程基本相同,其主要区别在于OPEN表中节点的排列顺序不同。在扩展节点时,与/或树的深度优先搜索过程总是把刚生成的节点放在OPEN表的首部。

2、与或树的启发式搜索

2.1与或树的有序搜索

解树的代价
终止节点:h(x)=0
或节点:h(x) = min{c(x,yi) + h(yi)}
与节点:h(x) = ∑(c(x,yi) + h(yi)) 或h(x) = max{c(x,yi) + h(yi)}
不可扩展的非终止节点:h(x) = ∝
例子

希望树
搜索过程中最有可能成为最优解的那棵树
(1) 初始节点S0在希望树T
(2) 如果n是具有子节点n1, n2, … , nk的或节点,则n的某个子节点ni在希望树T中的充分必要条件是
h(ni) = min{c(n,ni) + h(ni)}

(3) 如果n是与节点,则n的全部子节点都在希望树T中。
例子

2.2博弈树

在博弈过程中,任何一方都希望自己取得胜利。因此,当某一方当前有多个行动方案可供选择时,他总是挑选对自己最为有利而对对方最为不利的那个行动方案。把上述博弈过程用图表示出来,则得到的是一棵“与或树”。

博弈树的特点

  • 博弈的初始格局是初始节点。
  • 在博弈树中,“或”节点和“与”节点是逐层交替出现的。自己一方扩展的节点之间是“或”关系,对方扩展的节点之间是“与”关系。双方轮流地扩展节点。
  • 所有自己一方获胜的终局都是本原问题,相应的节点是可解节点;所有使对方获胜的终局都是不可解节点。

极大极小分析法

为计算得分,需要根据问题的特性信息定义一个估价函数,用来估算当前博弈树端节点的得分。

当端节点的估值计算出来后,再推算出父节点的得分。
推算的方法是:

  • 对“或”节点,选其子节点中一个最大的得分作为父节点的得分,这是为了使自己在可供选择的方案中选一个对自己最有利的方案;
  • 对“与”节点,选其子节点中一个最小的得分作为父节点的得分,这是为了立足于最坏的情况。

或取大,与取小

如果一个行动方案能获得较大的倒推值,则它就是当前最好的行动方案。

α-ß剪枝技术

或节点取大,可以实时获得下确界;与节点取小,可以实时获得上确界

α剪枝:
对于一个与节点MIN,若能估计出其倒推值的上确界β,并且这个β值不大于MIN的父节点(一定是或节点)的估计倒推值的下确界α,即α≥β,则就不必再扩展该MIN节点的其余子节点了

因为或取大,或的子节点是与节点,与节点取小。所以与节点的一个子节点出来后就知道该与节点的最大值β(与节点取小,后面只能把该值调小而已)。该与节点的父节点是或节点,取大,所以当β无法大于此时父节点的值时,后面就无法再大与了,所以该与节点没必要在扩展节点了。

ß剪枝
对于一个或节点max,若能估算其下确界α,并且这个α不小于其父节点(与节点)的上确界β,即α≥β,则不必再扩展max的子节点了。

或节点取大,所以可以估算下确界α,后面再扩再扩展只节点,都不可能变小了,而其父节点是与节点,与节点取小有上确界β,不能再变大了,所以α≥β,α对β是没影响的,所以不用再扩展了。


http://chatgpt.dhexx.cn/article/IX00qfcj.shtml

相关文章

智能搜索引擎 | 驱动电商业务增长实践

开放搜索是阿里集团搜索业务中台,基于大数据深度学习在线服务体系打造的智能搜索云服务产品。拥有核心引擎、召回排序、搜索引导、充分开放等核心能力,可应用在电商行业、教育行业、内容行业等场景。目前帮助数千家客户搭建自己的搜索业务。 实践案例&a…

搜索。。。

1、mysql的like具有局限性 # 体现在功能不全,性能低。不适用于全文搜索(日志或简历中搜索字段)、没有相关性搜索排名等等 select name from goods WHERE name LIKE "%苹果%"2、试试elasticsearch 搜索 1、解决mysql like 的短板 …

人工智能——图搜索

一.数据驱动和目标驱动搜索 以下情况建议使用目标驱动搜索: (1)目标或假设是在问题陈述中给出的。例如定理的证明,目标就是定理。 (2)与问题数据匹配的规则非常多,会产生大量分支…

人工智能搜索策略:A*算法

人工智能搜索策略:A*算法 目录 人工智能搜索策略:A*算法A算法1.全局择优搜索2.局部择优搜索 A*算法1. A*算法的可纳性2. A*算法的最优性3. h(n)的单调限制A* 算法应用举例对A*算法的一点思考熟练掌握A*算法的性质A*算法的性质A*算法的最优性h(n)的单调限…

智能搜索框

html部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, i…

Artificial Intelligence 人工智能 AI search AI 搜索

文章目录 前言一、Uninformed Search (无信息搜索&#xff09;二、Data structure for search tree三、Breadth-first search (广度优先搜索)1. Pseudocode for a BFS 四、Depth-first search (深度优先搜索)1. Pseudocode for a DFS 五、Measuring performance六、BFS和DFS时间…

搜索技术——群智能

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 一&#xff1a;初识群智能 1.1&#xff1a;粒子群算法 粒子群算法&#xff0c;也称粒子群优化算法或鸟群觅食算法&#xff08;Particle Swarm Optimization&#xff09;&#xff0c;缩写…

人工智能之搜索算法

通过搜索来解决问题 文章目录 通过搜索来解决问题1. 什么是算法?2. 什么是搜索?3. 搜索算法3.1 如何做路径规划?3.2 搜索过程3.3 通用搜索算法3.4 盲目的搜索算法3.4.1 深度优先遍历(Deep First Search)3.4.2 广度优先遍历(BFS)3.4.3 Dijkstra 算法3.5 启发式搜索算法(有信息…

人工智能:搜索策略

一、无信息的搜索策略 1.宽度优先搜索 2.一致代价搜索 当每一步的行动代价都相等时宽度优先搜索是最优的,因为它总是先扩展深度最浅的未扩展结点。 一致代价搜索( uniform-cost search)扩展的是路径消耗(gn)最小的结点n。这可以通过将边缘结点集组织成按g值排序的队列来实现…

人工智能中的搜索

最近在mooc学习人工智能&#xff1a;模型于算法&#xff0c;下面记录课上的例子和学到的东西。 首先&#xff0c;人工智能搜索是从海量的信息源中通过约束条件和额外信息运用算法找到问题所对应的答案。 正所谓&#xff0c;你见&#xff0c;或者不见我&#xff0c;我就在那里不…

人工智能——搜索技术

转载&#xff1a;https://blog.csdn.net/Sun7_She/article/details/40344329 AI-3的80~84不懂 A*算法不懂 引言&#xff1a; 什么是搜索&#xff1a; 根据问题的实际情况不断寻找可利用的知识&#xff0c;构造出一条代价较少的推理路线&#xff0c;使问题得到圆满的解决的过程称…

新一代智能搜索引擎,让搜索一击即中

什么是搜索&#xff1f; 搜索引擎的英文为search engine。 搜索引擎是一个对互联网信息资源进行搜索整理和分类&#xff0c;并储存在专属网络数据库中供用户查询的系统&#xff0c;包括信息搜集、信息分类、用户查询三部分。 从使用者的角度看&#xff0c;搜索引擎提供一个包含…

浅谈人工智能搜索技术论文

摘要&#xff1a;本文简单阐述了人工智能中的智能搜索技术的概念以及启发式搜索算法&#xff0c;介绍了几种启发式搜索函数的选择及其研究中遇到的难题&#xff0c;并从中求解来探讨解决问题的思路。 关键词&#xff1a;智能搜索&#xff1b;状态空间&#xff1b;与/或树&…

Python搭建代理IP池(三)- 检测 IP

在获取 IP 时&#xff0c;已经成功将各个网站的代理 IP 获取下来了&#xff0c;然后就需要一个检测模块来对所有的代理进行一轮轮的检测&#xff0c;检测可用就设置为满分&#xff0c;不可用分数就减 1&#xff0c;这样就可以实时改变每个代理的可用情况&#xff0c;在获取有效…

ProxyPool 爬虫代理IP池(分享)

GitHub - jhao104/proxy_pool: Python爬虫代理IP池(proxy pool)https://github.com/jhao104/proxy_pool/ProxyPool 爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库&#xff0c;定时验证入库的代理保证代理的可用性&#xff0c;提供API和CLI两种使用方式。同时…

python爬虫设置代理ip池【源代码】(存入数据库)

python爬虫设置代理ip池【源代码】 在爬取各大网站时&#xff0c;经常遇到一些由于访问次数过多或者访问频率过高&#xff0c;而导致你的ip被“封”。所以我们运用 代理ip池 来解决这个由于访问频率过高而终止爬取进行。 下面介绍一下免费获取代理ip池的方法&#xff1a; 一…

python3之爬虫代理IP的使用+建立代理IP池

爬虫代理IP的使用建立代理IP池 代理IP的使用建立代理IP池完整代码 代理IP的使用 先了解一下百度百科定义的IP 为什么要使用代理IP? 反爬(反网络爬虫) 示例: 测试网址 http://httpbin.org/get 用浏览器先访问测试网址下看看 再用我们写的代码简单请求一下网页看看 impo…

教你创建一个免费的代理IP池(txt存储版本)

教你创建一个免费的代理IP池&#xff08;txt存储版本&#xff09; 很多人可能会为爬虫被ban&#xff0c;IP被封等反爬机制苦恼&#xff0c;接下来我就教给大家如何白嫖做一个代理IP池。 准备工作 首先是准备工作&#xff0c;因为是第一个版本&#xff0c;因此我打算先用txt存…

什么是代理IP池,如何构建?

什么是代理ip池&#xff1f; 通俗地比喻一下&#xff0c;它就是一个池子&#xff0c;里面装了很多代理ip。它有如下的行为特征&#xff1a; 1.池子里的ip是有生命周期的&#xff0c;它们将被定期验证&#xff0c;其中失效的将被从池子里面剔除。 2.池子里的ip是有补充渠道的&…

Python爬虫——怎么搭建和维护一个本地IP池

目录 背景 一、什么是本地代理IP池 二、代理IP池功能架构图 三、各个组件功能说明及示例代码 1. IP池管理器 2. 代理IP获取器 3. IP质量检测器 4、数据存储器 5、API接口层 6、应用程序 总结 背景 在我们进行爬虫工作时&#xff0c;经常需要使用代理IP。大多数代理…