Todos los Pares - Familia de Funciones¶
Las siguientes funciones funcionan en todas las combinaciones de pares de vértices
pgr_floydWarshall - Algoritmo de Floyd-Warshall.
pgr_johnson - Algoritmo de Johnson
Introducción¶
Las principales características son:
No devuelve una ruta.
Regresa la suma de los costos de la ruta más corta para cada par de nodos del grafo.
El proceso se realiza sólo en aristas con costos positivos.
Boost devuelve una matriz \(V \times V\) donde los valores infinitos representan la distancia entre vértices para los que no hay ruta.
Solo regresa los valores no infinitos en forma de un conjunto de (start_vid, end_vid, agg_cost).
Sea el caso donde los valores devueltos se almacenan en una tabla, por lo que el índice único sería el par: (start_vid, end_vid).
Para el grafo no dirigido, los resultados son simétricos.
El agg_cost de (u, v) es el mismo que para (v, u).
Cuando start_vid = end_vid, el agg_cost = 0.
Recomendación: utilice un cuadro delimitador de no más de 3500 aristas.
Parámetros¶
Parámetro |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
SQL de aristas descritas más adelante. |
Parámetros opcionales¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
|
|
|
Consultas Internas¶
SQL aristas¶
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ENTEROS |
Identificador del primer vértice de la arista. |
|
|
ENTEROS |
Identificador del segundo vértice de la arista. |
|
|
FLOTANTES |
Peso de la arista ( |
|
|
FLOTANTES |
-1 |
Peso de la arista (
|
Donde:
- ENTEROS:
SMALLINT
,INTEGER
,BIGINT
- FLOTANTES:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
Columnas de resultados¶
Conjunto de (start_vid, end_vid, agg_cost)
Columna |
Tipo |
Descripción |
---|---|---|
|
|
Identificador del vértice de salida. |
|
|
Identificador del vértice final. |
|
|
Costo afregado desde |
Rendimiento¶
- Las siguientes pruebas:
computadora que no sea servidor
con unidad de procesamiento central AMD 64
memoria 4G
confiable
postgreSQL versión 9.3
Datos¶
Se usaron los siguientes datos
BBOX="-122.8,45.4,-122.5,45.6" wget --progress=dot:mega -O "sampledata.osm" "https://www.overpass-api.de/api/xapi?*[bbox=][@meta]"
El procesamiento de datos se llevó a cabo con osm2pgrouting-alpha
createdb portland
psql -c "create extension postgis" portland
psql -c "create extension pgrouting" portland
osm2pgrouting -f sampledata.osm -d portland -s 0
Resultados¶
- Prueba:
Uno
Esta prueba no se hace con cuadro delimitador. La densidad del gráfico que se pasa es extremadamente baja. Para cada <SIZE> se ejecutaron 30 pruebas para obtener el medio. La consulta probada es:
SELECT count(*) FROM pgr_floydWarshall(
'SELECT gid as id, source, target, cost, reverse_cost
FROM ways where id <= <SIZE>');
SELECT count(*) FROM pgr_johnson(
'SELECT gid as id, source, target, cost, reverse_cost
FROM ways where id <= <SIZE>');
Los resultados de la prueba son:
- TAMAÑO:
es la cantidad de aristas dadas como entradas.
- ARISTAS:
es el número de registros en la consulta.
- DENSIDAD:
es la densidad de los datos \(\dfrac{E}{V \times (V-1)}\).
- REGISTROS DEVUELTOS:
es el número de registros devueltos por las consultas.
- Floyd-Warshall:
es el tiempo promedio de ejecución en segundos de pgr_floydWarshall.
- Johnson:
es el tiempo promedio de ejecución en segundos de pgr_johnson.
TAMAÑO |
ARISTAS |
DENSIDAD |
REGISTROS DEVUELTOS |
Floyd-Warshall |
Johnson |
---|---|---|---|---|---|
500 |
500 |
0.18E-7 |
1346 |
0.14 |
0.13 |
1000 |
1000 |
0.36E-7 |
2655 |
0.23 |
0.18 |
1500 |
1500 |
0.55E-7 |
4110 |
0.37 |
0.34 |
2000 |
2000 |
0.73E-7 |
5676 |
0.56 |
0.37 |
2500 |
2500 |
0.89E-7 |
7177 |
0.84 |
0.51 |
3000 |
3000 |
1.07E-7 |
8778 |
1.28 |
0.68 |
3500 |
3500 |
1.24E-7 |
10526 |
2.08 |
0.95 |
4000 |
4000 |
1.41E-7 |
12484 |
3.16 |
1.24 |
4500 |
4500 |
1.58E-7 |
14354 |
4.49 |
1.47 |
5000 |
5000 |
1.76E-7 |
16503 |
6.05 |
1.78 |
5500 |
5500 |
1.93E-7 |
18623 |
7.53 |
2.03 |
6000 |
6000 |
2.11E-7 |
20710 |
8.47 |
2.37 |
6500 |
6500 |
2.28E-7 |
22752 |
9.99 |
2.68 |
7000 |
7000 |
2.46E-7 |
24687 |
11.82 |
3.12 |
7500 |
7500 |
2.64E-7 |
26861 |
13.94 |
3.60 |
8000 |
8000 |
2.83E-7 |
29050 |
15.61 |
4.09 |
8500 |
8500 |
3.01E-7 |
31693 |
17.43 |
4.63 |
9000 |
9000 |
3.17E-7 |
33879 |
19.19 |
5.34 |
9500 |
9500 |
3.35E-7 |
36287 |
20.77 |
6.24 |
10000 |
10000 |
3.52E-7 |
38491 |
23.26 |
6.51 |
- Prueba:
Dos
Esta prueba se hace con cuadro delimitador. La densidad del gráfico que se pasa es superior a la de la prueba 1. Para cada <SIZE> se ejecutaron 30 pruebas para obtener el medio. La consulta de arista que se prueba es:
WITH
buffer AS (
SELECT ST_Buffer(ST_Centroid(ST_Extent(the_geom)), SIZE) AS geom
FROM ways),
bbox AS (
SELECT ST_Envelope(ST_Extent(geom)) as box FROM buffer)
SELECT gid as id, source, target, cost, reverse_cost
FROM ways where the_geom && (SELECT box from bbox);
Las consultas probadas
SELECT count(*) FROM pgr_floydWarshall(<edge query>)
SELECT count(*) FROM pgr_johnson(<edge query>)
Los resultados de la prueba son:
- TAMAÑO:
es el tamaño del cuadro delimitador.
- ARISTAS:
es el número de registros en la consulta.
- DENSIDAD:
es la densidad de los datos \(\dfrac{E}{V \times (V-1)}\).
- REGISTROS DEVUELTOS:
es el número de registros devueltos por las consultas.
- Floyd-Warshall:
es el tiempo promedio de ejecución en segundos de pgr_floydWarshall.
- Johnson:
es el tiempo promedio de ejecución en segundos de pgr_johnson.
TAMAÑO |
ARISTAS |
DENSIDAD |
REGISTROS DEVUELTOS |
Floyd-Warshall |
Johnson |
---|---|---|---|---|---|
0.001 |
44 |
0.0608 |
1197 |
0.10 |
0.10 |
0.002 |
99 |
0.0251 |
4330 |
0.10 |
0.10 |
0.003 |
223 |
0.0122 |
18849 |
0.12 |
0.12 |
0.004 |
358 |
0.0085 |
71834 |
0.16 |
0.16 |
0.005 |
470 |
0.0070 |
116290 |
0.22 |
0.19 |
0.006 |
639 |
0.0055 |
207030 |
0.37 |
0.27 |
0.007 |
843 |
0.0043 |
346930 |
0.64 |
0.38 |
0.008 |
996 |
0.0037 |
469936 |
0.90 |
0.49 |
0.009 |
1146 |
0.0032 |
613135 |
1.26 |
0.62 |
0.010 |
1360 |
0.0027 |
849304 |
1.87 |
0.82 |
0.011 |
1573 |
0.0024 |
1147101 |
2.65 |
1.04 |
0.012 |
1789 |
0.0021 |
1483629 |
3.72 |
1.35 |
0.013 |
1975 |
0.0019 |
1846897 |
4.86 |
1.68 |
0.014 |
2281 |
0.0017 |
2438298 |
7.08 |
2.28 |
0.015 |
2588 |
0.0015 |
3156007 |
10.28 |
2.80 |
0.016 |
2958 |
0.0013 |
4090618 |
14.67 |
3.76 |
0.017 |
3247 |
0.0012 |
4868919 |
18.12 |
4.48 |
Ver también¶
Índices y tablas