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

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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