一.无信息搜索策略
1. 宽度优先搜索
2. 一致代价搜索找到任何单步代价函数都是最优,扩展的是路径消耗g(n)最小的结点n;每一步代价相同时即为宽度优先搜索
3. 深度优先搜索
4. 深度受限搜索通过对于深度优先搜索设置界限l来避免无限状态空间深度有限搜索
5. 迭代加深的深度优先搜索和深度优先搜索结合使用确定最好的深度界限,不断的增大深度限制直到找到目标。因为很多状态会被重复生成所以会有浪费的后果,可以用哈希解决这个问题。
6. 双向搜索从初始结点向前搜索和从目标结点向后搜索同时进行。双向搜索可以这样实现:目标测试替换为检查两个方向的搜索边缘结点集是否相交,如果不为空就找到一个解,但是不一定是最优。如果保证路径最短还需要额外搜索。
二.有信息(启发式)搜索策略
使用本身定义之外的特定知识。我们所考虑的一般算法称为最佳优先搜索,结点是基于评估函数f(n)所选择的,评估值最低的结点首先被进行扩展。大多数最佳优先搜索算法的f由启发函数构成:
h(n)=结点n到目标节点的最小代价路径的代价估计值
1. 贪婪最佳优先搜索 试图扩展离目标最近的结点(即只需要考虑每次扩展后的子节点哪一个最优)。
2. A*搜索:缩小总评估代价 对结点的评估结合了g(n),即到达此结点已经花费的代价,和h(n),从该节点n到目标节点所花的代价:
f(n)=g(n)+h(n)
保障最优性的第一个条件是h(n)是一个可采纳启发式,因为g表示当前路径到达n的实际代价,所以f永远不会超过经过节点n的解的实际代价。
第二个条件略强于第一个的条件被称为一致性(单调性),只作用于在图搜索中使用A*算法。如果对于每个节点n和通过任一行动a生成的n的每个后继节点m,从节点n到达目标的估计代价不大于从n到m的单步代价与从m到目标的估计代价的和:
h(n)<=c(n,a,m)+h(m)
即一般的三角不等式,保证了三角形中任何一条边的长度不大于另外两条边之和。
A*由如下性质:如果h(n)是可采纳的,那么A*的树搜索版本是最优的。如果h(n)是一致的,那么图搜索的A*算法是最优的。
3. 存储受限的启发式搜索
三.局部搜索
1. 爬山法(最陡上升)通过循环不断向值增加的方向持续移动,临接状态中没有比他更高时终止。算法不维护树,当前结点数据结构只保存当前状态和目标函数值。爬山法不会考虑与当前状态不相邻的状态,就像健忘的人试图在大雾中登顶山峯。
2. 模拟退火搜索
3. 局部束搜索
4. 遗传算法
四.对抗搜索
1. 极大极小算法
2. a-b剪枝
3. 截断搜索
4. 向前剪枝
五.约束满足问题CSP(地图染色问题,作业调度问题)
1. 定义约束满足问题
约束满足问题包含三个成分X,D,C
X是变量集合,D是值域集合,C是描述变量取值的约束集合,每个约束Ci是有序数对(scope,rel),scope是约束中的变量组,rel定义这些变量取值应满足的关系。
2. CSP算法形式化
最简单的CSP是指设计的变量是离散有限值域的。
离散值域无限
连续值域的约束:一元约束,二元约束,全局约束
3. 约束传播:CSP中的推理(数独游戏)
节点相容
弧相容
路径相容
k-相容
全局约束
4. CSP的回溯搜索
5. CSP局部搜索