Experimental
Warning
Possible server crash
Warning
Experimental functions
The main characteristics are:
pgr_maxFlow is the maximum Flow and that maximum is guaranteed to be the same on the functions pgr_pushRelabel, pgr_edmondsKarp, pgr_boykovKolmogorov, but the actual flow through each edge may vary.
Column | Type | Default | Description |
---|---|---|---|
Edges SQL | TEXT |
The edges SQL query as described in Inner Query. | |
source | BIGINT |
Identifier of the starting vertex of the flow. | |
sources | ARRAY[BIGINT] |
Array of identifiers of the starting vertices of the flow. | |
target | BIGINT |
Identifier of the ending vertex of the flow. | |
targets | ARRAY[BIGINT] |
Array of identifiers of the ending vertices of the flow. |
For pgr_pushRelabel, pgr_edmondsKarp, pgr_boykovKolmogorov :
Edges SQL: | an SQL query of a directed graph of capacities, which should return a set of rows with the following columns: |
---|
Column | Type | Default | Description |
---|---|---|---|
id | ANY-INTEGER |
Identifier of the edge. | |
source | ANY-INTEGER |
Identifier of the first end point vertex of the edge. | |
target | ANY-INTEGER |
Identifier of the second end point vertex of the edge. | |
capacity | ANY-INTEGER |
Weight of the edge (source, target)
|
|
reverse_capacity | ANY-INTEGER |
-1 | Weight of the edge (target, source),
|
Where:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|
For pgr_maxFlowMinCost - Experimental and pgr_maxFlowMinCost_Cost - Experimental:
Edges SQL: | an SQL query of a directed graph of capacities, which should return a set of rows with the following columns: |
---|
Column | Type | Default | Description |
---|---|---|---|
id | ANY-INTEGER |
Identifier of the edge. | |
source | ANY-INTEGER |
Identifier of the first end point vertex of the edge. | |
target | ANY-INTEGER |
Identifier of the second end point vertex of the edge. | |
capacity | ANY-INTEGER |
Capacity of the edge (source, target)
|
|
reverse_capacity | ANY-INTEGER |
-1 | Capacity of the edge (target, source),
|
cost | ANY-NUMERICAL |
Weight of the edge (source, target) if it exists. | |
reverse_cost | ANY-NUMERICAL |
0 | Weight of the edge (target, source) if it exists. |
Where:
ANY-INTEGER: | SMALLINT, INTEGER, BIGINT |
---|---|
ANY-NUMERICAL: | smallint, int, bigint, real, float |
For pgr_pushRelabel, pgr_edmondsKarp, pgr_boykovKolmogorov :
Column | Type | Description |
---|---|---|
seq | INT |
Sequential value starting from 1. |
edge | BIGINT |
Identifier of the edge in the original query(edges_sql). |
start_vid | BIGINT |
Identifier of the first end point vertex of the edge. |
end_vid | BIGINT |
Identifier of the second end point vertex of the edge. |
flow | BIGINT |
Flow through the edge in the direction (start_vid , end_vid ). |
residual_capacity | BIGINT |
Residual capacity of the edge in the direction (start_vid , end_vid ). |
For pgr_maxFlowMinCost - Experimental
Column | Type | Description |
---|---|---|
seq | INT |
Sequential value starting from 1. |
edge | BIGINT |
Identifier of the edge in the original query(edges_sql). |
source | BIGINT |
Identifier of the first end point vertex of the edge. |
target | BIGINT |
Identifier of the second end point vertex of the edge. |
flow | BIGINT |
Flow through the edge in the direction (source, target). |
residual_capacity | BIGINT |
Residual capacity of the edge in the direction (source, target). |
cost | FLOAT |
The cost of sending this flow through the edge in the direction (source, target). |
agg_cost | FLOAT |
The aggregate cost. |
A flow network is a directed graph where each edge has a capacity and a flow. The flow through an edge must not exceed the capacity of the edge. Additionally, the incoming and outgoing flow of a node must be equal except for source which only has outgoing flow, and the destination(sink) which only has incoming flow.
Maximum flow algorithms calculate the maximum flow through the graph and the flow of each edge.
The maximum flow through the graph is guaranteed to be the same with all implementations, but the actual flow through each edge may vary. Given the following query:
pgr_maxFlow \((edges\_sql, source\_vertex, sink\_vertex)\)
where \(edges\_sql = \{(id_i, source_i, target_i, capacity_i, reverse\_capacity_i)\}\)
Graph definition
The weighted directed graph, \(G(V,E)\), is defined as:
Maximum flow problem
Given:
Then:
Where:
\(\boldsymbol{\Phi}\) is a subset of the original edges with their residual capacity and flow. The maximum flow through the graph can be obtained by aggregating on the source or sink and summing the flow from/to it. In particular: