您的位置:首页 > 大数据 > 人工智能

人工智能 一种现代方法 第3章 用搜索树对问题求解

2018-03-22 20:45 609 查看

人工智能 一种现代方法 第3章 用搜索树对问题求解

2018.3.20

有一些问题无法通过单独的行动得出解,需要行动序列达到目标,则需要使用搜索法。

3.1问题求解智能体

目标形式化:基于当前的情形和智能体的性能度量进行目标形式化

FORMULATE-GOAL(state)

问题形式化:在给定目标下确定需要考虑哪些行动和状态。

FORMULATE-PROBLEM(state, goal)

搜索:寻找能够达到目标的行动序列

SEARCH(problem)

3.1.1良定义的问题及解

初始状态、行动、转移模型、目标状态、路径耗散

3.1.2问题的形式化

抽象:在问题表示中去除不相关的细节的过程

3.2问题实例

从玩具问题过渡到现实世界问题

3.2.1玩具问题

玩具问题可以用来检验新的搜索算法的能力

形式化:状态、初始状态、行动、转移模型、目标测试、路径耗散、后继函数

八数码问题:3*3的格子中有一个空位置,通过移动将其按顺序排好

八皇后问题:8*8的棋盘上摆放8个棋子,使其横竖斜三方向均没有其他棋子

3.2.2现实世界问题

履行问题、 旅行商问题(TSP)、 VLSI布线问题、 机器人导航问题、自动装配序列问题

3.3通过搜索求解

初始状态:搜索树的根节点

行动:搜索树的每条连线

结点 :问题状态空间中的状态

扩展:在当前状态上选择行动

边缘:所有待扩展的叶子节点的集合

搜索策略:如何选择要扩展的状态

探索集:记录每一个已扩展的节点,新生成的节点如果与探索集中重合,则不考虑该结点,用于避免回路。

3.3.1搜索算法基础

定义树中每个结点的数据结构

n.STATE:状态

n.PARENT:父节点

n.ACTION:父节点到该结点的行动

n.PATH-COST:根节点到该结点的路径消耗

队列

FIFO队列:先进先出

LIFO队列:栈,后进先出

优先级队列:根据函数计算最高优先级先出

3.3.2问题求解算法的性能

评价性能的标准

完备性:是否保证找到解

最优性:找到的解是否最优

时间复杂度:找到解需要多少时间

空间复杂度:在执行搜索过程中需要多少内存

复杂度的表达

b:分支引子 任何节点的最多后继数

d:深度 目标节点的最浅深度 根节点到目标节点的步数

m:状态空间中任何路径的最大长度

评价搜索有效性—搜索代价,通常由时间复杂度和空间复杂度决定

3.4无信息搜索策略

生成后继、区分目标状态与非目标状态

3.4.1宽度优先搜索(广度优先搜索)

定义:先扩展根节点,在扩展根节点的所有后继,在扩展他们的后继。也可以理解为一层一层的扩展。

解决办法:FIFO(First In First Out) 先进先出的队列

性能:

完备性:宽度优先搜索是完备的,一定能找出目标节点

最优性:对于路径代价基于节点深度非递减,则是最优的,但实际上路径代价不一定基于节点深度非递减。

时间复杂度和空间复杂度:O(b^d)指数级增长,时空复杂度很差

3.4.2一致代价搜索

考虑了每一步的代价不同的搜索。

若访问到已经探索过的节点,则会比较现在的代价和以前的代价大小,若当前访问路径的代价小,则会替换掉原先的访问路径。同时在访问边缘节点时,也会先选择代价最小的节点。

性能:

完备性 最优性:一定能找到最优节点(因为每当选择一个节点去扩展时,必然已找到到达该节点的最优路径)

复杂度:可能比广度优先搜索大得多,因为每当探索一个代价大的行动之前,就必然会探索很多代价小的行动。

3.4.3深度优先搜索

定义:总是扩展搜索树当前边缘结点集中最深的结点,直到扩展完后,将其从边缘节点中去掉,回溯到下一个未扩展的深度稍浅的结点。

解决办法:LIFO(Last In First Out) 栈

