📜  波束搜索算法简介

📅  最后修改于: 2022-05-13 01:58:08.758000             🧑  作者: Mango

波束搜索算法简介

介绍 :
启发式技术是一组标准,用于确定多个选项中的哪一个在实现特定目标方面最有效。这种策略通过放弃最佳的系统性和完整性的主张来提高搜索过程的效率。
如果我们使用适当的启发式方法,我们可以希望在少于指数的时间内很好地解决难题(例如旅行商问题)。

光束搜索:
通过扩展有限集合中最有希望的节点来检查图的启发式搜索算法称为波束搜索。
波束搜索是一种启发式搜索技术,它总是扩展每个级别的最佳节点的 W 数。它逐级进行,并且仅从每个级别的最佳 W 节点向下移动。 Beam Search 使用广度优先搜索来构建其搜索树。 Beam Search 使用广度优先搜索构建其搜索树。它在树的每个级别生成当前级别状态的所有后继。但是,在每个级别,它只评估 W 个状态。不考虑其他节点。
与节点相关的启发式成本用于选择最佳节点。波束搜索的宽度用 W 表示。如果 B 是分支因子,则在每个深度,总会有 W × B 个节点在考虑中,但只会选择 W。当光束宽度减小时,更多的状态被修整。
当 W = 1 时,搜索变为爬山搜索,其中始终从后继节点中选择最佳节点。如果波束宽度不受限制,则不会修剪任何状态,并且波束搜索被标识为广度优先搜索。
波束宽度限制了完成搜索所需的内存量,但它是以完整性和最优性为代价的(可能找不到最佳解决方案)。这种危险的原因是期望的状态可以被修剪。
示例:使用此算法生成的搜索树W = 2 & B = 3如下:

光束搜索

黑色节点是根据它们的启发式值选择的,以便进一步扩展。

波束搜索算法如下:

输入:开始和目标状态。
局部变量: OPEN、NODE、SUCCS、W_OPEN、FOUND
输出:是或否(如果搜索成功则是)

Start 
Take the inputs 
NODE = Root_Node & Found = False
If : Node is the Goal Node,
     Then Found = True, 
Else : 
     Find SUCCs of NODE if any, with its estimated cost&
     store it in OPEN List 
While (Found == false & not able to proceed further), do
{
     Sort OPEN List
     Select top W elements from OPEN list and put it in
     W_OPEN list and empty the OPEN list.
     for each NODE from W_OPEN list
     {
         if NODE = Goal,
             then FOUND = true 
         else
             Find SUCCs of NODE. If any with its estimated
             cost & Store it in OPEN list
     }
}
If FOUND = True,
    then return Yes
else
    return No
Stop