文章目录
搜索
问题形式化
目的:将问题转化为可以搜索的形式
如何问题形式化:
-
确定问题初始状态 :
四皇后为例子:
初始状态从0个棋子开始 ==>增量形式化
初始状态从是4个棋子开始调整位置==>完全状态形式化
-
后继函数:状态 经过行动 得到的后续状态 的描述
-
目标测试:判断状态是否为目标状态
-
路径耗散:每个行动对应的权重
状态空间: 初始状态 到所有状态 的路径集合。在确定初始状态 和后继函数 后,就可知状态空间 。
!状态空间可以通过数据结构(树或图)表示,进而使用搜索算法!
问题的解:从初始状态到目标状态的一条路径。
搜索:在状态空间找到问题的解
最优解:路径耗散最小的解
扩展: 后继函数+当前状态==> 新的状态集(包括后继结点和耗散值)
搜索分类
- 结构上:树搜索,图搜索
- 方式上:无信息 (盲目),有信息 (启发式)
搜索的性能指标
- 完备性:能不能找到解
- 最优性:能不能找到最优解
- 时间复杂度:一定时间内,搜索结点数
- 空间复杂度:搜索占用内存数目
树搜索和图搜索的区别:图搜索中有open表和close表,图搜索可以避免回路。
open表:已经搜索到,但没有扩展的结点集合
close表:已经扩展的结点集合
open表 ∩ \cap ∩close表= ∅ \emptyset ∅
无信息搜索
- 广度/深度优先搜索
- 深度有限搜索
- 迭代深度优先搜索★
- 一致代价搜索(迪杰斯特拉)
- 双向搜索
有信息搜索
- 贪婪搜索:f(n) = h(h)
- A*搜索:f(n) = h(n) + g(n)
s:初始结点,t:目标结点,n: s到t最佳路径上的结点
s------> n ------>t
g(n) h(n)
f(n):评价函数,由n和已知信息求解下一结点。 f(n) = g(n)+h(n)
g(n):从s到n的实际耗散值
h(n):启发函数,从n到t最短路径的估计耗散值
g*(n):从s到n实际最低的耗散值
h*(n):从n到t实际最低的耗散值(最优路径)
对于h(n)是否可采纳(完备性)的判定:h(n)<=h*(n)
A*算法
本质:每次访问容器中 f(n) 值最小的结点
A*算法的性质:
-
任何行动必有耗散
-
f*(s) = f*(t) = h*(s) = g*(t) = f*(n)
f*(s) = h*(s) + g*(s) = h*(s)
f*(t) = h*(t) + g*(t) = g*(t)
h*(s) = g*(t) = f*(n)
-
不管有限图和无限图,从s到t有一条路径,则A*算法必成功
-
可采纳性定理:从s到t有一条路径,则A*算法有最优解
-
A*算法找到的解一定是最优解
-
若h(n)单调,A*算法扩展n个结点后,就到达n的最优路径。
-
若h(n)单调,A*算法拓展的结点,f(n)<=f(n+1),不会重复扩展。
-
对一个问题定义两个启发函数h1(n)和h2(n),
若对所有非目标节点满足h1(n)<h2(n),
则h2有更多启发信息,h2扩展的结点,h1也必然扩展。
局部搜索
前面的搜索会保留搜索路径。
局部搜索适合无限的状态空间找解,没有目标测试和路径耗散。
最优化问题:根据一个目标函数找最佳状态.
局部搜索方法
-
爬山法搜索(最陡上升):根据一个目标函数,找邻居最好的一个状态.
若邻居中没有比自身更好的,就结束搜索.(贪婪局部搜索)
对于八皇后问题,该搜索很容易卡住.
-
随机爬山法:根据后续状态值,按照概率,随机选择下一状态.(轮盘)
-
首选爬山法:随机选择一个后继状态,优于当前状态则选择该状态。
-
随机重启爬山法:随机生成初始状态来进行爬山搜索, 遇到局部最大值时(目标函数不再变化),重新随机生成初始状态,最终从多个最值中选择最优结果.
-
模拟退火搜索:
温度T作为计数器. T从一定初值降低至0,则结束循环.
每次随机选择后续, Δ E = V a l u e ( 后 续 状 态 ) − V a l u e ( 当 前 状 态 ) \Delta E=Value(后续状态)-Value(当前状态) ΔE=Value(后续状态)−Value(当前状态)
若ΔE>0,则当前状态=后续状态.
否则,以 e Δ E T e^{\frac{\Delta E}{T}} eTΔE的概率使得当前状态=后续状态.
住:若T降低足够满,能找到全局最优解
-
局部剪纸搜索:
随机生成k个状态,且生成k个状态的所有后续状态
若出现目标状态则停止,否则从所有后续状态中选k个,继续搜索
k–>n–>k
-
随机剪枝搜索:根据后续状态值,按照一定概率选择k个后续状态.(轮盘)
-
遗传算法: 并行随机搜索,得到满意解(不是最优解)
约束满足问题 Constraint satisfaction question
定义
已知:变量集合(知道值域)和约束集合。
解: 满足所有约束的变量赋值
相容的 ⟺ \iff ⟺合法的
约束图:节点为变量,弧为约束
同样的,CSP问题也可以形式化并进行搜索
CSP的回溯搜索:
CSP一般是增量形式化。
有n个变量,每一个变量都要赋值。
其搜索树的深度是n,可以考虑用深度有限搜索。
如何CSP减少搜索次数?
-
下一步选择的变量以及赋值
- 选择取值最少的变量
- 度启发式:选择约束最多的变量(降低未来选择的分支
- 最少约束启发式:选择约束最少的变量(剩下变量的赋值灵活性大
-
减小搜索空间(利用当前变量与未赋值的变量的关系)
-
向前检验:
当前变量赋值后,减小与其有约束关系的变量的值域
-
约束传播(弧相容):
将一个变量的约束传播到其他变量。
前向检验只能处理当前变量以及与其有约束的变量W。
但W的值域变化时,与W有约束关系的变量也要检验。
-
智能回溯:
-
历时回溯:
不是回到最近的一个变量,而是回到冲突集的变量
-
CSP的局部搜索
形式化:完全状态形式化
搜索:最小冲突启发式
对抗搜索
博弈:
博弈问题形式化:
一般用树结构来表示。
例子:棋类(井字棋),分钱币
博弈算法:
极小极大值算法
性质:
从博弈树自底向上,方块取最大值,圆圈取最小值。
构造完树后,正方形考虑走右边作为第一步。
改进:α-β剪枝技术
搜索空间很大,减少搜索空间。