pgr_turnRestrictedPath - Experimental

pgr_turnRestrictedPath Using Yen’s algorithm Vertex -Vertex routing with restrictions

Advertencia

Posible bloqueo del servidor

  • Estas funciones pueden crear una caída del servidor

Advertencia

Funciones experimentales

  • No son oficialmente de la versión actual.

  • Es probable que oficialmente no formen parte de la siguiente versión:

    • Las funciones no podrían hacer uso de ANY-INTEGER ni ANY-NUMERICAL

    • El nombre puede cambiar.

    • La firma puede cambiar.

    • La funcionalidad puede cambiar.

    • Las pruebas de pgTap pueden faltar.

    • Posiblemente necesite codificación c/c++.

    • Puede carecer documentación.

    • Hay documentación que, en dado caso, podría ser necesario reescribir.

    • Puede ser necesario que los ejemplos de documentación se generen automáticamente.

    • Puede ser necesaria retroalimentación por parte de la comunidad.

    • Puede depender de una función propuesta de pgRouting

    • Podría depender de una función obsoleta de pgRouting

Disponibilidad

  • Versión 3.0.0

    • Nueva función Experimental

Descripción

Using Yen’s algorithm to obtain K shortest paths and analyze the paths to select the paths that do not use the restrictions

Firmas

pgr_turnRestrictedPath(SQL de aristas, SQL de restricciones, salida, destino, K, [opciones])
opciones: [directed, heap_paths, stop_on_first, strict]
RETURNS SET OF (seq, path_id, path_seq, node, edge, cost, agg_cost)
OR EMPTY SET
Ejemplo:

From vertex \(3\) to vertex \(8\) on a directed graph

SELECT * FROM pgr_turnRestrictedPath(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT path, cost FROM restrictions$$,
  3, 8, 3);
 seq | path_id | path_seq | node | edge | cost | agg_cost
-----+---------+----------+------+------+------+----------
   1 |       1 |        1 |    3 |    7 |    1 | Infinity
   2 |       1 |        2 |    7 |   10 |    1 |        1
   3 |       1 |        3 |    8 |   -1 |    0 |        2
(3 rows)

Parámetros

Columna

Tipo

Descripción

SQL de aristas

TEXT

Consulta SQL como se describe.

salida

ENTEROS

Identificador del vértice de salida.

destino

ENTEROS

Identificador del vértice de llegada.

K

ENTEROS

Number of required paths.

Donde:

ENTEROS:

SMALLINT, INTEGER, BIGINT

Parámetros opcionales

Columna

Tipo

x Defecto

Descripción

directed

BOOLEAN

true

  • Cuando true el gráfo se considera Dirigido

  • Cuando false el gráfo se considera No Dirigido.

Parámetros opcionales de KSP

Columna

Tipo

x Defecto

Descripción

heap_paths

BOOLEAN

false

  • When false Returns at most K paths.

  • Cuando true se regresan todos los caminos calulados mientras se procesa.

  • Aproximadamente, si la ruta más corta tiene N aristas, las procesadas contendrán aproximadamente N * K rutas para valores pequeños de K y K > 5.

Special optional parameters

Columna

Tipo

x Defecto

Descripción

stop_on_first

BOOLEAN

true

  • When true stops on first path found that dos not violate restrictions

  • When false returns at most K paths

strict

BOOLEAN

false

  • When true returns only paths that do not violate restrictions

  • When false returns the paths found

Consultas Internas

SQL aristas

Columna

Tipo

x Defecto

Descripción

id

ENTEROS

Identificador de la arista.

source

ENTEROS

Identificador del primer vértice de la arista.

target

ENTEROS

Identificador del segundo vértice de la arista.

cost

FLOTANTES

Peso de la arista (source, target)

reverse_cost

FLOTANTES

-1

Peso de la arista (target, source)

  • Cuando negativo: la arista (target, source) no existe, por lo tanto no es parte del grafo.

Donde:

ENTEROS:

SMALLINT, INTEGER, BIGINT

FLOTANTES:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

SQL restricciones

Columna

Tipo

Descripción

path

ARRAY [ENTEROS]

