2012-02-09 5 views
2

私は空間最適化を行っています。私は〜20 000細胞を持っている "所有者"の最適な状況に向かってチャンス。細胞の大きさと形はさまざまです。私がしなければならない仕事は、地元の近所の所有者間の行の長さを計算することです。 (これは、セルの新しい所有者を決定する方法の1つです)R:異なる "所有者"間のセル境界の長さを最も効率的に計算する方法は?

私は3つの行列を持っています。 番号1には、Line_id、Left_cell_neighbour、right_cell_neighbour、length_of_lineを表す列があります。線はセルの境界線の1つです。 2つのセルの間には、1つのライン以上のものがあります。その上CELL_ID、Neightbour_cell_1_id、Neighbour_cell_2_id ...と:

 Line_ID LEFT_ID RIGHT_ID  Lenght 
[1,]  1  5   1 31.648135 
[2,]  2  15   2 38.229177 
[3,]  3  9  65 2.707813 
[4,]  4  5   4 2.139000 
[5,]  5  1  1279 1.660400 
[6,]  6  6   1 25.000000 

ナンバー2には示して列があります。ネイバーの数はセルによって異なりますが、すべてのネイバーセルは10未満です。 -1は、空のスペースを埋めるためだけです。それが役に立ったら、私はNAにそれを偶然することができます。

3番は、Cell_id、所有者および変数を表す列を持ちます。

 Cell_Id Owner Variable_1 Variable_2 Variable_3 
[1,] 1  22  1.77579  565  399 
[2,] 2  22 284.08909  427  228 
[3,] 3  22 367.90390  464  269 
[4,] 4  22  0.01670  231   67 
[5,] 5  22  33.89463  241   73 
[6,] 6  22 422.15516  620  481 

異なる所有者の隣人の間の線の長さを約半分の反復で計算する必要があります。反復の回数は膨大になるので、計算は速くなければなりません。

このメッセージにリンクされている画像の例を示します。 疑問符でマークされたセルの所有者は、セルとの共通の境界線のほとんどを既に持つものになります。異なる所有者が異なる色で表示されます。このセルの所有者は、セル3と5を所有するセルと同じであることがわかります。

長さを計算する線は赤で表示されます。ネイバー(この状況では)には、セル1、セル4、セル2、セル3と5の4つの異なる所有者がいます。

次に、長さは列:Owner、lenght_of_borderlineにあります。次に、新しい所有者になるようにmax(lenght_of_borderline)に対応する所有者を選択します。

しかし、これを効率的にどのように計算するのですか?この作業の効率的な構造などの他の提案は歓迎します。

ありがとうございました!画像について

リンク(私はそれが動作を期待)http://imageshack.us/photo/my-images/641/situationn.png/

更新:マトリックスの例。

+4

あなたがサンプルデータを作成するためのコードを提供する場合は、より多くの注目を集める可能性があります。 –

+0

私はサンプルデータを追加しました。私の実際のデータの頭()です。 – user1199996

答えて

0

この問題を効率的に解決するには、シミュレーテッドアニーリングを使用できる必要があります。ここで

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

別の例のビデオです。

http://www.youtube.com/watch?v=-cr6wbZOqOU

GNU科学ライブラリは、このためのツールセットがあります。

http://www.gnu.org/software/gsl/manual/html_node/Traveling-Salesman-Problem.html

可能なRのバインディングがあります。

http://cran.r-project.org/web/packages/gsl/index.html

関連する問題