一、问题求解智能体
四个基本步骤:
1、目标形式化(Goal formulation)• 成功的状态描述
2、问题形式化(Problem formulation)• 根据所给的目标考虑行动和状态的描述
3、搜索(Search)• 通过对行动序列代价计算来选取最佳的行动序列.
4、执行(Execute)• 给出 “解”执行行动.
问题求解:形式化——搜索——执行
二、问题形式化
• 一个问题可以由四个组成部分来形式化:
1、初始状态
2、动作或后续函数
3、目标测试
4、路径代价
• 一个解是从初始状态到目标状态的动作系列
解、代价、耗散值、最优解、无解……
example.真空吸尘机器人
• 状态:机器人的位置及灰尘位置
• 动作: 向左,向右,吸
• 目标测试:所有位置都不脏
• 路径代价:每做一个动作计代价为1
三、通过搜索求解
我们怎么找到解决问题的方法?
•搜索状态空间(记住空间的复杂性取决于状态表示)
•这里:通过显式生成树搜索
根=初始状态。
节点和叶子通过后继函数生成。
•在一般的搜索生成图(相同的状态,通过多条路径)
基本思想: 通过产生已经探索到的状态的后续状态的方法来离线地进行状态空间的模拟搜索。
搜索策略评价
•搜索策略指结点扩展顺序的选择。
•搜索策略的性能由下面四个方面来评估:
• 完备性: 如果问题的解存在时它总能找到解。
• 时间复杂性: 产生的结点个数。
• 空间复杂性: 搜索过程中内存中的最大结点数。
• 最优性: 它总能找到一个代价最小的解。
• 问题难度由时间和空间复杂度的定义来度量的:
时间和空间复杂度根据下面三个量来表达:
• b: 搜索树的最大分支数
• d: 最小代价解所在的深度
• m: 状态空间的最大深度(可能是∞)
盲目搜索策略仅利用了问题定义中的信息:
• 宽度优先搜索
• 一致代价搜索
• 深度优先搜索
• 深度有限搜索
• 迭代深度搜索
宽度优先搜索
• 优先扩展最浅层的未扩展结点
• 实现方法
:• Fringe表采用先进先出队列( FIFO queue),即新的后续节点总是放在队列的末尾
一致代价搜索
• 优先扩展具有最小代价的未扩展结点
• 实现: fringe 是根据路径代价排序的队列
• 在单步代价相等时与宽度优先搜索一样
• 完备性? Yes, 只要单步代价不是无穷小
• 时间? 代价小于最优解的结点个数, O(bceiling(C*/ ε))
• 空间? 代价小于最优解的结点个数, O(bceiling(C*/ ε))
• 最优性? Yes – 结点是根据代价排序扩展的
深度优先搜索
• 扩展最深层的未扩展结点
• 实现:fringe = 后进先出队列(LIFO queue)