我对最佳的优先搜索算法有一些疑问。我拥有的伪代码如下: best first search pseudocode
第一个疑问:完成了吗?我已经读过它不是因为它可以进入死胡同,但是我不知道什么时候会发生,因为如果算法选择的节点没有更多的邻居,它不会卡在其中,因为该节点已被删除从打开列表开始,在下一次迭代中,将处理打开列表的以下节点,并继续搜索。
第二个疑问:这是最优的吗?我认为,如果在搜索过程中访问的目标更接近节点,那么解决方案将是最短的,但事实并非如此,我也不知道这样做的原因,因此也不知道这样做的原因。算法不是最佳的。
我使用的启发式方法是两点之间的直线距离。
感谢您的帮助!
答案 0 :(得分:2)
通常情况下,最好的优先搜索算法是完整的,因为在最坏的情况下,它将搜索整个空间(最差的选择)。现在,它也应该是最优的(考虑到启发式函数是可以接受的),这意味着它不会高估从任何节点到目标的路径成本。 (它还必须保持一致-这意味着它遵守三角不等式,如果不是,则该算法将不完整-因为它可能会进入一个循环)
检查算法,我看不到启发函数的计算方式。另外,我没有看到计算出到达特定节点的路径成本。 因此,它需要计算到达特定节点的路径的实际成本,然后需要对从节点到目标的路径的成本进行启发式估计。
公式为f(n)=g(n)+h(n)
,其中g(n)是到达节点的路径成本,h(n)是启发式算法,用于估计从n到目标的最便宜路径的成本。
检查A* algorithm的实现,这是最佳的路径规划优先搜索示例。
TLDR 在最佳的首次搜索中,您需要计算节点的成本,该成本是到达该节点的路径成本和估算路径成本的启发式函数之和从那个节点到目标。如果启发式函数是可接受的且一致的,则算法将是最佳且完整的。
答案 1 :(得分:0)
当然,如果启发式功能低估了成本,那么最佳的优先搜索并不是最佳的。实际上,即使您的启发式功能完全正确,也绝不能保证最佳的优先搜索是最佳的。这是一个反例。考虑下图:
绿色数字是实际成本,红色数字是确切的启发式函数。让我们尝试找到从节点S到节点G的路径。 最好的优先搜索将遵循启发式功能为您提供S-> A-> G。但是,如果您仔细观察该图,您会发现路径S-> B-> C-> G的成本较低,而不是6。因此,这是最佳启发式算法在最佳启发式算法下表现最佳的示例功能。