A*算法中启发式函数的加权

三个AI新手问题:

  1. 为什么启发式函数必须是可接受的,以便A*找到最优路径?
  2. 如果有障碍物,采用平局打破技术有什么好处?
  3. 在有障碍物的网格上寻找路径的算法有哪些?(例如吃豆人游戏)

关于第一个问题 我们以曼哈顿距离启发式函数为基础,称之为h(x)。现在如果我们使用一个新的启发式函数8*h(x) + 5(随机数字),为什么A*会找到非最优路径呢?据我所知,在A*算法中,决策是根据函数f(x) = g(x) + h(x)做出的,所以如果我放大h(x),为什么最大值和最小值会改变呢?

我读了这篇文章,文中提到为了平局打破,可以乘以一个小因子,这对我的理论有一定帮助,但他们强调这个因子必须很小。所以我对这点感到困惑。

关于第二个问题 我尝试在吃豆人游戏中使用链接中的技术。任何对曼哈顿距离启发式函数的改变都导致扩展了更多的节点。我甚至“发明”了一种新的加权方案,优先选择外壳上的路径,结果还是一样。后来我尝试取所有函数的最大值(这也应该是可接受的),但性能仍然很差。我错过了什么?

关于第三个问题没有更多要补充的。如前所述,我找不到比曼哈顿距离更好的方法了。


回答:

问题3:

如果你真的在制作吃豆人游戏,需要为每一个“幽灵”找到路径,你也可以使用Dijkstra算法,以吃豆人的位置作为目标,一次性计算出每个幽灵的最佳路径。由于每个“边”(从一个单元格移动到另一个单元格)的成本总是相同的,你也可以简单地使用广度优先搜索。最后,你还可以看看协作扩散,让每个幽灵走不同的路线。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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