【计算智能】——优化与搜索

优化与搜索

    • 1. 盲目搜索
        • 1.1 深度优先搜索
        • 1.2 广度优先搜索
        • 1.3 迭代加深搜索
    • 2. 启发式搜索
        • 2.1 最佳优先搜索
        • 2.2 爬山搜索
        • 2.3 梯度搜索
        • 2.4 博弈搜索
        • 2.5 剪枝
    • 3. 搜索算法效率比较
        • 3.1 广度优先搜索
        • 3.2 深度优先搜索
        • 3.3 启发式搜索

1. 盲目搜索

1.1 深度优先搜索

总是扩展深度大的结点,直到找到目标结点。

流程:

  1. 用N表示初始结点列表(N待扩展)
  2. 如果N为空集,则退出并给出失败信号
  3. n取为N的第一个节点,并在N中删除结点n,放入已访问结点列表
  4. 如果n为目标结点,则退出并给出成功信号
  5. 否则,将n的子结点作为表头(第一个结点)扩展到N中,返回2步

1.2 广度优先搜索

总是在某一深度上先搜索所有的结点,之后搜索下一个深度的结点。
随着深度的增加,组合爆炸。

流程:

  1. 用N表示初始结点列表(N待扩展)
  2. 如果N为空集,则退出并给出失败信号
  3. n取为N的第一个结点,并在N中删除结点n,放入已访问结点列表
  4. 如果n为目标结点,则退出并给出成功信号
  5. 否则,将n的子结点加到N的末尾,并返回2步

1.3 迭代加深搜索

在固定深度上,重复深度优先搜索;增加深度,再重复深度优先搜索,直到找到目标结点。

流程:

  1. 用N表示初始结点列表(N待扩展)
  2. 如果N为空集,则退出并给出失败信号
  3. n取为N的首结点,并在N中删除结点n,放入已访问结点列表
  4. 如果n为目标结点,则退出并给出成功信号
  5. 如果n的深度=max,则max++,返回2步
  6. 否则,将n的子结点加到N的表头,并返回2步

2. 启发式搜索

利用启发信息做指导进行的一种搜索。

s(初始) -> n(当前) -> t(目标)

  • 评价函数 f(n) = g(n) + h(n)
  • g(n)为初始结点s到当前n的代价估计
  • h(n)为启发函数,n到目标t的代价估计

举例 (画出搜索树)
【计算智能】——优化与搜索_第1张图片
当启发函数的值为“结点n中不在目标位置的牌的张数”时,搜索树如下:
【计算智能】——优化与搜索_第2张图片
当启发函数为“结点n中每一张牌与它的目标位置的距离之和”时,搜索树如下:
【计算智能】——优化与搜索_第3张图片

几个概念

  • 数据驱动:从初始状态出发,一步步搜索到目标状态,也叫向前搜索。
  • 目标驱动:从目标状态出发,搜索到初始状态,也加向后搜索。
  • 双向搜索:从初始状态和目标状态同时出发。
  • 问题空间搜索:如果搜索的对象是问题,搜索的原则是把一个复杂问题化为一组简单子问题的“与”、“或”。
  • 博弈搜索:每一方在向目标前进的同时试图阻止对方接近目标。

2.1 最佳优先搜索

将结点表按距离目标的估计距离进行排序,再以结点的估计距离为标准选择待扩展节点。
缺点:保存所有搜索过的最优节点,空间复杂度高

2.2 爬山搜索

不保存搜索过的所有节点,只保存当前遇到的那些最佳结点。

流程:

  1. 取n为初始结点
  2. 如果n的估计值大于其所有子结点的值,则返回n并退出。
  3. 否则,取n为其具有最大值的子结点,返回2)。

得到的是局部最优解,容易陷入“陷阱”无法自拔,将无法搜索到全局最优解

2.3 梯度搜索

是目标函数具有连续可微性质的爬山搜索方法。

流程:
【计算智能】——优化与搜索_第4张图片

搜索空间从一维变成二维,则可以模拟真实的爬山过程。

2.4 博弈搜索

是“与或”图搜索的特例。
对弈双方都努力寻找各自获胜的状态格局,同时也努力阻止对方出现获胜状态局。

极大极小搜索
一个MAX结点的α值等于其后继结点当前最大的最终倒推值。
一个MIN结点的β值等于其后继结点当前最小值的最终倒推值。
如下图:结点边上的值为该结点的得分
【计算智能】——优化与搜索_第5张图片

2.5 剪枝

  1. (α - 剪枝)若MIN结点的β值 ≤ 其任何父结点MAX的α值,则可以终止该MIN结点以下的搜索,且这个MIN结点的最终倒推值可取为它的β值。
  2. (β - 剪枝)若MAX结点的α值 ≥ 其任何父结点MIN的β值,则可以终止该MAX结点以下的搜索,且这个MAX结点的最终倒推值可取为它的α值。
    【计算智能】——优化与搜索_第6张图片

3. 搜索算法效率比较

3.1 广度优先搜索

  • 总是在某一深度上先搜索所有的结点,之后搜索下一个深度的结点。
  • 能保证一定得到最优解。
  • 需要生成大量结点,故有可能导致组合爆炸,搜索效率差。

3.2 深度优先搜索

  • 总是扩展深度大的结点,直到找到目标结点(问题的解)。
  • 未必能找到解,找到也不一定是最优解(路径最短)。
  • 在存储空间上渐进最优。
  • 对于一棵无穷树可能永远也找不到目标结点。
  • 搜索效率一定程度上取决于运气,总体来说不高。

3.3 启发式搜索

  • 通过合适的启发函数,启发式搜索可以通过生成比较少的结点求出最佳路径,搜索效率高。

你可能感兴趣的:(课程理论)