搜索形式化与搜索求解
搜索问题的形式化
搜索问题的形式化
我们考虑下述搜索问题的形式化
我们的目标是:从Arad出发前往Bucuresti
则我们可以将该问题理解为:从Arad出发该怎么走,才能走到目的地,即转换为路径搜索问题
将上述问题进行形式化,可得:
我们可以将搜索形式化为以下几个要素:
- 初始状态Initial state
- 行动Actions(s)
- 转移模型Result(s,a)
- 目标测试Goal-Test(s)
- 动作代价Action-Cost(s,a)
该搜索问题的解,即为从初始状态到目标状态的动作序列
示例
搜索求解
树搜索
我们可以将上述搜索问题,转化为树搜索的问题
我们可以将上述树搜索用下列函数来表示。先将初始结点加入frontier中,随后从frontier中选择一个叶节点,判断该节点是否为目标节点,若不是,则将该节点相连的结点加入到frontier中。
我们称frontier为未被扩展的结点集合
图搜索
图搜索与树搜索的基本想法是一样的,但图搜索可以去除重复的状态
新增了一个explored集合,表示已被探索的结点集合
当在遍历结点时,若该节点不为目标状态,则将该节点加入explore集合中,并将其相邻的结点加入到frontier中,但需要注意,在加入新节点到frontier中,要做重复性检查,即判断该相邻的结点是否已经在frontier中或者explored中
上图中绿色字体表示的是重复节点,即直接删除
总结
搜索:不断地扩展frontier内的结点,直到代表目标状态的结点出现
树搜索:反复从frontier移出结点进行扩展,每个子结点都加入搜索树中(成为frontier结点)
图搜索:反复从frontier移除结点进行扩展,将状态不重复的子节点加入搜索树(成为frontier结点)。用explored集合保存已被扩展过的结点
树结点的结构
结点与状态是不一样的,一个结点包含了多个信息,可用于后续的搜索算法中
搜索算法的评估
完备性:若一个搜索算法能够找到解,那么称搜索算法是完备的
最优性:若一个搜索算法总能找路径代价最小的解,那么称该搜索算法是最优的
复杂性:其衡量了一个算法的时间开销以及内存开销