2012-01-03 179 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的「定義」部分定義的距離總和。您的目標函數的論點是