2

空間最適化を行っています。「所有者」が最適な状況に向かう可能性がある〜20 000個のセルがあります。細胞は大きさや形が異なります。私がしなければならないタスクは、地元の近所の所有者間の線の長さを計算することです。(これは、セルの新しい所有者を決定する方法の 1 つのオプションにすぎません。)

私は3つのマトリックスを持っています。1 番目には、Line_id、Left_cell_neighbour、right_cell_neighbour、length_of_line を表す列があります。Line は、セルの境界線の 1 つです。2 つのセルの間は、1 行だけではありません。

      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 番目には、Cell_id、Neightbour_cell_1_id、Neighbour_cell_2_id などを表す列があります。隣接セルの数はセルによって異なりますが、すべて隣接セルが 10 未満です。-1 は、空きスペースを埋めるためのものです。それが助けになるなら、私はそれをNAにチャンスを与えることができます.

      Cell_Id N_1_Id N_2_Id N_3_Id N_4_Id N_5_Id N_6_Id N_7_Id N_8_Id   
[1,]        1     31      6      2     -1     -1     -1     -1     -1
[2,]        2      1     67      7      3     -1     -1     -1     -1
[3,]        3      2     43      8      4      7      6     -1     -1
[4,]        4      3      9     75     -1     -1     -1     -1     -1
[5,]        5     44     11      6     -1     -1     -1     -1     -1

3 番目には、Cell_id、Owner、および変数を表す列があります。

     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 に 1 人、セル 4 に 1 人、セル 2 に 1 人、セル 3 と 5 に 1 人の、4 人の異なる所有者がいます。

次に、長さが列にある行列を取得できるはずです: Owner, length_of_borderline. 次に、max(length_of_borderline) に対応する所有者を新しい所有者として選択します。

しかし、これを効率的に計算するにはどうすればよいでしょうか。このタスクの効率的な構造などの他の提案は大歓迎です。

ご協力いただきありがとうございます!

画像のリンク (うまくいくといいのですが) http://imageshack.us/photo/my-images/641/situationn.png/

更新: 行列の例。

4

1 に答える 1

0

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

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

別の例のビデオを次に示します。

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

GNU Scientific Library には、このためのツール セットがあります。

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

R のバインディングが利用可能です。

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

于 2012-05-25T13:43:30.167 に答える