常用搜索算法—盲目搜索和启发式搜索

人工智能-搜索----启发式搜索 搜索算法的形式化描述: <状态state、动作motion、状态转移state transition、路径path、测试目标test target> 一、启发式搜索(有信息搜索)(Heuristic Search) 代表算法:贪婪最佳优先搜索(Greedy best-first search)、A*搜索 启发式搜索需要有: 1、辅助信息,也就是与求解问题相关的额外信息,就跟... 阅读详情
AI摘要

本文介绍常见搜索算法,包括盲目搜索(如广度优先、深度优先、Dijkstra算法)和启发式搜索算法(贪婪最佳优先、A*算法)。阐述各算法原理、特点及适用场景,还介绍了A*算法的启发函数,可调节算法速度和精确度,最后总结不同算法在有权图和无权图上的特点。

搜索算法

本文主要以一些概念对较为常见的搜索作简单介绍:

一、盲目搜索

对一个图进行搜索意味着按照某种特定的顺序依次访问其顶点。在所有搜索方式中,广度优先算法和深度优先搜索算法都十分重要,因为它们提供了一套系统地访问图数据结构的方法。我们着重讲解广度优先搜索算法。

1.深度优先搜索
深度优先搜索算法(简称DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点的所在边都己被探寻过,搜索将回溯到发现节点的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。由于深度优先搜索不是接下来最短路径算法的基础,因此这里不做拓展。
2.广度优先搜索
广度优先搜索算法(简称BFS)又称为宽度优先搜索从起点开始,首先遍历起点周围邻近的点,然后再遍历已经遍历过的点邻近的点,逐步的向外扩散,直到找到终点。
在执行算法的过程中,每个点需要记录达到该点的前一个点的位置 —父节点。这样做之后,一旦到达终点,便可以从终点开始,反过来顺着父节点的顺序找到起点,由此就构成了一条路径。
以上两种算法的不同搜索策略可以通过下面网页查看动图,这是两种相邻节点之间的移动代价相等时用到的算法,图中的边不设权值。
https://cs.stanford.edu/people/abisee/tutorial/bfsdfs.html
3.Dijkstra算法
Dijkstra算法是由计算机科学家Edsger W.Dijkstra在1956年提出的。
考虑这样一种场景,在一些情况下,图形中相邻节点之间的移动代价并不相等。例如,游戏中的一幅图,既有平地也有山脉,那么游戏中的角色在平地和山脉中移动的速度通常是不相等的。在Dijkstra算法中,需要计算每一个节点距离起点的总移动代价。同时,还需要一个优先队列结构。对于所有待遍历的节点,放入优先队列中会按照代价进行排序。在算法运行的过程中,每次都从优先队列中选出代价最小的作为下一个遍历的节点。直到到达终点为止。
对比了不考虑节点移动代价差异的广度优先搜索与考虑移动代价的Dijkstra算法,又如下动图所示:
在这里的无法插入图片描述
可以看出当图形为网格图,并且每个节点之间的移动代价是相等的,那么Dijkstra算法将和广度优先算法变得一样。以下网址链接可以自行设置绿色网格的位置。

Dijkstra算法(可自行设置障碍物)

二、启发式搜索算法

1.贪婪最佳优先
在Dijkstra算法中,我已经发现了其最终要的缺陷,搜索存在盲目性。在这里,我们只针对这个痛点,采用贪婪最佳优先搜索来解决。如何解决?我们只需稍微改变下观念即可,在Dijkstra算法中,优先队列采用的是,每个顶点到起始顶点的预估值来进行排序。在贪婪最佳优先搜索采用的是,每个顶点到目标顶点的预估值来进行排序。
两者的搜索过程对比如下动图所示:
在这里插入图片描述
明显看到右边的算法(贪婪最佳优先搜索 )寻找速度要快于左侧,虽然它的路径不是最优和最短的,但障碍物最少的时候,他的速度却足够的快。这就是贪心算法的优势,基于目标去搜索,而不是完全搜索。
贪婪最佳优先搜索动态图(可自行设置障碍物)

2.A star算法
我们找到了最短路径和搜索顶点最少数量的两种方案,Dijkstra 算法和贪婪最佳优先搜索。接下来能否汲取两者的有点选择既速度快又能得到最优解的算法?.
A star算法正是这么做了,它吸取了Dijkstra 算法中的当前代价,为每个边长设置权值,不停的计算每个顶点到起始顶点的距离,以获得最短路线,同时也汲取贪婪最佳优先搜索算法中不断向目标前进优势,并持续计算每个顶点到目标顶点的距离,以引导搜索队列不断想目标逼近,从而搜索更少的顶点,保持寻路的最优解。A star算法在运算过程中,每次从优先队列中选取f(n)值最小(优先级最高)的节点作为下一个待遍历的节点。A star算法使用两个集合来表示待遍历的节点,与已经遍历过的节点,这通常称之为open_set和close_set。
A star算法优先队列排序方式基于估价值,估价值由顶点到起始顶点的距离(代价)加上顶点到目标顶点的距离(启发函数)之和构成。
A star算法、贪婪最佳优先、Dijkstra算法三者的静态效果图如下:
在这里插入图片描述
三者动态效果图对比(可自行设置障碍物)

三、启发函数

f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n)
f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。g(n) 是节点n距离起点的代价。h(n)是节点n距离终点的预计代价,这也就是A star算法的启发函数。
上面已经提到,启发函数会影响A star算法的行为。
在极端情况下,当启发函数h(n)始终为0,则将由g(n)决定节点的优先级,此时算法就退化成了Dijkstra算法。
如果h(n)始终小于等于节点n到终点的代价,则A star算法保证一定能够找到最短路径。但是当h(n)的值越小,算法将遍历越多的节点,也就导致算法越慢。
如果h(n)完全等于节点n到终点的代价,则A star算法将找到最佳路径,并且速度很快。可惜的是,并非所有场景下都能做到这一点。因为在没有达到终点之前,我们很难确切算出距离终点还有多远。
如果h(n)的值比节点n到终点的代价要大,则A star算法不能保证找到最短路径,不过此时会很快。在另外一个极端情况下,如果h(n)相较于g(n)大很多,则此时只有h(n)产生效果,这也就变成了贪婪最佳优先搜索。
由上面这些信息我们可以知道,通过调节启发函数我们可以控制算法的速度和精确度。因为在一些情况,我们可能未必需要最短路径,而是希望能够尽快找到一个路径即可。这也是A star算法比较灵活的地方。对于网格形式的图,有以下这些启发函数可以使用:
如果图形中只允许朝上下左右四个方向移动,则可以使用曼哈顿距离。
如果图形中允许朝八个方向移动,则可以使用对角距离。
如果图形中允许朝任何方向移动,则可以使用欧几里得距离。

