2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2018-11-16 postGISでのワーシャルフロイド法の使い方

■ワーシャルフロイド法の使い方
 
Floydのアルゴリズムとも呼ばれるFloyd-Warshallアルゴリズムは、密集グラフのグラフのノードの各ペアの最短経路のコストの合計を計算するのに適しています。
 
主な特徴は次のとおりです。
 
・パスを返しません。
・グラフ内のノードの各ペアに対する最短経路のコストの合計を返します。
・プロセスは肯定的なコストのエッジでのみ実行されます。
・Boostは、V×V行列を返します。ここで、無限大の値です。 パスがない頂点間の距離を表します。
・無限大以外の値のみを(start_vid、end_vid、agg_cost)のセットの形で返します。
・戻り値がテーブルに格納されている場合は、一意のインデックスは(start_vid、end_vid)のペアになります。
・無向グラフの場合、結果は対称です。
・(u、v)のagg_costは(v、u)と同じです。
・start_vid = end_vidのとき、agg_cost = 0。
・推奨されているのは、3500エッジ以下のバウンディングボックスを使用することです。
 
-----
 
SELECT * FROM pgr_floydWarshall('SELECT gid, source, target, cost FROM ways where gid = 10' );
 
 start_vid | end_vid |       agg_cost
-----------+---------+-----------------------
        95 |      23 |   0.00093223435894817
        23 |      95 |   0.00093223435894817
      4506 |       1 |  0.000788520466807583
         1 |    4506 |  0.000788520466807583
      3221 |       2 | 2.70185121784218e-005
         2 |    3221 | 2.70185121784218e-005
      1724 |       3 |   0.00037710190931161
         3 |    1724 |   0.00037710190931161
       196 |       4 |   0.00036557605227385
       196 |    1800 |   0.00100402907325107
         4 |     196 |   0.00036557605227385
         4 |    1800 |  0.000638453020977218
      1800 |     196 |   0.00100402907325107
      1800 |       4 |  0.000638453020977218
      4099 |       5 |   0.00030819351844984
         5 |    4099 |   0.00030819351844984
      1458 |       6 |  0.000280440956354741
      1458 |    2417 |   0.00131019044532306
         6 |    1458 |  0.000280440956354741
         6 |    2417 |   0.00102974948896831
      2417 |    1458 |   0.00131019044532306
      2417 |       6 |   0.00102974948896831
(22 行)
 
感想 
  何やっているのか、さっぱり分からん
 
 
 
SELECT * FROM pgr_floydWarshall('SELECT gid, source, target, cost FROM ways')  WHERE start_vid = 9 and end_vid = 24;
 
 
 start_vid | end_vid |     agg_cost
-----------+---------+-------------------
         9 |      24 | 0.180760172336233
 
なんか出てきたが、酷く時間がかかった。