search - 可接纳性并不能保证 A* 的最优性?
问题描述
我正在为即将到来的考试做准备,并在一张纸上遇到了这个问题:
解释为什么在使用 A* 进行图搜索时,采用启发式方法来保证发现最优路径是不够的。
我一直在思考这个问题并试图解释它,但我无法解决这个问题?我在这里看过其他类似的 Q,但他们谈论的是可接纳性如何保证最优性。
A* 最优性的基本证明依赖于以下事实:
假设我们有两个目标状态 G 和 G2,其中 f(G) = f* 是最优解,G2 是次优解。
n 是 G 的直接祖先,因此必须在 G 之前扩展。
从可接纳性我们知道,无论 f(n) 是什么,它都必须 <= f*。
然而,如果我们选择在 n 之前扩展 G2,这意味着 f(G2) <= f(n),因此 f(G2) <= f*。
这与前面的说法相矛盾,即 f(G2) 是次优的,因此 f(G2) > f*。
S
/ \
n G2
/
G
对我来说,这个证明完全依赖于可接纳性,而一致性确实对其没有影响。虽然证明依赖于 f(G) 大于 f(n),这是由一致性提供的,但在这种情况下,可接纳性也提供了它?因为除非启发式高估了距离,否则 f(n) 不可能大于 f(G)?
解决方案
他们错了。可接纳性是 A* 找到最优路径的必要条件和充分条件。
作者可能很困惑,因为运行时最优性(即快速运行的算法)需要一致的启发式。
推荐阅读
- php - Symfony - 如果结束日期为空,则 Doctrine 过滤日期
- xml - ADF 中源数据的大小限制
- r - glmnet 在使用预测时产生错误
- python - 为什么 LinearRegression() 预测的结果是荒谬的?
- c# - ASP.NET MVC单元测试WEB API Post方法:Request.RequestUri抛出异常
- kubernetes - Kubernetes weave how to create pod with network that uses bridge as network?
- sql - 在 postgresql ubuntu 中找不到数据库文件
- entity-framework-core - AutoMapper - 将源对象映射为目标对象中的属性
- javascript - Angular 中的路由服务
- git - 打开拉取请求但如何应用公关提交?