人工智能03搜索法对问题求解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Example: 机器人组装
状态?:各关节角度的实数坐标,进行组装的部件 行动?:机器人关节的转动 目标测试?:完成装配 路径消耗?: 执行时间
本章大纲
• Problem-solving agents/问题求解智能体 Goal-based agents
• Problem formulation • Example problems • Basic search algorithms
无信息的搜索策略
无信息的搜索策略不使用问题定义之外的信 息 • Breadth-first search(广度优先搜索) • Uniform-cost search(代价一致搜索) • Depth-first search(深度优先搜索) • Depth-limited search • Iterative deepening search
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
代价一致搜索
• 扩展路径中消耗最低的节点 • 实现: fringe边缘 = queue ordered by path cost • 若单步耗散相同,等同于广度优先搜索 Complete? Yes, if step cost ≥ ε Time? # of nodes with g ≤ cost of optimal solution, O(bceiling(C*/ ε)) where C* is the cost of the optimal solution Space? # of nodes with g ≤ cost of optimal solution, O(bceiling(C*/ ε)) Optimal? Yes – nodes expanded in increasing order of g(n)
Example: 真空吸尘器世界状态空间
状态?:是否有灰尘和机器位置(忽略灰尘量) 行动?: Left , Right , Suck , NoOp 目标测试?:没有灰尘 路径消耗?
Example: 真空吸尘器世界状态空间
状态?:是否有灰尘和机器位置(忽略灰尘量) 行动?: Left , Right , Suck , NoOp 目标测试?:没有灰尘 路径消耗?: 1 per action (0 for NoOp)
问题形式化
• 一个问题被形式化定义为四个组成部分: 1.初始状态,例如“at Arad” 2.行动或后继函数 e.g., S(Arad) = {<Arad →Zerind, Zerind>, … } 3.目标测试 明确的,e.g., x = “at Bucharest” 隐含的,e.g., Checkmate(x) 4.路径损耗 例如路径总长度,总行动步数 c(x,a,y) 表示单步耗散, 且假设其≥ 0 • 问题的解就是将初始状态转化到目标状态的一系列行动
广度优先搜索
• 扩展最浅层的未展开节点
• 实现: 边缘是一个FIFO队列
广度优先搜索
• 扩展最浅层的未展开节点
• 实现: 边缘是一个FIFO队列
广度优先搜索
• 扩展最浅层的未展开节点
• 实现: 边缘是一个FIFO队列
广度优先搜索
• 扩展最浅层的未展开节点
• 实现: 边缘是一个FIFO队列
广度优先搜索的性能
选择一个状态空间
• 现实世界是极其复杂的 状态空间需被抽象化 • 抽象化的状态=一系列的真实状态 • 抽象化的行动=实际行动的复杂组合
e.g., “Arad →Zerind” 表示一系列可能的路线、拐弯、 休息站等
• 抽象化的解决方案=现实中一系列的路径 • 每一个抽象化的行动需比原始问题更容易被描 述
Example: 八数码游戏
状态? 行动? 目标测试? 路径消耗?
Example: 八数码游戏
状态?:每个整数及空格的分布 行动? 目标测试? 路径消耗?
Example: 八数码游戏
状态?:每个整数及空格的分布 行动?:将空格向left, right, up, down移动 目标测试? 路径消耗?
搜索树算法
• 基本思想:
通过对已探索状态生成后继来探索状态空间
Strategy employed determines the type of tree search performed 所使用的搜索策略决定了搜索树的表现
ห้องสมุดไป่ตู้索树举例
搜索树举例
搜索树举例
状态 vs. 节点
• 状态is a (representation of) a physical configuration • 节点是搜索树中的一种数据结构,包含state, parent node, action, path cost g(n), depth
Example: 真空吸尘器世界状态空间
状态? 行动? 目标测试? 路径消耗?
Example: 真空吸尘器世界状态空间
状态?:是否有灰尘和机器位置(忽略灰尘量) 行动? 目标测试? 路径消耗?
Example: 真空吸尘器世界状态空间
状态?:是否有灰尘和机器位置(忽略灰尘量) 行动?: Left , Right , Suck , NoOp 目标测试? 路径消耗?
无信息的搜索策略
无信息的搜索策略不使用问题定义之外的信 息 • Breadth-first search(广度优先搜索) • Uniform-cost search • Depth-first search • Depth-limited search • Iterative deepening search
初始状态和目标测试 • 问题的解就是将初始状态转化到目标状态的一 系列行动
搜索树
搜索树: • 这是一个 计划 和结果的“what if” tree • 初始状态是根节点 • 子节点对应着后继 • 对大多数问题来说,不能实际构建出整棵树 因此,必须找到只使用树中重要部分的方 法
状态空间图
• 对于一些大图 每一个状态是一个节点 每一个后继是一条弧 • 注意:对大多数问题, 无法实际构建整张图
无信息的搜索策略
无信息的搜索策略不使用问题定义之外的信 息 • Breadth-first search(广度优先搜索) • Uniform-cost search(代价一致搜索) • Depth-first search • Depth-limited search • Iterative deepening search
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
• Problem formulation • Example problems • Basic search algorithms
问题求解智能体
注意:这是一个离线的问题求解,一个闭着眼睛执行任务的智能体。 环境是静态的,可观察的,离散的,确定性的
搜索问题
• 一个搜索问题包含: 状态空间 后继函数
Example: 八数码游戏
状态?:每个整数及空格的分布 行动?:将空格向left, right, up, down移动 目标测试?:达到目标状态(给定) 路径消耗?
Example: 八数码游戏
状态?:每个整数及空格的分布 行动?:将空格向left, right, up, down移动 目标测试?:达到目标状态(给定) 路径消耗?: 1 per move 注意:搜索八数码游戏最优解的问题是NP-hard的
• 完备性?
广度优先搜索的性能
• 完备性?Yes(如果d是有限的) • 时间?
广度优先搜索的性能
• 完备性?Yes(如果d是有限的) • 时间?1 + b + b2 + b3 + …+ bd + b(bd -1) = O(bd+1 ), i.e., exp. in d • 空间?
广度优先搜索的性能
The Expand function creates new nodes, filling in the various fields and using the SuccessorFn of the problem to create the corresponding states.
一般的树搜索算法
第三章 用搜索法对问题求解
Many AI Tasks can be Formulated as Search Problems
• • • • • • 拼图 导航 分配 布局 调度 路由选择
案例:路径查找
案例:过河游戏
案例:拼图
案例:水壶问题
本章大纲
• Problem-solving agents/问题求解智能体 Goal-based agents
Example: 罗马尼亚问题
• • • • 在罗马尼亚度假,目前在Arad 航班是明天离开Bucharest 制定目标:达到Bucharest 问题形式化:
状态:各城市 行为:开车从一个城市到另一个
• 问题求解:
城市序列,例如,Arad, Sibiu, Fagaras, Bucharest
Example: 罗马尼亚问题
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
度量问题求解的性能
• 搜索策略是被选择节点展开的顺序所定义的 • 通过以下四种途径来评价算法的性能:
完备性:当问题有解时,是否能返回一个解 最优性:是否能找到最优解 时间复杂度:找到一个解所花时间 空间复杂度:搜索过程中所需内存
• 时间和空间复杂度由以下变量表示:
b: maximum branching factor of the search tree — 分支因子 d: depth of the least-cost solution — 最浅的目标节点的深度 m: maximum depth of the state space (may be ∞) — 最大深度
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
深度优先搜索
• 扩展最深的未展开节点 • 实现: fringe = LIFO(后进先出) queue, i.e., put successors at front
• 完备性?Yes(如果d是有限的) • 时间?1 + b + b2 + b3 + …+ bd + b(bd -1) = O(bd+1 ), i.e., exp. in d • 空间?O(bd+1 ) (keeps every node in memory) • 最优化?
广度优先搜索的性能
• 完备性?Yes(如果d是有限的) • 时间?1 + b + b2 + b3 + …+ bd + b(bd -1) = O(bd+1 ), i.e., exp. in d • 空间?O(bd+1 ) (keeps every node in memory) • 最优化? Yes (if cost = 1 per step); not optimal in general • Space is the big problem
相关文档
最新文档