Secuencia de identificadores de aristas que forman un camino que no se permite tomar. - Arreglos vacios o NULL son ignorados. - Arreglos que tienen NULL arrojan una excepción.

Cost

FLOTANTES

Costo de tomar el camino prohibido.

Donde:

ENTEROS:

SMALLINT, INTEGER, BIGINT

FLOTANTES:

SMALLINT, INTEGER, BIGINT, REAL, FLOAT

Columnas de Resultados

Devuelve el conjunto de (seq, path_id, path_seq, start_vid, end_vid, node, edge, cost, agg_cost)

Columna

Tipo

Descripción

seq

INTEGER

Valor secuencial a partir de 1.

path_id

INTEGER

Identificador del camino.

  • Tiene valor 1 para el primero de la ruta de start_vid a end_vid.

path_seq

INTEGER

Posición relativa en la ruta. Tiene el valor 1 para el inicio de una ruta.

start_vid

BIGINT

Identificador del vértice de salida.

end_vid

BIGINT

Identificador del vértice destino.

node

BIGINT

Identificador del nodo en la ruta de start_vid a end_vid.

edge

BIGINT

Identificador de la arista utilizado para ir del node al siguiente nodo de la secuencia de ruta. -1 para el último nodo de la ruta.

cost

FLOAT

Costo para atravesar desde node usando edge hasta el siguiente nodo en la secuencia de la ruta.

agg_cost

FLOAT

Costo agregado desde start_vid hasta node.

Ejemplos Adicionales

Ejemplo:

From vertex \(3\) to \(8\) with strict flag on.

No results because the only path available follows a restriction.

SELECT * FROM pgr_turnRestrictedPath(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT path, cost FROM restrictions$$,
  3, 8, 3,
  strict => true);
 seq | path_id | path_seq | node | edge | cost | agg_cost
-----+---------+----------+------+------+------+----------
(0 rows)

Ejemplo:

From vertex \(3\) to vertex \(8\) on an undirected graph

SELECT * FROM pgr_turnRestrictedPath(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT path, cost FROM restrictions$$,
  3, 8, 3,
  directed => false);
 seq | path_id | path_seq | node | edge | cost | agg_cost
-----+---------+----------+------+------+------+----------
   1 |       1 |        1 |    3 |    7 |    1 |        0
   2 |       1 |        2 |    7 |    4 |    1 |        1
   3 |       1 |        3 |    6 |    2 |    1 |        2
   4 |       1 |        4 |   10 |    5 |    1 |        3
   5 |       1 |        5 |   11 |   11 |    1 |        4
   6 |       1 |        6 |   12 |   12 |    1 |        5
   7 |       1 |        7 |    8 |   -1 |    0 |        6
(7 rows)

Ejemplo:

From vertex \(3\) to vertex \(8\) with more alternatives

SELECT * FROM pgr_turnRestrictedPath(
  $$SELECT id, source, target, cost, reverse_cost FROM edges$$,
  $$SELECT path, cost FROM restrictions$$,
  3, 8, 3,
  directed => false,
  heap_paths => true,
  stop_on_first => false);
 seq | path_id | path_seq | node | edge | cost | agg_cost
-----+---------+----------+------+------+------+----------
   1 |       1 |        1 |    3 |    7 |    1 |        0
   2 |       1 |        2 |    7 |    4 |    1 |        1
   3 |       1 |        3 |    6 |    2 |    1 |        2
   4 |       1 |        4 |   10 |    5 |    1 |        3
   5 |       1 |        5 |   11 |   11 |    1 |        4
   6 |       1 |        6 |   12 |   12 |    1 |        5
   7 |       1 |        7 |    8 |   -1 |    0 |        6
   8 |       2 |        1 |    3 |    7 |    1 |        0
   9 |       2 |        2 |    7 |    8 |    1 |        1
  10 |       2 |        3 |   11 |    9 |    1 |        2
  11 |       2 |        4 |   16 |   15 |    1 |        3
  12 |       2 |        5 |   17 |   13 |    1 |        4
  13 |       2 |        6 |   12 |   12 |    1 |        5
  14 |       2 |        7 |    8 |   -1 |    0 |        6
(14 rows)

Ver también

Índices y tablas