【发布时间】:2016-11-04 11:05:39
【问题描述】:
这只是我自己想出来的,但这似乎是一个有趣的问题,让我很难过。
您在二维空间中有一组点,一个点指定为“开始”,一个点指定为“结束”。每个点都有坐标(以米为单位从原点开始),还有一个“加速度数”(以米/秒为单位的 delta-V)。到达某个点(包括起点)后,您可以在任何方向上加速到该点的加速度数。边缘成本取决于您当前的速度,但您也必须朝着正确的方向前进。
是否有一种有效的算法可以找到到达终点的最快路径?我没有想出比“尝试每条路径并检查结果”更好的方法。 Djikstra 和其他简单算法不起作用,因为如果它们让您以不同的初始速度到达中间点,您不能轻易地说一条通往中间点的路径比另一条更好或更差。
如果这太简单了,如果您添加必须在终点停止的要求怎么办? (即到达终点时,你的加速度必须小于它的加速度值。)
编辑:要清楚,方向很重要。您在遍历图形时保持一个速度矢量,加速度意味着向它添加一个矢量,其大小以该点的加速度数为上限。这意味着在某些情况下,建立巨大的速度是有害的,因为您将太快而无法“引导”到其他有价值的点/您的目的地。
【问题讨论】:
-
您必须提供更多详细信息。您的“加速”概念将如何发挥作用?它是否通过“加速数”减少了路径上的所有边缘成本?如果你积累的“加速数”远远超出边缘成本怎么办?引入诸如“加速度”之类的概念表明,引入相应的摩擦/阻力概念可能会很好,否则您最终可能会得到“不受控制的速度”。到目前为止,我认为您的问题还不够清楚,我们无法制定适当的解决方案,但我认为这很有趣吗。
-
我怀疑这个问题是否有分析解决方案。我将首先解决一个更简单的问题:以给定顺序获取点的最快路线。 (那个搜索空间的维数等于中间点的数量,我看不出比退火更好的方法。)一旦你有了这个方法,你就可以创建一个修改后的 Dijkstra。
-
@lightalchemist “加速度”是指“速度变化”。 (所以,边缘成本 = 欧几里得距离/速度,但只有在您朝正确的方向行驶时才允许......所以)未经检查的速度很好(这意味着是一个数学难题,而不是模拟......虽然我做了最初设想它用于航天器拾取燃料缓存,因此摩擦仍然不是问题。)
-
如果只能实现有限数量的不同可能加速度矢量,那么这与我在这里解决的 Vector Racetrack 游戏非常相似:stackoverflow.com/a/6598303/47984。简而言之,您可以使用 Dijkstra 解决它,但是在一个状态空间中,每个(位置、入口速度向量)组合都有一个顶点,而不仅仅是每个位置。
-
@j_random_hacker 我在想你会有无限可能的加速度向量,但我相信你可以把它分解成范围,范围内的每个点都比顶部的点差在那个范围内,所以你只需要考虑有限的很多。不过,它可能是一个非常大的有限数。
标签: algorithm math graph-theory shortest-path