web-dev-qa-db-ja.com

場所からの最小合計距離のポイントを見つけるためのアルゴリズム

私は、一連の場所を指定して「便利な待ち合わせ場所」を見つけることに基づいてアプリケーションを構築しています。

現在、私は「便利」を「総移動距離を最小化する」と定義しています。これは、次の例に示すように図心を見つけることとは別の問題です(便宜上、緯度と経度ではなくデカルト座標を使用します)。

  • Aは(0,0)にあります
  • Bは(0,0)にあります
  • Cは(0,12)にあります

これらのポイントの最小総移動距離の位置は(0,0)で、総移動距離は12です。重心は(0,4)にあり、総移動距離は16(4 + 4 + 8)です。

場所がいずれかのポイントに限定されている場合、問題はより単純になりますが、これは私が意図している制約ではありません(たとえば、 他の点では同様の質問 とは異なります)。

私ができないように思われるのは、これを解決するためのあらゆる種類のアルゴリズムを考え出すことです-提案を歓迎します!

16
Kristian Glass

これは、地理的な中点を見つけてから、近くの位置を繰り返し探索して、最小の合計距離点に向けて調整するソリューションです。

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

この質問も非常に似ています

すべての移動時間の最小合計

これはあなたが解決しようとしている一般的な問題に関するウィキペディアの記事です:

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

ある意味で、探しているように見えるのは、頂点に等しい重みを持つ三角形の重心です。これは、重心座標を指します。

三角形を超える場合、一般化された重心座標のソリューションがあり、頂点の重みを変更することで人に優先順位を付けることができます。それでもまだ考慮されていないのは、実際の地図上の距離です(どの方向にもまっすぐ進むことはできません)が、それは始まりかもしれませんか?

3
Chris

1つのオプションは、目的(および勾配)関数を定義し、 scipy.optimize などの一般的な最適化ライブラリを使用することです。 fmin_cgはあなたの問題を試すための良いアルゴリズムでしょう。あなたの目的は、手斧によって参照される 幾何中央値ウィキペディアページ の「定義」セクションで定義されている距離の合計になります。目的関数の引数はyです。

1
jrennie