可以对AnyTime加权A *算法进行哪些改进?

时间:2011-05-03 15:57:44

标签: a-star graph-algorithm anytime

首先,对于那些不知道的人 - 任何时候算法都是一种算法,它可以获得它可以运行的时间量作为输入,它应该在那个时候提供最好的解决方案。

加权A *与A *相同,f函数中有一个差异:

(其中g是节点的路径成本,h是到达目标的路径末端的启发式算法)

Original = f(node) = g(node) + h(node)

Weighted = f(node) = (1-w)g(node) +h(node)

我的随时算法运行加权A *,权重从1到0.5,直到达到时间限制。

我的问题是,大多数时候,它需要很长时间才能达到一个解决方案,并且如果给出10秒之类的东西,它就会找不到解决方案,而其他算法如任何时候波束在0.0001秒内找到一个。

任何想法该怎么办?

2 个答案:

答案 0 :(得分:2)

如果我是你,我会抛弃无界的启发式。对于您找到的解决方案的权重值,可接受的启发式方法要好得多,您可以说它是最佳解决方案长度的1倍/重量倍。

实现A *派生词时的一个大问题是数据结构。当我实现双向搜索时,只需根据需要从数组列表更改为散列扩充优先级队列和数组列表的组合,从而将运行时成本降低三个数量级。

主要问题是大多数论文仅使用集合逻辑为算法提供伪代码 - 由您自己决定如何在代码中表示集合。不要害怕在单个列表中使用多个ADT,即打开列表。我对Anytime Weighted A *不是100%肯定,我已经完成了其他衍生产品,例如Anytime Dynamic A *和Anytime Repairing A *,而不是AWA *。

另一个问题是,当您将g值设置得太低时,有时可能需要更长时间才能找到任何解决方案,如果它的g值更高。一个常见的陷阱是忘记检查关闭列表中的重复状态,从而最终得到(无限,如果你的g值减少到0)循环。如果您通过光束搜索获得快速结果,我会尝试从合理地高于0的东西开始。

有些伪代码可能会对此有所帮助!无论如何,这些只是我对此事的想法,你可能已经解决了 - 如果对你这么好的话:)

答案 1 :(得分:0)

光束搜索未完成,因为它修剪了不利的状态,而A *搜索完成。根据您正在解决的问题,如果不完整性不会阻止您找到解决方案(通常从原点到目的地存在许多正确的路径),则转到Beam搜索,否则,请继续使用AWA *。但是,如果有足够的硬件资源,您可以始终并行运行。