使用D *,D * -Lite或此类中的任何增量算法时,都有一个很大的警告(值得注意的是,该警告在文献中很少提及)。这些类型的算法使用反向搜索。也就是说,它们从目标节点向外计算成本,就像向外扩散的涟漪一样。当边缘的成本发生变化(例如,在示例中添加或移除墙)时,它们都有各种有效的策略,仅用于更新受更改影响的已探查(也称为“已访问”)节点的子集。
最大的警告是,这些变化相对于目标位置的位置对算法的效率产生了巨大的影响。我在各种论文和论文中都表明,这些增量算法中最坏的情况下,完全有可能比丢掉所有信息并重新以非增量形式(如普通的旧A *)重新开始更糟糕。
当更改的成本信息接近扩展的搜索范围(“访问”区域)的边界时,几乎不需要更改任何路径,并且增量更新很快。一个相关的例子是一个移动机器人,其身体上装有传感器。传感器仅看到机器人附近的世界,因此变化在该区域中。该区域是搜索的起点,而不是目标,因此一切工作都很好,算法在更新最佳路径以纠正更改方面非常有效。
当更改的成本信息接近搜索目标时(或者您的方案看到了目标更改位置,而不仅仅是开始),这些算法将遭受灾难性的减速。在这种情况下,几乎所有保存的信息都需要更新,因为更改的区域非常接近目标,几乎所有预先计算的路径都通过更改,因此必须重新评估。由于存储额外信息和进行增量更新的计算会产生开销,因此在这种规模上进行重新评估要比重新开始要慢。
由于您的示例场景似乎使用户可以移动他们想要的任何墙,因此,如果您使用D *,D * -Lite,LPA *等,则将遭受此问题。算法的时间性能将是可变的,具体取决于用户输入。一般来说,“这是一件坏事” ...
例如,CMU的Alonzo Kelly小组有一个名为PerceptOR的出色程序,该程序试图将地面机器人与空中机器人相结合,所有这些机器人都实时共享感知信息。当他们尝试使用直升机为地面车辆的计划系统提供实时成本更新时,他们遇到了这个问题,因为直升机可以在地面车辆之前飞行,看到成本变化接近目标,从而减慢了速度降低他们的算法。他们讨论了这个有趣的发现吗?最终,他们设法做到的最好的办法是使直升机直接在地面车辆上方飞行,这使其成为世界上最昂贵的传感器桅杆。当然,我很小气。但这是一个大问题,没人愿意谈论-他们应该,
很少有论文讨论这一问题,大部分是由我自己撰写的。在本问题列出的原始论文的作者或作者的学生所写的论文中,我只能想到实际上提到这一问题的论文。Likhachev和Ferguson建议尝试估算所需的更新规模,如果估算的增量更新花费的时间比重新开始要长,则刷新存储的信息。这是一个非常明智的解决方法,但也有其他解决方法。我的博士针对广泛的计算问题推广了一种类似的方法,并且超出了此问题的范围,但是您可能会发现参考文献有用,因为它对大多数这些算法以及更多算法进行了全面概述。参见http://db.acfr.usyd.edu.au/download.php/Allen2011_Thesis.pdf?id=2364 有关详细信息。