学习日记-人工智能导论4-通过搜索进行问题求解1

目录

  • 3 通过搜索问题进行问题求解
    • 3.1 问题求解智能体
      • 3.1.1 搜索问题和解
      • 3.1.2 问题形式化
    • 3.2 问题示例
      • 3.2.1 标准化问题
      • 3.2.2 真实世界问题
    • 3.3 搜索算法
      • 3.3.1 最佳优先搜索
      • 3.3.2 搜索数据结构
      • 3.3.3 冗余路径
      • 3.3.4 问题求解性能评估

3 通过搜索问题进行问题求解

当要采取的正确动作不是很明显时,智能体可能需要提前规划:考虑一个形成通往目标状态路径的动作序列。
这样的智能体被称为问题求解智能体(problem-solving agent),它所进行的计算过程被称为搜索(search)。
问题求解智能体使用原子(atomic)表示。


使用状态的因子化(factored)表示或结构化(structured)表示的智能体称为规划智能体(planning agent)。


3.1 问题求解智能体

如果环境是未知的(unknown),那么智能体只能随机执行一个动作。

以下讨论中,我们假设智能体总是能够访问与世界相关的信息,则有了这些信息,智能体可以执行以下四个阶段的问题求解过程:
目标形式化(goal formulation):目标通过限制智能体的目的和需要考虑的动作来组织其行为。
问题形式化(problem formulation):智能体刻画实现目标所必需的状态和动作——进而得到这个世界中与实现目标相关的部分所构成的抽象模型。
搜索(search):找到一个能到达目标的动作序列,这样的序列被称为(solution)。
执行(execution):现在智能体可以执行解中的动作,一次执行一个动作。

一个重要的性质是,在一个完全可观测的,确定性的,已知的环境中,任何问题的解都是一个固定的动作序列。

3.1.1 搜索问题和解

搜索问题(problem)的形式化定义如下。

  • 可能的环境状态(state)的集合,我们称之为状态空间(state space)。
  • 智能体启动时的初始状态(initial state)。
  • 一个或多个目标状态(goal state)的集合。
  • 智能体可以采取的行动(action)。
  • 转移模型(transition model)用于描述每个动作所起到的作用。
  • 动作代价函数(action cost function),在编程中记作 A c t i o n − C o s t ( s , a , s ′ ) Action-Cost(s,a,s\prime) ActionCost(s,a,s),它给出了在状态 s s s中执行动作 a a a从而转移到状态 s ′ s\prime s的数值代价。

一个动作序列形成一条路径(path),而(solution)是一条从初始状态到某个目标状态的路径。
最优解(optimal solution)是所有解中路径代价最小的解。

状态空间可以用(graph)来表示。

3.1.2 问题形式化

从表示中剔除细节的过程称为抽象(abstraction)。
抽象层级(level of abstraction)

选择一个好的抽象需要删除尽可能多的细节,同时保留合理性,并确保抽象动作易于执行。

3.2 问题示例

标准化问题(standardized problem)常用于说明或训练各种问题求解方法。
真实世界问题(real-world problem),如机器人导航,意味着这一问题的解是人们实际使用的,且问题的形式化是独特的而非标准化的。

3.2.1 标准化问题

网格世界(grid world)问题是一个由正方形单元格组成的二维矩形阵列。

真空吸尘器世界(vacuum world)可以表示为一个网格世界问题。
另一个类型的网格世界是推箱子问题(sokoban puzzle)。
滑块问题(sliding-tile puzzle) - 8数码问题(8-puzzle)等。

3.2.2 真实世界问题

旅行问题(touring problem)描述的是一组必须访问的地点,而非单一目的地。旅行商问题(traveling salesperson problem, TSP),就是一个旅行问题,即地图上每个城市都必须被访问。
超大规模集成电路布图(VLSI layout)问题
机器人导航(robot navigation)是寻径问题的一个推广。

3.3 搜索算法

搜索算法(search algorithm)将搜索问题作为输入并返回问题的解或报告 f a i l u r e failure failure

搜索树(search tree)
搜索树中的每个节点(node)对应于状态空间中的一个状态,搜索树中的边对应于动作,树的根对应于问题的初始状态。
我们可以按如下方式扩展(expand)节点:考虑该状态的可用动作 A c t i o n Action Action,使用 R e s u l t Result Result函数查看这些动作指向何处,并为每个结果状态生成(generating)一个新节点,称为子节点(child node)或后继节点(successor)。未被扩展的节点称之为搜索树的边界(frontier),任何已经生成过节点的状态都被称为已达(reached)状态。注意,边界分离(seperate)了状态空间图的两个区域,即内部区域和外部区域。

3.3.1 最佳优先搜索

最佳优先搜索(best-first search)是一种非常通用的方法,我们选择使得某个评价函数(evaluation function) f ( n ) f(n) f(n)的值最小的节点 n n n

3.3.2 搜索数据结构

树中的节点(node)由一个包含4个组成部分的数据结构表示。

  • n o d e . S T A T E node.STATE node.STATE:节点状态
  • n o d e . P A R E N T node.PARENT node.PARENT:父节点
  • n o d e . A C T I O N node.ACTION node.ACTION:父节点生成该节点时采取的动作
  • n o d e . P A T H − C O S T node.PATH-COST node.PATHCOST:从初始状态到此节点的路径总代价

我们需要用队列(queue)来存储边界

  • I S − E M P T Y ( f r o n t i e r ) IS-EMPTY(frontier) ISEMPTY(frontier):返回true当且仅当边界中没有节点
  • P O P ( f r o n t i e r ) POP(frontier) POP(frontier):返回边界中的第一个节点并删除
  • T O P ( f r o n t i e r ) TOP(frontier) TOP(frontier):返回边界中的第一个节点(不删除)
  • A D D ( n o d e , f r o n t i e r ) ADD(node,frontier) ADD(node,frontier):将节点插入队列中的适当位置

搜索算法使用了3种不同类型的队列:

  • 优先队列(priority queue),被用于最佳优先搜索。
  • FIFO队列(FIFO queue),先进先出,被用于广度优先搜索。
  • LIFP(LIFO queue),后进先出,被用于深度优先搜索。

3.3.3 冗余路径

重复状态(repeated state)
循环(cycle)
循环是冗余路径(redundant path)的一种特殊情况。


俗话说,不记得历史的算法注定要重复历史


如果搜索算法会检查冗余路径,我们称之为图搜索(graph search);否则,称之为树状搜索(tree-like search)。

3.3.4 问题求解性能评估

我们可以从以下4个方面评价算法的性能。

  • 完备性(completeness)
  • 代价最优性(cost optimality)
  • 时间复杂度(time complexity)
  • 空间复杂度(space complexity)

完备的搜索算法探索无限状态空间的方式必须是系统的(systematic),以确保它最终能够到达与初始状态相关的任何状态。


(学习内容来源:《人工智能现代方法(第4版)》,Stuart Russell,Peter Norvig 著)

你可能感兴趣的:(学习日记-人工智能导论,学习,人工智能,算法)