【发布时间】:2016-07-04 06:40:21
【问题描述】:
这个问题与this one 相关,它来自于在一组点上优化路径。这里的情况如下: 一个对象在一条由二维点列表组成的指定路径上移动。 (更多的 D 是可能的,但是由于每个转弯在技术上是 2D 的,所以求解二维就可以了。)在每个点,这个对象可以通过一个最大长度是预先确定的向量来改变它的速度(分配给一个点)。路径尽头的速度无关紧要。问题是,如何确定走这条路的最短时间?这个任务有没有有效的算法?贪心算法最终可以在特殊准备数据的情况下使对象减速到爬行,甚至不能使对象能够转向其下一个指定点。后向贪心算法也存在同样的错误,以最大速度到达终点并不总是好的。
一个例子:点向量是:{(0,0), (0,1), (1,1), (2,2)},最大长度向量是{2.0, 2.0, 3.0}。例如,该点在(0,sqrt(2)) 从 p1 移动到 p2,然后在 (sqrt(2),0) 从 p2 移动到 p3,并且 (s,s) 以 s 从 p3 到 p4 的任何最大速度移动。这可能是一个次优的解决方案,假设您从 p1 到 p2 减速 0.01,允许从 p2 到 p3 稍微加速,然后在 p3 到 p4 再加速一点,总时间可能少于这个一组速度。
【问题讨论】:
-
你怎么知道 3D 中的一般转弯实际上是 2D?半螺旋等呢?
-
@willywonkadailyblah 此任务不关心循环,并且任何单个转弯都可以通过使用包含所有三个点以及上一个、当前和下一个点之间的两条线的 2D 平面来解释为 2D .所以在这里使用两个以上的维度是没有意义的,而确切的扩展任务可以根据需要使用尽可能多的维度。
-
我不是指循环,我指的是不能表示为平面曲线的转弯形状,例如螺旋的一部分
-
@willywonkadailyblah 我有你,只是路径的形状与任务无关,对象仍然需要访问路径中的所有点,即使它的起点就在旁边完成。
-
计算每个段的最大可行速度并不难,最小可行速度总是 > 0。看起来准确地找出这些界限之间的最佳速度非常困难,但是在一个小误差范围内获得数值近似是可行的。
标签: algorithm language-agnostic mathematical-optimization