Flow - Familia de funciones¶
pgr_maxFlow - Solo el flujo máximo se calcula usando el algoritmo empuja y reetiquetado.
pgr_boykovKolmogorov - Algoritmo Boykov y Kolmogorov con detalles del flujo en aristas.
pgr_edmondsKarp - Algoritmo Edmonds y Karp con detalles de flujo del flujo en aristas.
pgr_pushRelabel - Algoritmo empuja y reetiquetado con detalles del flujo en aristas.
Aplicaciones
pgr_edgeDisjointPaths - Calcula rutas de aristas disjuntas entre dos grupos de vértices.
pgr_maxCardinalityMatch - Calcular una cardinalidad máxima de coincidencia dentro de un grafo.
Experimental
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
pgr_maxFlowMinCost - Experimental - Detalles del flujo y el coste en los bordes.
pgr_maxFlowMinCost_Cost - Experimental - Solo el cálculo del Coste Mínimo.
Información General de las Funciones de Flujo¶
Las principales características son:
El grafo es dirigido.
El proceso se realiza sólo en aristas con capacidades positivas.
Cuando el flujo máximo es 0 entonces no hay flujo, se devolverá: EMPTY SET.
No hay flujo cuando el origen tiene el mismo valor que el destino.
Los valores duplicados en origen o destino se ignoran.
Calcula la capacidad de flujo/residuo para cada arista. En la salida
Se omiten las aristas con flujo cero.
Crea
una super fuente y aristas desde ella a todas las fuentes,
un super objetivo y aristas desde él a todos los objetivos.
Se garantiza que el flujo máximo a través del grafo es el valor devuelto por pgr_maxFlow cuando es ejecutado con los mismos parámetros y se puede calcular:
Mediante la suma de los flujos salientes de las fuentes
Mediante la suma de los flujos llegantes a los destinos
pgr_maxFlow es el flujo máximo y este máximo tiene garantía de ser el mismo en las funciones pgr_pushRelabel, pgr_edmondsKarp, pgr_boykovKolmogorov, pero el flujo actual para cada arista puede variar.
Consultas Internas¶
SQL aristas¶
Aristas de capacidad
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ENTEROS |
Identificador de la arista. |
|
|
ENTEROS |
Identificador del primer vértice de la arista. |
|
|
ENTEROS |
Identificador del segundo vértice de la arista. |
|
|
ENTEROS |
Peso de la arista ( |
|
|
ENTEROS |
-1 |
Peso de la arista (
|
Donde:
- ENTEROS:
SMALLINT
,INTEGER
,BIGINT
- FLOTANTES:
SMALLINT
,INTEGER
,BIGINT
,REAL
,FLOAT
Aristas Capacidad-Costo
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ENTEROS |
Identificador de la arista. |
|
|
ENTEROS |
Identificador del primer vértice de la arista. |
|
|
ENTEROS |
Identificador del segundo vértice de la arista. |
|
|
ENTEROS |
Capacidad de la arista (
|
|
|
ENTEROS |
-1 |
Capacidad 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
Aristas de costo
Columna |
Tipo |
x Defecto |
Descripción |
---|---|---|---|
|
ENTEROS |
Identificador de la arista. |
|
|
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
SQL Combinaciones¶
Parámetro |
Tipo |
Descripción |
---|---|---|
|
ENTEROS |
Identificador del vértice de partida. |
|
ENTEROS |
Identificador del vértice de llegada. |
Donde:
- ENTEROS:
SMALLINT
,INTEGER
,BIGINT
Columnas de resultados¶
Usado en
Columna |
Tipo |
Descripción |
---|---|---|
seq |
|
Valor secuencial a partir de 1. |
arista |
|
Identificador de la arista en la consulta original(edges_sql). |
start_vid |
|
Identificador del primer vértice de la arista. |
end_vid |
|
Identificador del segundo vértice de la arista. |
flujo |
|
Flujo a través del arista en la dirección ( |
residual_capacity |
|
Capacidad residual del arista en la dirección ( |
Para pgr_maxFlowMinCost - Experimental
Columna |
Tipo |
Descripción |
---|---|---|
seq |
|
Valor secuencial a partir de 1. |
arista |
|
Identificador de la arista en la consulta original(edges_sql). |
origen |
|
Identificador del primer vértice de la arista. |
objetivo |
|
Identificador del segundo vértice de la arista. |
flujo |
|
Flujo a través de la arista en la dirección (origen, destino). |
residual_capacity |
|
Capacidad residual de la arista en la dirección (origen, destino). |
costo |
|
El costo de enviar este flujo a través de la arista en la dirección (origen, destino). |
agg_cost |
|
El costo agregado. |
Documentación Avanzada¶
Una red de flujo es un gráfico dirigido donde cada arista tiene una capacidad y un flujo. El flujo a través de una arista no debe exceder la capacidad de la misma. Además, el flujo entrante y saliente de un nodo debe ser igual, excepto para el origen que solo tiene flujo saliente, y el destino (receptor) que solo tiene flujo entrante.
Los algoritmos de Flujo Máximo se calculan a través del grafo del flujo máximo y el flujo de cada arista.
Se garantiza que el flujo máximo a través del grafo sea el mismo con todas las implementaciones, pero el flujo real a través de cada arista puede variar.
Dada la siguiente consulta:
pgr_maxFlow \((edges\_sql, source\_vertex, sink\_vertex)\)
donde: \(edges\_sql = \{(id_i, source_i, target_i, capacity_i, reverse\_capacity_i)\}\)
Definición de grafo
El grafo ponderado dirigido, \(G(V,E)\), se define como:
Conjunto de vértices \(V\)
\(source\_vertex \cup sink\_vertex \bigcup source_i \bigcuptarget_i\)
El conjunto de aristas \(E\)
\(E = \begin{cases} \text{ } \{(source_i, target_i, capacity_i) \text{ when } capacity > 0 \} & \quad \text{ if } reverse\_capacity = \varnothing \\ \text{ } & \quad \text{ } \\ \{(source_i, target_i, capacity_i) \text{ when } capacity > 0 \} & \text{ } \\ \cup \{(target_i, source_i, reverse\_capacity_i) \text{ when } reverse\_capacity_i > 0)\} & \quad \text{ if } reverse\_capacity \neq \varnothing \\ \end{cases}\)
Problema de Flujo Máximo
Dado:
\(G(V,E)\)
\(source\_vertex \in V\) el vértice de origen
\(sink\_vertex \in V\) el vértice pozo
Entonces:
\(pgr\_maxFlow(edges\_sql, source, sink) = \boldsymbol{\Phi}\)
\(\boldsymbol{\Phi} = {(id_i, edge\_id_i, source_i, target_i, flow_i, residual\_capacity_i)}\)
Donde:
\(\boldsymbol{\Phi}\) es un subconjunto de las aristas originales con su flujo y capacidad residual. El flujo máximo a través del grafo se puede obtener agregando en el origen o sumidero y sumiendo el flujo hacia él. En particular:
\(id_i = i\)
\(edge\_id = id_i\) en edges_sql
\(residual\_capacity_i = capacity_i - flow_i\)
Ver también¶
Índices y tablas