《人工智能:一种现代的方法》笔记(二)——问题求解(2)

文章目录

  • 前言
  • 2 问题的解
    • 2.1 通过搜索求解
    • 2.2 问题求解算法的性能
  • 3 搜索策略
    • 3.1 无信息搜索策略
    • 3.2 有信息的搜索策略
  • 4 启发式函数 h(n)


前言

这是本书的第三章内容,本章主要目的是理解问题的求解过程和步骤,重点是掌握如何对某个问题进行形式化以及对问题的解的搜索方法。(这是问题求解的第二部分)

2 问题的解

2.1 通过搜索求解

“一切问题皆搜索。”这是上这门课时,老师给我们强调过很多遍的话。既然在第一部分对问题进行了形式化,那么接下来便是对问题进行求解。
所谓求解,那就是找出一条从初始状态到目标状态的行动序列,这就是搜索过程。
教材中的搜索过程主要有两种:树搜索和图搜索
树和图两种数据结构本身就有不少相似之处,所以在搜索过程中并无太大差别。
但对于一些图搜索网络,图会存在有环的路径(可以想象罗马尼亚问题),所以搜索时应注意冗余状态,具体实现应该将探索过的状态放入close表中,避免重复探索,造成死循环。

“遗忘历史的算法将会不幸的重复历史”

2.2 问题求解算法的性能

在介绍一些搜索算法之前,需要知道如何评判一个搜索算法性能的好坏,分以下四点:
完备性:当问题有解时,这个算法是否能保证找到解?
最优性:搜索策略是否能找到最优解?
时间复杂度:找到解需要花费多长时间?
空间复杂度:在执行搜索的过程中需要多少内存?

3 搜索策略

3.1 无信息搜索策略

无信息搜索也称为盲目搜索策略。无信息搜索指的是除了问题定义中提供的状态信息外没有任何附加信息。
搜索算法要做的是生成后继并区分目标状态与非目标状态。以下搜索策略是以结点扩展的次序来分类的:

  1. 广度优先搜索(BFS)《人工智能:一种现代的方法》笔记(二)——问题求解(2)_第1张图片

  2. 深度优先搜索(DFS)
    《人工智能:一种现代的方法》笔记(二)——问题求解(2)_第2张图片

  3. 一致代价搜索:扩展的是路径消耗g(n)最小的结点n。这可以通过将边缘结点集组织成按g值排序的队列来实现,每走一步,都需比较每一个接下来待扩展的结点的g(n),找到最小的进行扩展。

  4. 深度有限搜索:在DFS基础上,为避免出现无限地向下探索,对搜索深度进行设限。

  5. 迭代加深搜索:它经常和深度优先搜索结合使用来确定最好的深度界限。做法是不断地增大深度限制——首先为0,接着为1,然后为2,依此类推进行迭代——直到找到目标。《人工智能:一种现代的方法》笔记(二)——问题求解(2)_第3张图片

  6. 双向搜索
    教材中对上述策略的算法过程以及性能分析都有较为详细地描述和证明,这里就不详述。

3.2 有信息的搜索策略

启发式: 评价函数f(n)=启发函数h(n)+实际代价g(n)

  • 贪婪最佳优先搜索:g(n)=0,f(n)=h(n)只用启发式信息–每一步都试图找到离目标最近的结点,这种算法的突出特点就是它的解不一定是最优的,贪婪地搜索可能会错过刚开始代价高但后面代价小的行动序列。《人工智能:一种现代的方法》笔记(二)——问题求解(2)_第4张图片

  • 一致代价搜索(无信息):h(n)=0,f(n)=g(n)只利用实际代价。

  • A*搜索:f(n)=g(n)+h(n),具有最优性和完备性的特点
    《人工智能:一种现代的方法》笔记(二)——问题求解(2)_第5张图片

4 启发式函数 h(n)

启发式函数:h(n)=初始结点(初始状态)n到目标结点(目标状态)的最小代价的代价估计值。
设计启发式函数的方法:

  • 松弛问题:八数码问题中提到的两个启发式函数:h1(错位棋子)和 h2(曼哈顿距离)都是对实际问题的松弛,所以松弛即减少问题的限制,使得问题代价变得容易估计而不需要进行再次搜索。
    对原问题进行形式化然后再对问题的条件进行删减,可以以此来设计启发式函数。

例: 棋子可以从方格A移动到方格B,如果A与B水平或竖直相邻而且B是空的。 我们可以去掉其中一个或者两个条件,生成三个松弛问题:
(a)棋子可以从方格A移动到方格B,如果A和B相邻。
(b)棋子可以从方格A移动到方格B,如果B是空的。
(c)棋子可以从方格A移动到方格B。

  • 模式数据库:主要思想就是将问题分解成子问题,比如将八数码问题分解成1-3-5-7和2-4-6-8两个子问题分别算出启发式,然后进行汇总
  • 学习启发式:利用实际数据和经验,让机器自行归纳出启发式

你可能感兴趣的:(人工智能入门,人工智能)