#include <lemon/network_simplex.h>
Graph | The directed graph type the algorithm runs on. | |
LowerMap | The type of the lower bound map. | |
CapacityMap | The type of the capacity (upper bound) map. | |
CostMap | The type of the cost (length) map. | |
SupplyMap | The type of the supply map. |
CostMap::Value
must be signed type.Public Types | |
enum | PivotRuleEnum |
Enum type to select the pivot rule used by run(). | |
typedef Graph::template EdgeMap< Capacity > | FlowMap |
The type of the flow map. | |
typedef Graph::template NodeMap< Cost > | PotentialMap |
The type of the potential map. | |
Public Member Functions | |
NetworkSimplex (const Graph &graph, const LowerMap &lower, const CapacityMap &capacity, const CostMap &cost, const SupplyMap &supply) | |
General constructor (with lower bounds). | |
NetworkSimplex (const Graph &graph, const CapacityMap &capacity, const CostMap &cost, const SupplyMap &supply) | |
General constructor (without lower bounds). | |
NetworkSimplex (const Graph &graph, const LowerMap &lower, const CapacityMap &capacity, const CostMap &cost, typename Graph::Node s, typename Graph::Node t, typename SupplyMap::Value flow_value) | |
Simple constructor (with lower bounds). | |
NetworkSimplex (const Graph &graph, const CapacityMap &capacity, const CostMap &cost, typename Graph::Node s, typename Graph::Node t, typename SupplyMap::Value flow_value) | |
Simple constructor (without lower bounds). | |
~NetworkSimplex () | |
Destructor. | |
NetworkSimplex & | flowMap (FlowMap &map) |
Sets the flow map. | |
NetworkSimplex & | potentialMap (PotentialMap &map) |
Sets the potential map. | |
Execution control | |
The only way to execute the algorithm is to call the run() function. | |
bool | run (PivotRuleEnum pivot_rule=COMBINED_PIVOT) |
Runs the algorithm. | |
Query Functions | |
The result of the algorithm can be obtained using these functions. run() must be called before using them. | |
const FlowMap & | flowMap () const |
Returns a const reference to the edge map storing the found flow. | |
const PotentialMap & | potentialMap () const |
Returns a const reference to the node map storing the found potentials (the dual solution). | |
Capacity | flow (const typename Graph::Edge &edge) const |
Returns the flow on the given edge. | |
Cost | potential (const typename Graph::Node &node) const |
Returns the potential of the given node. | |
Cost | totalCost () const |
Returns the total cost of the found flow. | |
Private Member Functions | |
bool | init () |
Extends the underlaying graph and initializes all the node and edge maps. | |
Node | findJoinNode () |
Finds the join node. | |
bool | findLeavingEdge () |
Finds the leaving edge of the cycle. Returns true if the leaving edge is not the same as the entering edge. | |
void | changeFlows (bool change) |
Changes flow and state edge maps. | |
void | updateThreadParent () |
Updates thread and parent node maps. | |
void | updatePredEdge () |
Updates pred_edge and forward node maps. | |
void | updateDepthPotential () |
Updates depth and potential node maps. | |
bool | start (PivotRuleEnum pivot_rule) |
Executes the algorithm. | |
Classes | |
class | BestEligiblePivotRule |
Implementation of the "Best Eligible" pivot rule for the network simplex algorithm. More... | |
class | BlockSearchPivotRule |
Implementation of the "Block Search" pivot rule for the network simplex algorithm. More... | |
class | CandidateListPivotRule |
Implementation of the "Candidate List" pivot rule for the network simplex algorithm. More... | |
class | FirstEligiblePivotRule |
Implementation of the "First Eligible" pivot rule for the network simplex algorithm. More... | |
class | LimitedSearchPivotRule |
Implementation of the "Limited Search" pivot rule for the network simplex algorithm. More... | |
class | ReducedCostMap |
Map adaptor class for handling reduced edge costs. More... |
NetworkSimplex | ( | const Graph & | graph, | |
const LowerMap & | lower, | |||
const CapacityMap & | capacity, | |||
const CostMap & | cost, | |||
const SupplyMap & | supply | |||
) | [inline] |
General constructor (with lower bounds).
graph | The directed graph the algorithm runs on. | |
lower | The lower bounds of the edges. | |
capacity | The capacities (upper bounds) of the edges. | |
cost | The cost (length) values of the edges. | |
supply | The supply values of the nodes (signed). |
NetworkSimplex | ( | const Graph & | graph, | |
const CapacityMap & | capacity, | |||
const CostMap & | cost, | |||
const SupplyMap & | supply | |||
) | [inline] |
General constructor (without lower bounds).
graph | The directed graph the algorithm runs on. | |
capacity | The capacities (upper bounds) of the edges. | |
cost | The cost (length) values of the edges. | |
supply | The supply values of the nodes (signed). |
NetworkSimplex | ( | const Graph & | graph, | |
const LowerMap & | lower, | |||
const CapacityMap & | capacity, | |||
const CostMap & | cost, | |||
typename Graph::Node | s, | |||
typename Graph::Node | t, | |||
typename SupplyMap::Value | flow_value | |||
) | [inline] |
Simple constructor (with lower bounds).
graph | The directed graph the algorithm runs on. | |
lower | The lower bounds of the edges. | |
capacity | The capacities (upper bounds) of the edges. | |
cost | The cost (length) values of the edges. | |
s | The source node. | |
t | The target node. | |
flow_value | The required amount of flow from node s to node t (i.e. the supply of s and the demand of t ). |
NetworkSimplex | ( | const Graph & | graph, | |
const CapacityMap & | capacity, | |||
const CostMap & | cost, | |||
typename Graph::Node | s, | |||
typename Graph::Node | t, | |||
typename SupplyMap::Value | flow_value | |||
) | [inline] |
Simple constructor (without lower bounds).
graph | The directed graph the algorithm runs on. | |
capacity | The capacities (upper bounds) of the edges. | |
cost | The cost (length) values of the edges. | |
s | The source node. | |
t | The target node. | |
flow_value | The required amount of flow from node s to node t (i.e. the supply of s and the demand of t ). |
NetworkSimplex& flowMap | ( | FlowMap & | map | ) | [inline] |
Sets the flow map.
(*this) NetworkSimplex& potentialMap | ( | PotentialMap & | map | ) | [inline] |
Sets the potential map.
(*this) bool run | ( | PivotRuleEnum | pivot_rule = COMBINED_PIVOT |
) | [inline] |
Runs the algorithm.
pivot_rule | The pivot rule that is used during the algorithm. |
true
if a feasible flow can be found. const FlowMap& flowMap | ( | ) | const [inline] |
Returns a const reference to the edge map storing the found flow.
const PotentialMap& potentialMap | ( | ) | const [inline] |
Returns a const reference to the node map storing the found potentials (the dual solution).
Capacity flow | ( | const typename Graph::Edge & | edge | ) | const [inline] |
Cost potential | ( | const typename Graph::Node & | node | ) | const [inline] |
Returns the potential of the given node.
Cost totalCost | ( | ) | const [inline] |
Returns the total cost of the found flow. The complexity of the function is .