启发式搜索机器之心

启发式搜索是人工智能一种搜索技术。启发式是一个经验法则,它可能导致一个解决方案。启发式在搜索策略中起着重要的作用,因为大多数问题都具有指数增长得性质。启发式有助于减少从指数数到多项式数的备选方案的数量。在人工智能中,启发式搜索具有普适化得意义,具有更具体的技术含义。在普适化意义上,术语“启发式”用于任何通常有效的建议,但不能保证在任何情况下都有效。然而,在启发式搜索体系结构中,启发式这个术语通常是指一个启发式评价函数的特殊情况。

为了解决较大的问题,必须增加特定领域的知识以提高搜索效率。关于这个问题的信息包括原始状态、从一个状态转变到另一个状态的成本以及目标节点。这些信息通常用启发式评价函数的形式表示,如f(n,G),节点n和/或目标g的函数。

下面是启发式算法例子.

所有的搜索方法在前面的部分是未知的,他们不知道目标是哪一个。他们不使用任何关于要去哪里得信息,除非他们碰巧偶然遇到一个目标。一种关于启发式信息的启发式函数h(n),它用来评价哪些节点最有希望的是一个我们要找的节点,这里n为节点,h(n)会返回一个非负实数,也可以认为是从节点n的目标节点路径的估计成本。如果h(n)是小于或等于实际成本最低成本路径节点n的目标,那么函数h(n)是低估了的,也是可用的(h函数一定要小于等于实际成本)。启发式函数是一种告知搜索方向的方法。它提供了一种明智的方法来猜测哪个邻居节点会导向一个目标。

启发式函数没有什么神奇之处。它必须只使用可以容易获得的关于节点的信息。通常情况下,为一个节点推导一个启发式值所需的工作量和一个节点的启发式值如何从节点到目标的实际路径开销是需要权衡的。推导启发式函数的一种标准方法是求解一个简单的问题,并将简化问题中的实际成本作为原问题的启发函数。

例题分析

对于图3.2,可以用节点与目标位置之间的直线距离作为启发函数。

下面的示例假定如上启发式函数:

这个h函数是低估的,因为h值小于或等于从节点到目标的最低成本路径的精确成本。节点O123确切的成本。节点b1非常低估,这似乎是接近,但只有一个漫长的路线的目标。这对c1很有误导性,它似乎也接近目标,但是从那个节点到目标并没有路径。

考虑示例3.2的运送机器人,其中状态空间包括要递送的包裹。假设成本函数是机器人传送所有包裹的总距离。一个可能的启发式函数是包裹从目的地到目的地的最大距离。如果机器人只能携带一个包裹,那么一个可能的启发函数是包裹必须携带时的距离之和。如果机器人能同时携带多个包裹,这可能就不是一个低估实际成本。

h函数可以扩展到适用于(非空)路径。路径的启发式值是路径末端的节点的启发式值。就是:

启发式函数的简单用法是,将排序的邻居节点依次添加到堆栈中,这表示深度优先搜索的边界。可以将邻居添加到边界,以便首先选择最佳邻居。这就是所谓的启发式深度优先搜索。此搜索选择局部最佳路径,但它在选择其他路径之前从所选路径中探索所有路径。

使用启发式函数的另一种方法是总是在具有最低启发式值的边界上选择一条路径。这叫做最佳优先搜索。它通常不太好;它可以遵循看似有希望的路径,因为它们接近目标,但路径的成本可能会不断增加。

示例如下:考虑图3.8所示的曲线,其中弧的成本是其长度。其目的是找到最短路径从S到G。假设欧氏距离目标G被用作启发函数。启发式深度优先搜索将选择s以下的节点,并且永远不会终止。类似地,因为s下面的所有节点看起来都很好(红色的节点),最好的第一个搜索将在它们之间循环,从不尝试从S的备用路径。而比较好的搜索方式是绿色的节点。

19世纪,法国数学家查尔斯·皮埃尔·特雷莫(CharlesPierreTremaux)对深度优先搜索Depth-firstsearch(DFS)的一个版本进行了研究,认为这是一种解决迷宫的策略。BFS(Breadth-firstsearch)和它在寻找图形的连接部分的应用是由MichaelBurke和KonradZuse在1945年发明的。EdsgerDijkstra在1959年在ARMAC计算机上写出了Dijkstra算法,它来搜索最短路径的算法,只使用f(p)=cost(p)。

