Supported versions:
pgr_pushRelabel¶
pgr_pushRelabel
— Calcula el flujo en los bordes del grafo que maximiza el flujo de los orígenes a los destinos mediante el Algoritmo Push Relabel.
Disponibilidad
Versión 3.2.0
Nueva función propuesta:
pgr_pushRelabel(Combinaciones)
Versión 3.0.0
Función oficial
Versión 2.5.0
Renombrado de
pgr_maxFlowPushRelabel
Función propuesta
Versión 2.3.0
Nueva función Experimental
Descripción¶
Las características principales 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 ningún flujo cuando el orígen es el mismo que el destino.
Cualquier valor duplicado en el/los orígen(es) o en el/los destino(s) será ignorado.
Calcula la capacidad de flujo/residuo para cada arista. En la salida
Se omiten las aristas con flujo cero.
Crea una súper origen, con aristas para todos los orígenes, y un súper destino con aristas para todos los destinos.
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 agregación del flujo saliente de los orígenes
Mediante la agregación del flujo entrante a los destinos
Tiempo de ejecución: \(O( V ^ 3)\)
Firmas¶
Resumen
pgr_pushRelabel(Edges SQL, source, target)
pgr_pushRelabel(Edges SQL, sources, target)
pgr_pushRelabel(Edges SQL, source, targets)
pgr_pushRelabel(Edges SQL, sources, targets)
pgr_pushRelabel(Edges SQL, Combinations SQL) -- Proposed on v3.2
RETURNS SET OF (seq, edge, start_vid, end_vid, flow, residual_capacity)
OR EMPTY SET
Uno a Uno¶
pgr_pushRelabel(Edges SQL, source, target)
RETURNS SET OF (seq, edge, start_vid, end_vid, flow, residual_capacity)
OR EMPTY SET
- Ejemplo
Del vértice \(6\) al vértice \(11\)
SELECT * FROM pgr_pushRelabel(
'SELECT id,
source,
target,
capacity,
reverse_capacity
FROM edge_table'
, 6, 11
);
seq | edge | start_vid | end_vid | flow | residual_capacity
-----+------+-----------+---------+------+-------------------
1 | 10 | 5 | 10 | 100 | 30
2 | 8 | 6 | 5 | 100 | 30
3 | 11 | 6 | 11 | 130 | 0
4 | 12 | 10 | 11 | 100 | 0
(4 rows)
Uno a Muchos¶
Calcula el flujo en los bordes del gráfico que maximiza el flujo desde el origen a todos los objetivos.
pgr_pushRelabel(Edges SQL, source, targets)
RETURNS SET OF (seq, edge, start_vid, end_vid, flow, residual_capacity)
OR EMPTY SET
- Ejemplo
Del vértice \(6\) a los vértices \(\{11, 1, 13\}\)
SELECT * FROM pgr_pushRelabel(
'SELECT id,
source,
target,
capacity,
reverse_capacity
FROM edge_table'
, 6, ARRAY[11, 1, 13]
);
seq | edge | start_vid | end_vid | flow | residual_capacity
-----+------+-----------+---------+------+-------------------
1 | 1 | 2 | 1 | 130 | 0
2 | 2 | 3 | 2 | 80 | 20
3 | 3 | 4 | 3 | 80 | 50
4 | 4 | 5 | 2 | 50 | 0
5 | 7 | 5 | 8 | 50 | 80
6 | 10 | 5 | 10 | 80 | 50
7 | 8 | 6 | 5 | 130 | 0
8 | 9 | 6 | 9 | 80 | 50
9 | 11 | 6 | 11 | 130 | 0
10 | 6 | 7 | 8 | 50 | 0
11 | 6 | 8 | 7 | 50 | 50
12 | 7 | 8 | 5 | 50 | 0
13 | 16 | 9 | 4 | 80 | 0
14 | 12 | 10 | 11 | 80 | 20
(14 rows)
Muchos a Uno¶
pgr_pushRelabel(Edges SQL, sources, target)
RETURNS SET OF (seq, edge, start_vid, end_vid, flow, residual_capacity)
OR EMPTY SET
- Ejemplo
De los vértices vertices \(\{6, 8, 12\}\) al vértice \(11\)
SELECT * FROM pgr_pushRelabel(
'SELECT id,
source,
target,
capacity,
reverse_capacity
FROM edge_table'
, ARRAY[6, 8, 12], 11
);
seq | edge | start_vid | end_vid | flow | residual_capacity
-----+------+-----------+---------+------+-------------------
1 | 10 | 5 | 10 | 100 | 30
2 | 8 | 6 | 5 | 100 | 30
3 | 11 | 6 | 11 | 130 | 0
4 | 12 | 10 | 11 | 100 | 0
(4 rows)
Muchos a Muchos¶
pgr_pushRelabel(Edges SQL, sources, targets)
RETURNS SET OF (seq, edge, start_vid, end_vid, flow, residual_capacity)
OR EMPTY SET
- Ejemplo
De los vértices \(\{6, 8, 12\}\) a los vértices \(\{1, 3, 11\}\)
SELECT * FROM pgr_pushRelabel(
'SELECT id,
source,
target,
capacity,
reverse_capacity
FROM edge_table'
, ARRAY[6, 8, 12], ARRAY[1, 3, 11]
);
seq | edge | start_vid | end_vid | flow | residual_capacity
-----+------+-----------+---------+------+-------------------
1 | 1 | 2 | 1 | 50 | 80
2 | 3 | 4 | 3 | 80 | 50
3 | 4 | 5 | 2 | 50 | 0
4 | 10 | 5 | 10 | 100 | 30
5 | 8 | 6 | 5 | 130 | 0
6 | 9 | 6 | 9 | 30 | 100
7 | 11 | 6 | 11 | 130 | 0
8 | 7 | 8 | 5 | 20 | 30
9 | 16 | 9 | 4 | 80 | 0
10 | 12 | 10 | 11 | 100 | 0
11 | 15 | 12 | 9 | 50 | 0
(11 rows)
Combinaciones¶
pgr_pushRelabel(Edges SQL, Combinations SQL)
RETURNS SET OF (seq, edge, start_vid, end_vid, flow, residual_capacity)
OR EMPTY SET
- Ejemplo
Usando una tabla de combinaciones, equivalente a calcular el resultado de los vértices \(\{6, 8, 12\}\) a los vértices \(\{1, 3, 11\}\).
SELECT * FROM pgr_pushRelabel(
'SELECT id,
source,
target,
capacity,
reverse_capacity
FROM edge_table',
'SELECT * FROM ( VALUES (6, 1), (8, 3), (12, 11), (8, 1) ) AS t(source, target)'
);
seq | edge | start_vid | end_vid | flow | residual_capacity
-----+------+-----------+---------+------+-------------------
1 | 1 | 2 | 1 | 50 | 80
2 | 3 | 4 | 3 | 80 | 50
3 | 4 | 5 | 2 | 50 | 0
4 | 10 | 5 | 10 | 100 | 30
5 | 8 | 6 | 5 | 130 | 0
6 | 9 | 6 | 9 | 30 | 100
7 | 11 | 6 | 11 | 130 | 0
8 | 7 | 8 | 5 | 20 | 30
9 | 16 | 9 | 4 | 80 | 0
10 | 12 | 10 | 11 | 100 | 0
11 | 15 | 12 | 9 | 50 | 0
(11 rows)
Parámetros¶
Columna |
Tipo |
Valores predeterminados |
Descripción |
---|---|---|---|
Edges SQL |
|
Consulta de bordes como se describe en Consultas internas. |
|
Combinaciones SQL |
|
Consultas de combinaciones como se describe en Consultas internas. |
|
origen |
|
Identificador del vértice inicial del flujo. |
|
orígenes |
|
Conjunto de identificadores de los vértices iniciales del flujo. |
|
objetivo |
|
Identificador del vértice final del flujo. |
|
destinos |
|
Conjunto de identificadores de los vértices finales del flujo. |
Consultas internas¶
- Edges SQL
Consulta SQL de un grafo dirigido de capacidades, que debe devolver un conjunto de filas con las siguientes columnas:
Columna |
Tipo |
Valores predeterminados |
Descripción |
---|---|---|---|
id |
|
Identificador de la arista. |
|
origen |
|
Identificador del primer punto final en el vértice de la arista. |
|
objetivo |
|
Identificador del segundo punto final en el vértice de la arista. |
|
capacidad |
|
Peso de la arista (source, target)
|
|
reverse_capacity (capacidad inversa) |
|
-1 |
Peso de la arista (target, source),
|
Donde:
- ANY-INTEGER
SMALLINT, INTEGER, BIGINT
- Combinaciones SQL
una consulta SQL que debe devolver un conjunto de filas con las siguientes columnas:
Columna |
Tipo |
Valores predeterminados |
Descripción |
---|---|---|---|
origen |
|
Identificador del primer punto final en el vértice de la arista. |
|
objetivo |
|
Identificador del segundo punto final en el vértice de la arista. |
Donde:
- ANY-INTEGER
SMALLINT, INTEGER, BIGINT
La función agrega los orígenes y los destinos, quita los duplicados y, a continuación, calcula el resultado de los vértices de origen resultantes a los vértices de destino.
Columnas de Resultados¶
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 punto final en el vértice de la arista. |
end_vid |
|
Identificador del segundo punto final en el vértice de la arista. |
flujo |
|
Flujo a través del arista en la dirección ( |
residual_capacity (capacidad residual) |
|
Capacidad residual del arista en la dirección ( |
Ver también¶
Flow - Familia de funciones., pgr_boykovKolmogorov, pgr_edmondsKarp
https://www.boost.org/libs/graph/doc/push_relabel_max_flow.html
https://en.wikipedia.org/wiki/Push%E2%80%93relabel_maximum_flow_algorithm
Índices y tablas