だから、私は包装センターA
を持っています。そして、n
ポイントがA
に点在しています。それらを私と呼びましょう1、 私2 ... 私ん。
D
と呼ばれる最大距離のしきい値があります。
私の仕事は、これらのn
ポイントを最大m
のポイントのグループに分割することです。各グループはm
ポイントを超えることはできません。つまり、A
から始まり、特定のグループに属するすべてのポイントに行く人は、最適な距離を移動します。
たとえば、A-> i1 ->私4 ->私10 -> A <= D
上で説明したのはTSP問題です。現在、私が行ったことは、K-meansアルゴリズムを使用してそれらをクラスターに分割し、各グループがm
ポイントを超えないように手動でそれらをより多くのグループに分割することです。
この問題へのより良いアプローチはありますか?
要するに、私は次のようなクラスタリングアルゴリズムを探しています。
https://en.wikipedia.org/wiki/K-means_clustering
これは大規模な研究分野です。つまり、セントロイドを使用するかmedoidsのみを使用するかを定義すると、アルゴリズムの複雑さが変わります。簡単な答えは、文書化された多くの方法があるということです。データがなければ、正しく意見を述べることは困難です。 MATLABまたは無料のOctaveで作成されたグラフから始めることができれば、適切な同様のアプローチが見つかるかもしれません。
オクターブは無料で、k-meansアルゴリズムが含まれています。
コンテキストのアプリケーション例が必要な場合、Kurzweilの最新の書籍「How To Create a Mind」が彼の音声認識クラスタリングについて説明したことを思い出します。
別の形式のクラスタリングを試すこともできます: 凝集型階層クラスタリング 。
具体的には、凝集型階層的クラスタリングは、独自のクラスター内の各観測から始まります。その後、階層を上に移動すると、クラスターのペアがマージされます。
このクラスタリングアルゴリズムは、次の要件によく適合します。
各クラスターは特定のポイント数を超えることはできません
また、K平均クラスタリングはK
(またはクラスターの数)の事前知識(または漠然とした考え)を必要としますが、階層型クラスターリングでは入力としてクラスターの数を必要としません。
すべての主要なML /科学ソフトウェアは、階層的クラスタリングを実装しています(例:Octave linkage function 、Mathematica Agglomerate
function 、SciKit AgglomerativeClustering
object ...)。
たぶん見てください https://en.wikipedia.org/wiki/Travelling_salesman_problem あなたが考慮したいと思うかもしれないいくつかのアルゴリズムを与えます。私はおそらく最近傍(NN)アルゴリズム(欲張りアルゴリズム)を選び、いくつかの異なる開始点をランダムに選択します。それを投げるd波がない場合はそうです。