在1968年,人工智能研究员尼尔斯·尼尔森(NilsNilsson)试图改进机器人Shakey所做的路径规划,这个机器人原型可以通过在一个包含障碍物的房间进行导航。这种寻路算法,Nilsson称之为A1,是当时最著名的HansBerliner于1979算法的更快版本,用于在图中找到最短路径。BertramRaphael建议对这个算法进行一些重要的改进,并调用了修改后的A2。然后PeterE.Hart引入了一个论证,建立了A2,只有微小的变化,才能成为寻找最短路径的最佳算法。此时A星算法使用的评价函数是f(p)=cost(p)+h(p).

B*(发音为“B星”)是一种最佳的图形搜索算法,它从给定的初始节点到任何目标节点(在一个或多个可能的目标中)找到最小成本路径。由HansBerliner于1979年首次出版。

1985RichardKorfIterativedeepeningA*(IDA*)是一种图遍历和路径搜索算法,它可以在一个加权图中找到指定的起始节点和一组目标节点的任何成员之间的最短路径。它是迭代深化深度优先搜索的一个变体,它借用了一个启发函数来评估剩余的成本,以从a*搜索算法获得目标。由于它是深度优先的搜索算法,它的内存使用率低于A*,但与普通的迭代深化搜索不同,它专注于探索最有希望的节点,因此不会访问。与A*不同,IDA*不使用动态编程,因此经常会多次访问相同的节点。

Russell,S.(1992)SMA*SimplifiedMemoryBoundedA*或简化内存有界A*是基于A*算法的最短路径算法。SMA的主要优点是它使用有界内存,而a*算法可能需要指数内存。SMA的所有其他特征都是从一个A*继承的。

下图是对经典的搜索算法进行总结:

Lowest-cost-first和A*搜索保证找到第一个解决方案的最低成本解决方案。

A

B

C

1

年份

事件

2

1958

Hart,P.E.,Nilsson,N.J.,&Raphael,B.提出A星算法使用两个代价函数作为目标函数

Hart,P.E.,Nilsson,N.J.,&Raphael,B.(1968).Aformalbasisfortheheuristicdeterminationofminimumcostpaths.IEEEtransactionsonSystemsScienceandCybernetics,4(2),100-107.

3

1959

Dijkstra,E.W.提出Dijkstra算法搜索最短路径

Dijkstra,E.W.(1959).Anoteontwoproblemsinconnexionwithgraphs.Numerischemathematik,1(1),269-271.

4

5

1985

Korf,R.E.对A星算法进行了优化减小了A星算法的消耗

Korf,R.E.(1985).Depth-firstiterative-deepening:Anoptimaladmissibletreesearch.Artificialintelligence,27(1),97-109.

一个正确的贪心算法拥有很多优点,比如思维复杂度低、代码量小、运行效率高、空间复杂度低等,是信息学竞赛中的一个有力武器。缺点:贪心法的缺点集中表现在他的“非完美性”。通常我们很难找到一个简单可行并且保证正确的贪心思路,即使我们找到一个看上去很正确的贪心思路,也需要严格的正确性证明。这往往给我们直接使用贪心算法带来了巨大的困难。

其实搜索算法一直是最优值和复杂度之间的权衡,也是大家一直研究的问题。目前也已经有很多成熟的搜索算法可以直接运用。搜索算法可以分为四类,大家可以根据不同的类型对它们进行研究:1.为了虚拟搜索空间的算法,比如minimaxalgorithm,alpha–betapruning;2.对于给定结构的子结构,如Dijkstra'salgorithm,Kruskal'salgorithm,thenearestneighbouralgorithm,andPrim'salgorithm;3.搜索功能的最大值;4.量子计算机,比如Grover'salgorithm。

