2012-01-03 212 views
15

我正在构建一个应用程序,基于找到一组“位置便利的聚会点”。找到距离地点最小总距离的点的算法

目前我将“方便”定义为“最小化总行程距离”。这是从寻找通过以下实施例所示的矩心(使用直角坐标系,而不是纬度和经度为方便起见)不同的问题:

  • A是(0,0)
  • B是在(0 ,0)
  • C是在(0,12)

最小总行程的这些点的位置是(0,0)与12的总行驶距离;质心位于(0,4),总行程距离为16(4 + 4 + 8)。

如果位置仅限于其中一个点,问题似乎变得更简单,但这不是我想要的约束(例如,与this otherwise similar question不同)。

我似乎无法做到的是想出任何类型的算法来解决这个问题 - 建议欢迎请!

+0

您喜欢用哪种语言来实现您的解决方案? – paislee 2012-01-03 21:11:17

+0

Python的将是理想的,但我会采取相当多的东西,是不是APL/INTERCAL或类似 – 2012-01-03 22:28:17

回答

11

下面是找到地理中点,然后迭代地探索附近的位置,以调整向最小总距离点的溶液。

http://www.geomidpoint.com/calculation.html

这个问题也颇为相似,

Minimum Sum of All Travel Times

这里是对一般问题维基百科文章你正在试图解决:

http://en.wikipedia.org/wiki/Geometric_median

+0

这个问题,大多数的答案,涉及“位置的点之一”,我不想约束;但是你链接的解决办法似乎可行,感谢 – 2012-01-03 20:49:47

+0

@KristianGlass - 退房的维基百科文章,它不考虑约束,并且它提到的第一个链接是一种常用的解决方案的方法。 – hatchet 2012-01-03 20:53:03

+0

啊,非常好,非常感谢 – 2012-01-03 20:56:14

3

以某种方式,您似乎寻找的是顶点处的权重相等的三角形的质心。这将指向重心坐标。

当超越三角形时,存在广义重心坐标的解,您可以通过修改顶点的权重给予人优先级。那些仍然无法解释的是真实地图上的距离(不能直接向任何方向行进),但它可能是一个开始?

1

一种选择是定义一个客观(和渐变)函数并使用一个生成器ic优化库,如scipy.optimizefmin_cg将是一个很好的算法来尝试解决您的问题。你的目标将是在短文中引用的Geometric median Wikipedia page的“定义”部分定义的距离总和。您的目标函数的论点是