很多问题可以表示成为树. 于是, 这些问题可以使用树 搜索算法来求解
Hamiltonian环问题
沿着G的n条边经过每个节点一次, 并回到起始节点的环称为G的一个 Hamiltonian环.
–爬山策略使用贪心方法确定搜索的方向, 是 优化的深度优先搜索策略
–爬山策略使用启发式测度来排序节点扩展 的顺序
Hill Climbing算法
- 构造由根组成的单元素栈S;
- If Top(S)是目标节点 Then 停止;
- Pop(S);
- S的子节点按照其启发测度由大到 小的顺序压入S
- If S空 Then 失败 Else goto 2.
Best-First Search Sttrategy
结合深度优先和广度优先的优点
• 根据一个评价函数, 在目前产生的所有 节点中选择具有最小评价函数值的节 点进行扩展.
• 具有全局优化观念, 而爬山策略仅具有局部 优化观念.
–上述方法很难用于求解优化问题
–分支界限策略可以有效地求解组合优化问题
–发现优化解的一个界限
–缩小解空间, 提高求解的效率
分支界限策略的原理
–产生分支的机制(使用前面的任意一种策略)
–产生一个界限(可以通过发现可能解)
–进行分支界限搜索, 即剪除不可能产生优化 解的分支
分支界限搜索(使用爬山法)算法
- 建立根节点, 其权值为解代价下界;
- 使用爬山法, 类似于拓朴排序序列树生成算法 求解问题, 每产生一个节点, 其权值为加工后的 代价矩阵对应元素加其父节点权值;
- 一旦发现一个可能解, 将其代价作为界限, 循环 地进行分支界限搜索: 剪掉不能导致优化解的 子解, 使用爬山法继续扩展新增节点, 直至发现 优化解.
A* 算法
A算法与分支界限策略的比较
– 分支界限策略是为了剪掉不能达到优化解的分支
– 分支界限策略的关键是“界限”
– A算法的核心是告诉我们在某些情况下, 我们得 到的解一定是优化解, 于是算法可以停止
– A算法试图尽早地发现优化解
– A算法经常使用Best-first策略求解优化问题
A算法关键—代价函数
– 对于任意节点n • g(n)=从树根到n的代价
• h(n)=从n到目标节点的优化路径的代价
• f*(n)=g(n) + h*(n)是节点n的代价
– What is the value of h*(n)? • 不知道!
• 于是, f*(n)也不知道
– 估计h*(n) • 使用任何方法去估计h*(n), 用h(n)表示h*(n)的估计
• h(n)h*(n)总为真
• f(n)=g(n)+h(n)g(n)+h*(n)=f*(n)定义为n的代价
A算法本质—已经发现的解是优化解
定理1. 使用Best-first策略搜索树, 如果A选择的节点是 目标节点, 则该节点表示的解是优化解.
(1). 使用Best-first策略搜索树;
(2). 节点n的代价函数为f(n)=g(n)+h(n), g(n)是 从根到n的路径代价, h(n)是从n到某个目 标节点的优化路径代价;
(3). 对于所有n, h(n)h*(n);
(4). 当选择到的节点是目标节点时, 算法停止, 返回一个优化解.
第八章主要讲解爬山策略,bestfirst策略,分支界限策略,A*策略。