人工智能第三章(2)——有信息搜索(启发式搜索)

版权声明:如需转载或引用,请注明出处。 https://blog.csdn.net/weixin_39278265/article/details/80923249

摘要

本文会讲清楚:

  • 1)启发式函数是什么?启发式搜索又是什么?
  • 2)介绍贪婪最佳优先搜索和A*搜索
  • 3)可采纳性,一致性,准确性,松弛问题。以及如何设计可采纳的启发函数。

前言

我认为自己不能再简单的罗列一些知识点,虽然有用,但是不好理解,而且对我来说还能做得更好,所以,我得变成“面向问题的博客写手(Problem-oriented blog writer)”~~

一、启发式搜索和启发式函数

有信息搜索(informed search)=启发式搜索。启发式搜索比无信息搜索更加有效,因为前者使用了除问题本身定义之外的特定知识。

启发式搜索的一般算法是最佳优先搜索(best-first search),此为树搜索和图搜索算法的一个实例,节点是基于评估函数f(n)被选择扩展的。可以注意到盲目搜索中有个一致代价搜索,也用了一个函数叫做g(n),二者的区别在哪?

  • 1)启发式搜索通过f(n)对优先级队列排队,一致代价搜索通过g(n)对优先级队列排队;
  • 2)启发式搜索的f(n)定义比g(n)要更加内涵丰富些,g(n)仅仅是代表从初始状态到当前状态的开销,但是f(n)可以是从当前状态到目标状态的估计~~等等。后面会仔细讨论f(n)。

启发式函数(对于大多数最佳优先搜索):h(n)=节点n到目标节点的最小代价路径的代价估计值
启发式搜索:采用了f(n)(即启发式函数)的搜索策略。

二、贪婪最佳优先搜索 greedy best-first search (GBS)

GBS试图扩展离目标最近的节点。所以只用启发式信息,f(n)=h(n)。

在罗马尼亚问题中,使用的是当前地点到目的地的直线距离(这个信息不能由问题本身的描述计算得到,而且这个信息是有用的——因为和实际路程相关,所以是一个有用的启发式
),在此问题中,GBS搜索代价最小,但是不是最优。

GBS可能陷入死循环,但是它在有限状态空间的图搜索下是完备的,其他情况则不是。其时间和空间复杂度都是O(bm),其中m是搜索空间的最大深度。

三、A*搜索:搜小总评估代价

不同于GBS,A*搜索对节点的评估结合了g(n),即到达此节点已经花费的代价,和h(n)。故f(n)=g(n)+h(n),即经过节点n的最小代价。

A*搜索与一致代价搜索类似,除了A*使用g+h而不是g。
A*搜索既是完备的也是最优的。

可采纳性,一致性,准确性,松弛问题

可采纳启发式:是指启发式函数从不会过高估计到达目标的代价。所以:f(n)=g(n)+h(n)永远不会超过经过节点n的解的实际代价。
(罗马尼亚问题就是一个例子,因为直线距离最短)

一致性(也叫单调性),只作用在图搜索中使用A*算法:如果对每个节点n和通过任一行动a生成的n的每个后继节点n’,从节点n到达目标的估计代价不大于从n到n’的单步代价与从n’到达目标的估计代价之和。(这是一个三角不等式,罗马尼亚问题是一个例子)

很容易证明(在课本习题3.29):一致的启发式都是可采纳的。

最优性:如果A*是可采纳的,那么A*的树搜索版本是最优的,如果h(n)是一致的,那么图搜索的A*算法是最优的。

缺点:A*的时间复杂度比较高,严重依赖于对状态空间所做的假设。而且内存保留了所有已生成的节点,使得A*算法常常在计算完之前就耗尽了自己的内存。

四、比较两个启发式函数

4.1 比较两个启发式函数

对于两个启发式函数h1,h2,如果对于任何节点n,h2(n)>h1(n),那么就说h2比h1占优势。优势可以直接转化为效率。

这里写图片描述
证明过程

4.2 从松弛问题设计可采纳的启发式

减少了行动限制的问题称为松弛问题。

这里写图片描述
松弛问题的例子

松弛问题增加了状态空间的边。所以,一个松弛问题的最优解代价是原问题的可采纳的启发式。

松弛问题本质上要能够不用搜索就可以求解

更进一步,由于得出的启发式是松弛问题的确切代价,那么它一定遵守三角不等式,因而是一致的

最后的最后:每文一句

老规矩,一句诗词分享给大家:

想芦叶滩头,蓼花汀畔, 皓月空凝碧。六六雁行连八九,只待金鸡消息。 义胆包天,忠肝盖地,四海无人识。 离愁万种,醉乡一夜头白。
——施耐庵《念奴娇·天南地北》

展开阅读全文

没有更多推荐了,返回首页