问题求解
能用搜索技术解决的问题--搜索问题
搜索问题:已知问题的初始状态 和 目标状态 ,求 一个操作序列 使得问题从初始状态转移到目标状态。
最优搜索问题: 找到合适的操作序列并且代价最低
搜索问题的四个要素:初始状态 后继函数(某种操作) 目标测试(看看给定的状态是不是目标状态) 路径代价函数
问题表示
表示搜索问题的两种方法:1.状态空间表示法 2. 与/或书表示法
状态空间表示法
状态和算符 状态:问题求解过程中的不同的状态 S
算符:一种状态变成另外一种状态的操作 F
状态空间: 状态 S+算符F+目标状态G
解的搜索
下一步可以选择的有很多 如何选择便使用搜索策略
生成与测试范式 :提出可能的解,检查可能的解是否是真正的解
生成与测试范式的方法:1.穷举法 2. 回溯法 3.贪心算法
穷举法:无法避免一些明显不能成功的方案
回溯法: 对穷举法的改进,不再探测不可能的路径
比如四皇后问题中 放置第三个皇后时候无法找到合适的位置 此时应该回到第二个皇后的位置,从新放置
盲目搜索 (找到的解不一定是最优解)深度优先搜索(DFS) 广度优先搜索(BFS)迭代加深(DFS-ID)
广度优先搜索(BFS):
深度优先搜索与广度优先搜索的区别:
深度优先搜索的子节点放入open的首部
广度优先搜索的放入尾部
启发式搜索:从经验出发 省略不重要的路径
估价函数:提供启发信息
爬山法(典型的知情搜索算法):形式最简单的贪婪算法
假设到A的距离是19 到B的距离是26 爬山法会选择A点 但是并没有考虑A能否到达山顶
最陡爬山法: 会选择比较好的一个 而不是最短的
爬山法的问题:山脊问题 高原问题 山麓问题
山麓问题:可能会困在局部的最大值中 ,目标状态不能从当前的位置到达
高原问题:局部最优 偏离目标
山脊问题 :偏离目标?