Class MinimumCostFlowAbstract
- java.lang.Object
-
- com.jgalgo.alg.flow.MinimumCostFlowAbstract
-
- All Implemented Interfaces:
MinimumCostFlow
- Direct Known Subclasses:
MinimumCostFlowAbstractBasedSourceSink
,MinimumCostFlowAbstractBasedSupply
public abstract class MinimumCostFlowAbstract extends Object implements MinimumCostFlow
Abstract class for computing minimum cost flow in a graph.The class implements the interface by solving the problem on the index graph and then maps the results back to the original graph. The implementation for index graphs is abstract and left to the subclasses.
- Author:
- Barak Ugav
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.jgalgo.alg.flow.MinimumCostFlow
MinimumCostFlow.Builder
-
-
Constructor Summary
Constructors Constructor Description MinimumCostFlowAbstract()
Default constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <V,E>
Flow<V,E>computeMinCostFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<E> lowerBound, WeightFunction<V> supply)
Compute the min-cost (not maximum!)<V,E>
Flow<V,E>computeMinCostFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<V> supply)
Compute the min-cost (not maximum!)<V,E>
Flow<V,E>computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<E> lowerBound, Collection<V> sources, Collection<V> sinks)
Compute the min-cost max-flow in a network between a set of sources and a set of sinks given a lower bound for the edges flows.<V,E>
Flow<V,E>computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<E> lowerBound, V source, V sink)
Compute the min-cost max-flow in a network between a source and a sink given a lower bound for the edges flows.<V,E>
Flow<V,E>computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, Collection<V> sources, Collection<V> sinks)
Compute the min-cost max-flow in a network between a set of sources and a set of sinks.<V,E>
Flow<V,E>computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, V source, V sink)
Compute the min-cost max-flow in a network between a source and a sink.
-
-
-
Method Detail
-
computeMinCostMaxFlow
public <V,E> Flow<V,E> computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, V source, V sink)
Description copied from interface:MinimumCostFlow
Compute the min-cost max-flow in a network between a source and a sink.Some algorithm might run faster for integer networks, and
WeightFunctionInt
can be passed as argument ascapacity
andcost
.If
g
is anIntGraph
, its better to pass aIWeightFunction
ascapacity
andcost
to avoid boxing/unboxing. Ifg
is anIntGraph
, the returned object isIFlow
.- Specified by:
computeMinCostMaxFlow
in interfaceMinimumCostFlow
- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- the graphcapacity
- a capacity edge weight functioncost
- an edge weight function representing the cost of each unit of flow along the edgesource
- a source vertexsink
- a sink vertex- Returns:
- the flows computed for each edge
-
computeMinCostMaxFlow
public <V,E> Flow<V,E> computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<E> lowerBound, V source, V sink)
Description copied from interface:MinimumCostFlow
Compute the min-cost max-flow in a network between a source and a sink given a lower bound for the edges flows.If
g
is anIntGraph
, its better to pass aIWeightFunction
ascapacity
,cost
andlowerBound
to avoid boxing/unboxing. Ifg
is anIntGraph
, the returned object isIFlow
.- Specified by:
computeMinCostMaxFlow
in interfaceMinimumCostFlow
- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- the graphcapacity
- a capacity edge weight functioncost
- an edge weight function representing the cost of each unit of flow along the edgelowerBound
- an edge weight function representing a lower bound for the flow along each edgesource
- a source vertexsink
- a sink vertex- Returns:
- the flows computed for each edge
-
computeMinCostMaxFlow
public <V,E> Flow<V,E> computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, Collection<V> sources, Collection<V> sinks)
Description copied from interface:MinimumCostFlow
Compute the min-cost max-flow in a network between a set of sources and a set of sinks.Some algorithm might run faster for integer networks, and
WeightFunctionInt
can be passed as argument ascapacity
andcost
.If
g
is anIntGraph
, its better to pass aIWeightFunction
ascapacity
andcost
, andIntCollection
assources
andsinks
to avoid boxing/unboxing. Ifg
is anIntGraph
, the returned object isIFlow
.- Specified by:
computeMinCostMaxFlow
in interfaceMinimumCostFlow
- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- the graphcapacity
- a capacity edge weight functioncost
- an edge weight function representing the cost of each unit of flow along the edgesources
- a set of source verticessinks
- a set of sinks vertices- Returns:
- the flows computed for each edge
-
computeMinCostMaxFlow
public <V,E> Flow<V,E> computeMinCostMaxFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<E> lowerBound, Collection<V> sources, Collection<V> sinks)
Description copied from interface:MinimumCostFlow
Compute the min-cost max-flow in a network between a set of sources and a set of sinks given a lower bound for the edges flows.Some algorithm might run faster for integer networks, and
WeightFunctionInt
can be passed as argument ascapacity
,cost
andlowerBound
.If
g
is anIntGraph
, its better to pass aIWeightFunction
ascapacity
,cost
andlowerBound
, andIntCollection
assources
andsinks
to avoid boxing/unboxing. Ifg
is anIntGraph
, the returned object isIFlow
.- Specified by:
computeMinCostMaxFlow
in interfaceMinimumCostFlow
- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- the graphcapacity
- a capacity edge weight functioncost
- an edge weight function representing the cost of each unit of flow along the edgelowerBound
- an edge weight function representing a lower bound for the flow along each edgesources
- a set of source verticessinks
- a set of sinks vertices- Returns:
- the flows computed for each edge
-
computeMinCostFlow
public <V,E> Flow<V,E> computeMinCostFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<V> supply)
Description copied from interface:MinimumCostFlow
Compute the min-cost (not maximum!) flow in a network given a supply for each vertex.The supply is a scalar for each vertex, and the objective is to find a minimum-cost flow satisfying the supply, namely that for each vertex the sum of flow units going out of the vertex minus the sum of flow units going into it is equal to its supply.
Some algorithm might run faster for integer networks, and
WeightFunctionInt
can be passed as argument ascapacity
,cost
andsupply
.If
g
is anIntGraph
, its better to pass aIWeightFunction
ascapacity
,cost
andsupply
to avoid boxing/unboxing. Ifg
is anIntGraph
, the returned object isIFlow
.- Specified by:
computeMinCostFlow
in interfaceMinimumCostFlow
- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- the graphcapacity
- a capacity edge weight functioncost
- an edge weight function representing the cost of each unit of flow along the edgesupply
- a vertex weight function representing the supply for each vertex- Returns:
- the flows computed for each edge
-
computeMinCostFlow
public <V,E> Flow<V,E> computeMinCostFlow(Graph<V,E> g, WeightFunction<E> capacity, WeightFunction<E> cost, WeightFunction<E> lowerBound, WeightFunction<V> supply)
Description copied from interface:MinimumCostFlow
Compute the min-cost (not maximum!) flow in a network given a supply for each vertex and a lower bound for the edges flows.The supply is a scalar for each vertex, and the objective is to find a minimum-cost flow satisfying the supply, namely that for each vertex the sum of flow units going out of the vertex minus the sum of flow units going into it is equal to its supply.
Some algorithm might run faster for integer networks, and
WeightFunctionInt
can be passed as argument ascapacity
,cost
,lowerBound
andsupply
.If
g
is anIntGraph
, its better to pass aIWeightFunction
ascapacity
,cost
,lowerBound
andsupply
to avoid boxing/unboxing. Ifg
is anIntGraph
, the returned object isIFlow
.- Specified by:
computeMinCostFlow
in interfaceMinimumCostFlow
- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- the graphcapacity
- a capacity edge weight functioncost
- an edge weight function representing the cost of each unit of flow along the edgelowerBound
- an edge weight function representing a lower bound for the flow along each edgesupply
- a vertex weight function representing the supply for each vertex- Returns:
- the flows computed for each edge
-
-