THE END
1.启发式算法课程设计理念.docx启发式算法课程设计理念一、教学目标本课程旨在通过启发式算法的学习,让学生掌握基本的算法思想和方法,培养学生的问题解决能力和创新思维能力。具体的教学目标如下:知识目标:使学生了解并理解启发式算法的基本概念、原理和常用算法。技能目标:培养学生能够运用启发式算法解决实际问题,提高学生的编程能力和算法设计能力。情感https://www.renrendoc.com/paper/370548727.html
2.人工智能算法背后的故事:从启发到创新展开 人工智能背后的那些看似神秘的算法,竟然是从大自然的奥秘、科学的启发和人类智慧的碰撞中诞生的?这些算法不仅改变了我们工作的方式,还在悄悄地塑造未来的世界。今天,就让我们一起揭秘,人工智能算法背后的故事,从最初的灵感闪现,到它如何演变成引领创新的核心力量!人工智能算法的灵感常常来自我们日常生活中的平凡https://www.sohu.com/a/839485940_121188207
3.数学建模——启发式算法(模拟退火遗传算法)启发式算法是基于直观或经验构造的算法,在可接受的计算时间和空间条件下,给出待解决优化问题的一个可行https://kaiwu.qboson.com/forum.php?mod=viewthread&tid=431&extra=page%3D1
4.有啥问啥什么是启发式算法(HeuristicAlgorithm)?什么是启发式算法(HeuristicAlgorithm)? 启发式算法是一类在解决复杂问题时利用经验规则和启发式信息进行搜索的算法。这些算法并不保证找到最优解,但在很多情况下能找到一个较好的解,且计算效率较高。启发式算法广泛应用于组合优化、人工智能、搜索问题等领域。 https://blog.csdn.net/mieshizhishou/article/details/140996716
5.经典算法研究系列:八再谈启发式搜索算法编程开发资料库A*搜索算法,作为经典算法研究系列的开篇文章,之前已在本BLOG内有所阐述。 但要真正理解A*搜索算法,还是得先从启发式搜索算法谈起。 毕竟,A*搜索算法也是启发式算法中的一种。ok,切入正题。 一、何谓启发式搜索 启发式搜索算法有点像广度优先搜索,不同的是,它会优先顺着有启发性和具有特定信息的节点搜索下去 https://soft-app.iteye.com/blog/922327
6.什么是启发式搜索?详述启发式搜索的原理?用C语言实现启发式搜索用C语言实现启发式搜索算法。内附代码。 大家好,我是贤弟! 一、什么是启发式搜索? 启发式搜索算法是一种基于经验和启发性信息的搜索算法,它通过评估每个搜索节点的启发性价值来指导搜索方向,从而在搜索空间中找到最优解。 启发式搜索算法可以应用于各种领域,如人工智能、运筹学、计算机视觉等。https://cloud.tencent.com/developer/news/1261429
7.遗传算法原理及其应用.pdf该法效率较低。 用心打造免费、绿色、专业、海量的教育文库网站 本文档来源于第一文库网:/view/9713DE425B686CA 3.html 启发式算法:寻求一种能产生可行解的启发式规则,以找到一个最优解或近似最优 解。此法对每个问题都必须找出其特有的启发式规则,不具有通用性。 https://max.book118.com/html/2021/0226/7161120004003061.shtm
8.基于启发式策略的最短路径算法【摘要】:在讨论经典Dijkstra算法和启发式策略算法(A*,矩形算法等)的基础上,提出一种基于Dijkstra算法的动态方向限制搜索算法用于求解道路网络中两节点之间最短路径.该算法结合人类的搜索思路和动态灵活的处理方式,对最短路径算法的搜索策略进行改进,动态改变搜索限制区域,减少计算时间.该算法不仅可以单独提高计算最短路径https://www.cnki.com.cn/Article/CJFDTotal-HZLG200612001.htm
9.7启发式求解器的软件结构和优化算法到目前为止,我们已经完成了数据模型的建立和处理,以及用算法构建(Konstruktiv)和评估(Evaluation)。前面的章节也提到过,启发式算法构建的解决方案未必是最优解,因此本章我们来讲解如何逐步优化启发式算法提供的解决方案,并把到目前为止已经涉及到的算法和结构体系化。 https://www.jianshu.com/p/d8d5d78b9c8c