性能:

完备性:在避免荣誉路径和重复状态的图搜索中是完备的,但树搜索则有可能陷入死循环中。在无限状态空间中,则均可能陷入死循环中。

最优性:不一定是最优的

时间复杂度:可能是无限的

空间复杂度:很小,O(bm),b为分支引子,m为某节点最大深度。只需要记录某节点到根节点的所有节点和他们的相邻后继即可。

回溯搜索:与深度优先搜索类似,空间复杂度只需要O(m),即不扩展每一个行动,而是一个一个扩展

3.4.4深度受限搜索

定义:对深度优先搜索设置深度界限l,深度超过l的节点被当作没有后继来对待。

性能:

完备性:如果l

3.4.5迭代加深的深度优先搜索

定义:不断地增大深度限制,不断执行深度受限搜索,直到找到目标

性能:

完备性:分支引子有限时完备

最优性:路径代价是节点深度的非递减函数时最优

3.4.6双向搜索

定义:同时运行两个搜索,一个从初始状态向前搜索,另一个从目标状态向后搜索,直到相遇。

性能:

完备性:分支引子有限时完备

最优性:不一定是最优的

时空复杂度:O(b^(d/2))

难点:如何向后搜索,部分问题可以向后搜索,但有些问题向后搜索会使得分子引子很大。

3.5有信息(启发式)的搜索策略

3.5.1贪婪最佳优先搜索

定义:在每一步扩展时,都试图扩展离目标最近的结点。(直线距离启发式,记hSLD)

性能

完备性:不一定能找到解,容易钻进离目标节点近的死胡同。

最优性:不一定是最优的,因为其贪婪地每次都寻找离目标结点最近的结点

时空复杂度:hSLD均很小, O(h),只搜索一条路径;但最坏情况下,O(b^m)

3.5.2A*搜索:缩小总评估代价

定义:f(n) = g(n) + h(n),每次都选择扩展f(n)最小的结点,在扩展时检测是否到达目标。

f(n):经过结点n的最小代价解的估计代价(有可能略小于真实代价)

g(n):到达此结点已经花费的真实代价

h(n):从该结点到目标结点所花代价

保证最优的条件:

可采纳性:h(n)是一个可采纳启发式,从不会高估到达目标的代价。例如直线距离启发式。

一致性(单调性):h(n) <= c(n, a, n1) + h(n1),即满足三角不等式

3.5.3存储受限的启发式搜索

将迭代加深的思想用在启发式算法中。迭代加深A*算法,IDA*算法。

原来的迭代加深算法截断值是搜索深度,现在改为f代价。

递归最佳优先搜索(RBFS)

定义:f_limit记录次优路径的f值,如果当前后继节点的f值均大于f_limit就暂缓探索该节点,将其后继节点f的最小值代替该节点的f,转而探索次优节点,并重复以上步骤。

优点:仅用线性内存

缺点:内存使用过少,导致有很多节点被重复扩展,冗余路径也会带来复杂度的指数级增长

内存受限A*(MA*) 简化内存受限A*(SMA*)

定义:探索最佳叶子节点直到内存耗尽,丢弃当前f最大节点,并添加新节点。

权衡时空复杂度成为算法探索的最终目的

3.6启发式函数

对于八数码问题的启发式函数有两个常用的,两个启发式函数都没有超过实际的解代价

h1=不在位置上的棋子数,最大为8

h2=所有棋子到其目标位置的距离合(水平距离+垂直距离),最大值在20左右

3.6.1启发式的精确度对性能的影响

启发式的设计对有效分支因子的值有影响。

一般来说启发式使用值更大的函数是更好的。

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

松弛问题:减少了行动限制的问题,状态空间是原有状态空间的超图,多了很多边。

意义:一个松弛问题最优解的代价,是原问题的可采纳启发式。

生成:通过去掉经过形式化的原问题的一个或几个条件可以形成松弛问题。

最优松弛问题:可以比较生成的松弛问题的最优解的代价,选择最大的最优解代价的松弛问题。

除此之外还可以通过从子问题除法设计可采纳的启发式和从经验中得到启发式等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息