最短的旅行路线

时间:2011-11-08 15:32:07

标签: algorithm optimization shortest-path

给定连接线段A-> B-> C-> D(A-> B是线段,然后B-> C是另一个,依此类推),如何找到最小成本从A-> D出发,给出以下选项?

  1. 您可以按照行段进行旅行,费用为$ 1 / unit_distance
  2. 您可以从任何线段上的某个点'跳转'到某个其他线段上的某个其他点,这需要花费$ 2 / unit_distance覆盖在'jump'中,然后再次选择选项#1和选项#2 for剩下的旅程。
  3. 线段是2D中的线条。

    例如假设你需要从(0,0) - >(2,2) - >(2,-2)旅行。有很多选择可以做到这一点。我在下面列出3:

    1. 如果您完全遵循选项#1,则成本为2√2(从(0,0)到(2,2))+ 4(从(2,2)到(2,-2))
    2. 如果从(0,0)跳到(2,-2),所覆盖的距离为2√2,因此成本为4√2(跳跃时为2美元/单位)。
    3. 但是,如果从(0,0)跳到(2,-1)然后按照从(2,-1)到(2,-2)的选项#1,会产生更好的最低成本2√5(用于跳转)+ 1(用于以下选项#1)。
    4. 线段数可能会有所不同。我正在考虑为此制定一些LPP,但无法继续进行。有人可以帮我找到这些问题的最小值吗?

1 个答案:

答案 0 :(得分:0)

我不认为LPP可以直接用于解决问题,因为距离是非线性的,即如果您用作任何线段上任何点P的距离度量,则线段之间的距离为A然后,“跳跃”距离函数测量从距离x从A点移动到距离A'的另一点P'从A跳过“跳跃”的成本,比如Hop(x,x'), x和x'都是非线性的,因为欧氏距离度量是非线性的。

但是,我们首先假设只有两个段(即路径是A-B-C)。跳的唯一可能模式是从段A-B跳到段B-C,因为在单个段内跳跃是没有意义的。设三个点在坐标A =(ax,ay),B =(bx,by)和C =(cx,cy)。然后考虑段A-B上的点P和段B-C上的点P',使得P与A的距离为d,并且P'与B的距离为d'。从P到P'到段的距离是

d' + AB - d

其中AB是从A到B的(恒定)距离,通过跳跃是

2 * sqrt((x - x')^2 + (y - y')^2)

,其中

x =  ax + d  * (bx - ax) / AB
y =  ay + d  * (by - ay) / AB
x' = bx + d' * (cx - bx) / BC
y' = bx + d' * (cy - by) / BC

其中BC是从B到C的距离。

两个距离之间的差异是

2 * sqrt((x - x') (x - x') + (y - y') (y - y')) - d' + AB + d

并且我确信它可以通过任何标准技术解决本地最小值。最小值代表那些对(P,P'),其中跳过跟随段的好处不能得到改善,并且基于问题的几何形状我真的期望只有有限数量的这样的最小值对

同样的方法可以用在路径上的任意两个段上,因为没有使用段连接的事实,因此以这种方式可以构建具有有限分支的等效网络(如其中一个建议的那样)上面的评论),然后使用简单的路径寻找算法来计算最优结果。