人工智能算法_搜索

文章目录

  • 搜索
    • 问题形式化
    • 搜索分类
    • 搜索的性能指标
    • **无信息**搜索
    • **有信息搜索**
    • A*算法
    • 局部搜索
    • 局部搜索方法
    • 约束满足问题 Constraint satisfaction question
    • 如何CSP减少搜索次数?
    • 对抗搜索

搜索

问题形式化

目的:将问题转化为可以搜索的形式

如何问题形式化:

  1. 确定问题初始状态

    四皇后为例子:

    ​ 初始状态从0个棋子开始 ==>增量形式化

    ​ 初始状态从是4个棋子开始调整位置==>完全状态形式化

  2. 后继函数:状态 经过行动 得到的后续状态 的描述

  3. 目标测试:判断状态是否为目标状态

  4. 路径耗散:每个行动对应的权重

状态空间: 初始状态所有状态 的路径集合。在确定初始状态后继函数 后,就可知状态空间

!状态空间可以通过数据结构(树或图)表示,进而使用搜索算法!

问题的解:从初始状态到目标状态的一条路径。

搜索:在状态空间找到问题的

最优解:路径耗散最小的解

扩展: 后继函数+当前状态==> 新的状态集(包括后继结点和耗散值)

搜索分类

  1. 结构上:树搜索,图搜索
  2. 方式上:无信息 (盲目),有信息 (启发式)

搜索的性能指标

  1. 完备性:能不能找到解
  2. 最优性:能不能找到最优解
  3. 时间复杂度:一定时间内,搜索结点数
  4. 空间复杂度:搜索占用内存数目

树搜索和图搜索的区别:图搜索中有open表和close表,图搜索可以避免回路。

open表:已经搜索到,但没有扩展的结点集合

close表:已经扩展的结点集合

open表 ∩ \cap close表= ∅ \emptyset

无信息搜索

  1. 广度/深度优先搜索
  2. 深度有限搜索
  3. 迭代深度优先搜索★
  4. 一致代价搜索(迪杰斯特拉)
  5. 双向搜索

有信息搜索

  1. 贪婪搜索:f(n) = h(h)
  2. 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*算法的性质:

  1. 任何行动必有耗散

  2. 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)

  3. 不管有限图和无限图,从s到t有一条路径,则A*算法必成功

  4. 可采纳性定理:从s到t有一条路径,则A*算法有最优解

  5. A*算法找到的解一定是最优解

  6. 若h(n)单调,A*算法扩展n个结点后,就到达n的最优路径。

  7. 若h(n)单调,A*算法拓展的结点,f(n)<=f(n+1),不会重复扩展。

  8. 对一个问题定义两个启发函数h1(n)和h2(n),

    若对所有非目标节点满足h1(n)

    则h2有更多启发信息,h2扩展的结点,h1也必然扩展。

局部搜索

前面的搜索会保留搜索路径。
局部搜索适合无限的状态空间找解,没有目标测试和路径耗散。

最优化问题:根据一个目标函数找最佳状态.

局部搜索方法

  1. 爬山法搜索(最陡上升):根据一个目标函数,找邻居最好的一个状态.

    若邻居中没有比自身更好的,就结束搜索.(贪婪局部搜索)

    对于八皇后问题,该搜索很容易卡住.

  2. 随机爬山法:根据后续状态值,按照概率,随机选择下一状态.(轮盘)

  3. 首选爬山法:随机选择一个后继状态,优于当前状态则选择该状态。

  4. 随机重启爬山法:随机生成初始状态来进行爬山搜索, 遇到局部最大值时(目标函数不再变化),重新随机生成初始状态,最终从多个最值中选择最优结果.

  5. 模拟退火搜索:

    温度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降低足够满,能找到全局最优解

  6. 局部剪纸搜索:

    随机生成k个状态,且生成k个状态的所有后续状态

    若出现目标状态则停止,否则从所有后续状态中选k个,继续搜索

    k–>n–>k

  7. 随机剪枝搜索:根据后续状态值,按照一定概率选择k个后续状态.(轮盘)

  8. 遗传算法: 并行随机搜索,得到满意解(不是最优解)

约束满足问题 Constraint satisfaction question

定义

已知:变量集合(知道值域)和约束集合。

解: 满足所有约束的变量赋值

相容的    ⟺    \iff 合法的

约束图:节点为变量,弧为约束

同样的,CSP问题也可以形式化并进行搜索

CSP的回溯搜索:

CSP一般是增量形式化。

有n个变量,每一个变量都要赋值。

其搜索树的深度是n,可以考虑用深度有限搜索。

如何CSP减少搜索次数?

  1. 下一步选择的变量以及赋值

    1. 选择取值最少的变量
    2. 度启发式:选择约束最多的变量(降低未来选择的分支
    3. 最少约束启发式:选择约束最少的变量(剩下变量的赋值灵活性大
  2. 减小搜索空间(利用当前变量与未赋值的变量的关系)

    1. 向前检验:

      当前变量赋值后,减小与其有约束关系的变量的值域

    2. 约束传播(弧相容):

      将一个变量的约束传播到其他变量。

      前向检验只能处理当前变量以及与其有约束的变量W。

      但W的值域变化时,与W有约束关系的变量也要检验。

    3. 智能回溯:

    4. 历时回溯:

      不是回到最近的一个变量,而是回到冲突集的变量

CSP的局部搜索

形式化:完全状态形式化

搜索:最小冲突启发式

对抗搜索

博弈:

博弈问题形式化:

一般用树结构来表示。

例子:棋类(井字棋),分钱币

博弈算法:

极小极大值算法

性质:

从博弈树自底向上,方块取最大值,圆圈取最小值。

构造完树后,正方形考虑走右边作为第一步。

改进:α-β剪枝技术

搜索空间很大,减少搜索空间。

你可能感兴趣的:(算法,人工智能)