总结

以下网页是五种不同搜索算法的搜索过程对比:

五种搜索算法(可进行添加多种障碍物)

下面对在有权图(紫)和无权图(黄)上利用搜索算法的特点做一个总结:

本文相关PDF文件:
Graph Search Algorithms

本文参考文章链接:

http://frankorz.com/2017/12/16/greedy-best-find-search/
https://cs.stanford.edu/people/abisee/tutorial/customize.html
https://zhuanlan.zhihu.com/p/54510444?utm_source=com.tencent.tim&utm_medium=social&utm_oi=774664375033163776
https://www.gameres.com/777251.html

启发式算法原理介绍 A搜索算法是由著名的人工智能学者Nilsson提出的,它是目前最有影响的启发式搜索算法,也称为最佳图搜索算法。主要用于在图或网格中找到从起点到终点的最短路径。它结合了最佳优先搜索和Dijkstra算法的优点,通过评价函数fngnhnfngnhn来选择路径。显然:(1)如果只有gngn起作用,则 A搜索算法退化为Dijkstra 算法;(2)如果hnhn远大于gngn,则只有hnhn。 阅读详情

相关推荐

人工智能笔记之搜索算法(盲目搜索、启发式搜索)

1.搜索算法是很多优化和规划问题问题的基础,很多问题的解决都依赖于搜索策略。 2.把一个问题转化为搜索问题(即问题的形式化)需要: 将问题表示为状态(STATES)和操作算子(OPERATORS)的集合,操作算子可以将问题由一个状态转化为另一种状态。利用不同的操作算子将问题从初始状态转化到目标状态,所有这些操作算子的序列即为问题的一个解。因此,我们要想找到一个问题的解就是在状态空间中找到连接初始状态和目标状态操作算子序列。 盲目搜索(Uninformed Search、Blind Search) 深度优先

