A*算法在启发式函数总是低估时的最优性证明

我明白为什么A*算法在启发式函数总是低估的情况下总是能找到通往目标状态的最优路径,但我无法为此创建一个正式的证明。

据我所知,随着路径的深入,f(n)的准确性会不断增加,直到达到目标状态时达到100%的准确性。此外,由于估算是低于实际成本的,因此不会忽略任何错误的路径,从而导致最优路径的产生。但是,我应该如何为此创建一个证明呢?


回答:

证明的主要思想是,当A*找到一条路径时,它找到了一条估算值低于任何其他可能路径估算值的路径。由于估算是乐观的,其他路径可以安全地被忽略。

此外,A*只有在满足两个条件时才是最优的:

  1. 启发式函数是可接受的,因为它永远不会高估成本。

  2. 启发式函数是单调的,即,如果h(ni) < h(ni + 1),那么real-cost(ni) < real-cost(ni + 1)


你可以通过假设相反的情况,并扩展其含义来证明最优性是正确的。

假设A*给出的路径在可接受且单调的启发式函数下不是最优的,并思考这在含义上意味着什么(你很快就会发现自己达到了矛盾),因此,你的原始假设被归结为荒谬。

由此你可以得出结论,你的原始假设是错误的,即,在上述条件下,A*是最优的。Q.E.D.

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注