我正在阅读关于A *搜索算法的变体,我遇到了动态加权。据我了解,权重应用于搜索方程,随着搜索越接近目标节点,权重会减小。我特意看了这篇文章:http://theory.stanford.edu/~amitp/GameProgramming/Variations.html
有谁能告诉我这有什么好处?为什么你不关心你在一开始扩展的节点?是否可以帮助那些不一定具有良好启发式的搜索?
谢谢
答案 0 :(得分:3)
动态加权会牺牲解决方案的最优性来加速搜索。重量越大,搜索越贪婪。
来自维基百科的A-star文章: A-star的可接受性标准保证了最佳解决方案路径,但这也意味着A *必须检查所有同样有价值的路径以找到最佳路径。我们可以通过放宽可接受性标准来获得近似解决方案,从而以牺牲最优性为代价来加速搜索。通常我们想要限制这种放松,这样我们就可以保证解决方案路径不会比最佳解决方案路径的(1 +ε)倍。这种新保证被称为ε-可接受。
在我们讨论动态加权之前,让我们将A-star与最简单的ε-允许放松进行比较:静态加权A-star。
在静态加权A星中,f(n)= g(n)+ w·h(n),对于某些ε> 0,w =(1 +ε)。为了说明对最优性和搜索速度的影响,请比较以下每个插图中展开的节点数。空心圆代表开放集中的节点;填充的圆圈位于关闭集中。
A-star(左)与加权A-star,ε= 4(右)
正如您所看到的,加权A-star扩展了更少的节点并且完成了大约3倍的速度。然而,由于我们使用ε= 4,加权A-star理论上可以返回一个解决方案,即(1 +ε)=(1 + 4)=最佳路径的5倍。
动态加权是一种使启发式权重成为搜索状态函数的技术,即f(n)= g(n)+ w(n)·h(n),其中w(n)=(1 + ε - (ε* d(n))/ N),d(n)是当前搜索的深度,N是搜索深度的上限。
通过这种方式,动态权重A-Star最初的行为与贪婪的最佳优先搜索非常相似,但随着搜索深度(即图中的跳数)的增加,算法采用了更为保守的方法,表现得很好更像是传统的A-star算法。
使用动态加权,您可以假设在您的开头 搜索,快速获得(任何地方)更重要;在......的最后 搜索,更重要的是达到目标。
他是正确的,但我会说,通过动态加权,你会认为在搜索开始时,遵循你的启发式更为重要;在搜索结束时,同样重要的是考虑路径的长度。