qq_42197887的博客 1万+

启发式搜索 (Heuristically Search)-【贪婪最佳优先搜索】和【A*搜索】

  搜索是人工智能里面研究的一个核心问题,像强化学习其本质我也是理解为一种搜索算法,不过其用了一些值函数近似的方法,并做了进一步改良,使其功能更加强大。近些年来也有非常多学术研究者慢慢开始将两者融汇贯通发顶会了。比如像Goog的planet,Muzero以及将熵用于蒙特卡洛树搜索中平衡探索和利用的关系等等。 启发式搜索   启发式搜索(Heuristically Search)又称为有信息搜索(I...

小小何先生的学习之旅 2万+

知识点二十五:启发式搜索算法——A*算法

前言 魔兽世界、仙剑奇侠传这类 MMRPG(Multiplayer Online Role-PlayingGame) 游戏中,有一个非常重要的功能,那就是人物角色的自动寻路。当人物处于游戏地图中的某个位置的时候,我们用鼠标点击另外一个相对较远的位置,人物就会自动地绕过障碍物走过去。这个功能是怎么实现的呢? 路径搜索问题 实际上,这是一个非常典型的路径搜索问题。人物的起点就是他当下所在的位置,终点就...

Mr_SCX的博客 2万+

算法之五大查找算法

五大经典查找算法 顺序查找 折半查找 哈希查找 索引查找 二叉树树查找 线性查找,通过代码遍历,一个一个比较 核心算法 //顺序查找 public static int orderLookup(int[] list, int key) { for (int i = 0; i < list.length; i++) { if (list[i]...

ba_pi的博客 1224

人工智能之启发式搜索

本博客记录本科人工智能学习过程,这篇博客主要讲AI中搜索的基本问题,从传统的盲目搜索过渡到要学习的启发式搜索。根据问题的实际情况不断寻找可利用的知识,构造出 一条代价较少的推理路线,使问题得到圆满解决的过程称为搜索本博客从盲目搜索到回溯法引入,最后正文启发式搜索。

qq_33774478的博客 1928

搜索算法(Search)

1. 概述: 搜索算法是利用计算机的性能优势来有目的的枚举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在问题求解过程中,人们所面临的大多数现实问题往往没有确定性的算法,需要通过搜索算法来解决。 搜索问题一般只需要考虑两个基本问题: 1、使用合适的状态空间来表示问题。 2、测试该状态空间中目标状态是否会出现一个问题的基本信息由4部分组成 1、初始状态集合—–>定义了问题

hacker00011000的专栏 3192

五、搜索求解策略

5、搜索求解策略

weixin_73557167的博客 740

Emotion-LLaMA实战指南:从零构建多模态情感识别系统(附Python代码)

本文提供了Emotion-LLaMA多模态情感识别系统的实战指南。通过详细的步骤,指导读者从零搭建开发环境、运行本地Demo、理解模型架构,并完成数据处理与模型训练。该创新模型融合视觉、听觉与文本信息,实现更精准、接近人类理解的情感分析与推理,并附有完整的Python代码实现。

weixin_29094775的博客 418

A*算法

A*算法 1.启发式搜索 广度优先搜索和双向广度优先搜索都属于盲目搜索,这在状态空间不大的情况下是很合适的算法,可是当状态空间十分庞大时,它们的效率实在太低,往往都是在搜索了大量无关的状态结点后才碰到解答,甚至更本不能碰到解答。 搜索是一种试探性的查寻过程,为了减少搜索的盲目性引,增加试探的准确性,就要采用启发式搜索了。所谓启发式搜索就是在搜索中要对每一个搜索的位置进行评估,从中选择最好、可

MLer 1321

FIFO的工作原理及其设计

FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个口是存储器的输入口,另一个口是存储器的输出口。对于单片FIFO来说,主要有两种结构:触发导向结构和零导向传输结构。触发导向传输结构的FIFO是由寄存器阵列构成的,零导向传输结构的FIFO是由具有读和写地址指针的双口RAM构成。FIFO与普通RAM存储器的是没有外部读写地址线(指针),使用方便,但。

Jackiezhang1993的博客 2万+

国密SKF库数字签名全解析:SM2签名与验证的详细实现

本文详细解析了基于国密SKF库实现SM2数字签名与验证的全过程。内容涵盖SKF库环境搭建、设备初始化、PIN码验证、SM2签名生成以及纯软件与SKF库两种验证方式的详细实现,为开发者提供了一份实用的国密算法开发指南。

weixin_29303701的博客 323

【算法】搜索算法—盲目搜索和启发式搜索

搜索算法 本文主要以一些概念对较为常见的搜索作简单介绍: 一、盲目搜索 对一个图进行搜索意味着按照某种特定的顺序依次访问其顶点。在所有搜索方式中,广度优先算法和深度优先搜索算法都十分重要,因为它们提供了一套系统地访问图数据结构的方法。我们着重讲解广度优先搜索算法。 具体例子可看以下文章: 广度和深度解析 1.深度优先搜索 深度优先搜索算法(简称DFS)是一种用于遍历或搜索树...

从底层爬 8735

FMCW雷达基本原理(通俗易懂)篇2

FMCW雷达(Frequency Modulated Continuous Wave Radar)是一种使用频率调制连续波的雷达系统。它使用一个发射器发射一个连续波,但是这个连续波的频率会在一定的范围内不断变化。当这个连续波遇到一个目标物体并被反射回来时,接收器会检测到这个反射波的频率变化,并计算出目标物体的距离和速度等信息。FMCW雷达的原理可以理解为:1.发射器发射一个连续波,这个波的频率会从一个固定的起始频率开始,逐渐变化至一个固定的终止频率。

研二小学鸡的博客 7692

C++启发式搜索算法(A*),给你一点阳光,你一定要灿烂哟!

给小孩子出一道数学题,在他不知所措,没有头绪时,你给他点提示。也许这点提示可以让他灵光一现,找到一点光亮,少一些脑回路,快速找到答案。这便是启发的作用。启发式搜索又称为有信息搜索,是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。启发式搜索的目的是减少搜索的不必要性,搜索的本质是无目地性的。对于原始搜索算法,搜索之初,并不知道搜索的目标具体在何方,所以,需要朝所有方向搜索,一旦找到便结束搜索。显然,必然会有些搜索是吃亏不讨好的。

y6123236的专栏 3020

ArcGIS拓扑检查实战:5分钟搞定面重叠与缝隙问题(附详细截图)

本文详细介绍了如何使用ArcGIS进行拓扑检查,快速解决面重叠与缝隙问题。通过搭建拓扑检查环境、配置拓扑规则、五步闪电修复法及批量处理技巧,帮助用户高效完成数据修正,提升GIS数据质量。特别适合地籍管理、规划红线等场景应用。

z4a5b6的博客 744

自托管AI邮件助手imap-mcp:安全连接Claude与个人邮箱的完整指南

在AI助手日益普及的今天,如何安全地让AI访问个人邮箱数据成为关键挑战。传统方法如直接暴露IMAP/SMTP凭证存在严重安全隐患,而第三方SaaS服务则涉及隐私泄露风险。Model Context Protocol (MCP) 作为一种新兴的标准化协议,为AI工具安全接入提供了解决方案。其核心价值在于实现数据源与AI助手间的安全、标准化交互,特别适用于处理敏感信息的场景。imap-mcp正是基于MCP协议构建的自托管邮件网关,它通过多层安全机制(包括主密钥加密和OAuth令牌哈希化)保护用户凭证,让用户能在

weixin_28295799的博客 655

与或树的盲目搜索和启发式搜索

与或树的盲目搜索 与或树的一般搜索过程如下 (1)把原始问题作为初始节点S0,并把它作为当前节点 (2)应用分解或等价变换操作对当前节点进行扩展 (3)为每个子节点设置指向父节点的指针 (4)选择合适的子节点作为当前节点,反复执行第(2)步和第(3)步,在此期间需要多次调用可解标记过程或不可解标记过程,直到初始节点被标记为可解节点或不可解节点为止 上述搜索过程将形成

dala_da的博客 1万+

详细解释xilinx源语的使用:IDELAYE2和IDELAYE3

/ 完整的数据位对齐模块input wire dqs, // 数据选通input wire [7:0] dq_in, // 8位数据输入output wire [63:0] data_out // 并行数据输出// 延迟控制信号// 每个数据位都需要独立的IDELAYgenvar i;i < 8;// IDELAYE2实例.IDELAY_VALUE (10), // 初始值。

baidu_34971492的博客 436

7.搜索求解策略: 搜索的概念, 状态空间搜索, 盲目/启发式图搜索策略, 启发信息和估价函数, A搜索算法, A*搜索算法及特性分析

本文内容为浙江工业大学王万良慕课课程的课程讲义,将其整理为OneNote笔记同时添加了本人上课时的课堂笔记,且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到优快云博文中, 源文件已经上传到我的资源中,有需要的可以去看看, 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 我的主页了解更多计算机学科的精品思维导图整理 本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦! 博客中思维导图的高清P...

孤柒的博客 2239

Weibull Distribution韦布尔分布的深入详述(1)原理和公式

本章介绍韦布尔分布(weibull distribution)和实践之基本公式和推导。 韦伯分布被经常用来对失效性(Failure)或者,反而言之为,可靠性,进行衡量的工具。他的目标就是构建一个失效性分析的模型,或者说构建一个失效性分析的Pattern.【Franklin案,在展示CDF公式的之前,不得不提我们的国内的某些度知识里面的公式,采用的希腊字母完全和国外的不同,然而,很多希腊字母在使用中有特定的意义,本文采用的是通用的表达公式】 F(x)={1−e−(xλ)kx≥00x..............

山云的专栏 8万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

启发式搜索算法1 - 最佳优先搜索算法

对于复杂问题的盲目搜索,常用广度优先搜索和深度优先搜索这两种盲目搜索算法,极大极小值和Alpha-beta剪枝算法是在盲目搜索过程中,通过剪枝避开一些不可能的结果,从而提高效率。如果搜索能够智能化一点,通过一些特殊的信息能够避免机械式盲目搜索,就可以提高搜索算法的效率,这就是启发式搜索。

linkedin_21843693的博客 1551

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

搜索算法 盲目

深度优先和广度优先

jojojojoi的博客 1180

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【人工智能】1.问题求解:启发式搜索算法

A* 算法是启发式搜索算法中的经典,经常应用于路径搜索和规划中。这里以八数码问题状态空间图的搜索为例,初步介绍以A*算法为代表的启发式搜索。 # 一、启发性信息和估价函数 ## 1.启发性信息: 启发式搜索是利用知识来引导搜索过程的,达到减少搜索范围的目标,使得尽量先走“最有希望的方向”,从而降低问题复杂度。**这里就是要根据知识,设计启发性信息(启发函数)**,启发性信息可以: 1)帮助确定扩展节点的信息 2)有效地帮助决定哪些后继节点应被生成 3)能决定在扩展一个节点时哪些节点应从搜索树上被删除 启发性

深思深练 厚积薄发 7611

搜索算法入门(1)--适合初学者的搜索算法介绍

搜索算法入门(1)--适合初学者的搜索算法介绍

2402_84226753的博客 931

智能寻路术:揭秘启发式搜索算法

启发式搜索算法是一种智能寻路技术,通过启发式函数估算目标距离,优先探索最有希望的路径,从而大幅提升搜索效率。经典算法如A结合实际成本与启发估算,广泛用于导航、游戏AI和机器人路径规划。其核心在于设计合理的启发式函数,需满足可计算性、合理性和可裁剪性。尽管面临状态爆炸和函数设计等挑战,启发式搜索仍是AI决策的关键工具,未来将与机器学习结合实现自适应优化。学习路径建议从基础A实现开始,逐步深入工程优化与领域应用。该技术让机器像侦探一样高效推理,成为智能系统的核心驱动力。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1489
上一篇: 那些年我们用过的显示器接口
下一篇: 模型参数与模型超参数
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值