doc/groups.dox
changeset 686 7439dc5fe1b9
parent 660 d9cf3b5858ae
child 710 f1fe0ddad6f7
child 713 4ac30454f1c1
child 735 853fcddcf282
child 768 0a42883c8221
equal deleted inserted replaced
28:f9fc7a5f4a45 29:44bea10dbfb9
   333 but it is strongly related to maximum flow.
   333 but it is strongly related to maximum flow.
   334 For more information, see \ref Circulation.
   334 For more information, see \ref Circulation.
   335 */
   335 */
   336 
   336 
   337 /**
   337 /**
   338 @defgroup min_cost_flow Minimum Cost Flow Algorithms
   338 @defgroup min_cost_flow_algs Minimum Cost Flow Algorithms
   339 @ingroup algs
   339 @ingroup algs
   340 
   340 
   341 \brief Algorithms for finding minimum cost flows and circulations.
   341 \brief Algorithms for finding minimum cost flows and circulations.
   342 
   342 
   343 This group contains the algorithms for finding minimum cost flows and
   343 This group contains the algorithms for finding minimum cost flows and
   344 circulations.
   344 circulations. For more information about this problem and its dual
   345 
   345 solution see \ref min_cost_flow "Minimum Cost Flow Problem".
   346 The \e minimum \e cost \e flow \e problem is to find a feasible flow of
   346 
   347 minimum total cost from a set of supply nodes to a set of demand nodes
   347 LEMON contains several algorithms for this problem.
   348 in a network with capacity constraints (lower and upper bounds)
       
   349 and arc costs.
       
   350 Formally, let \f$G=(V,A)\f$ be a digraph, \f$lower: A\rightarrow\mathbf{Z}\f$,
       
   351 \f$upper: A\rightarrow\mathbf{Z}\cup\{+\infty\}\f$ denote the lower and
       
   352 upper bounds for the flow values on the arcs, for which
       
   353 \f$lower(uv) \leq upper(uv)\f$ must hold for all \f$uv\in A\f$,
       
   354 \f$cost: A\rightarrow\mathbf{Z}\f$ denotes the cost per unit flow
       
   355 on the arcs and \f$sup: V\rightarrow\mathbf{Z}\f$ denotes the
       
   356 signed supply values of the nodes.
       
   357 If \f$sup(u)>0\f$, then \f$u\f$ is a supply node with \f$sup(u)\f$
       
   358 supply, if \f$sup(u)<0\f$, then \f$u\f$ is a demand node with
       
   359 \f$-sup(u)\f$ demand.
       
   360 A minimum cost flow is an \f$f: A\rightarrow\mathbf{Z}\f$ solution
       
   361 of the following optimization problem.
       
   362 
       
   363 \f[ \min\sum_{uv\in A} f(uv) \cdot cost(uv) \f]
       
   364 \f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \geq
       
   365     sup(u) \quad \forall u\in V \f]
       
   366 \f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
       
   367 
       
   368 The sum of the supply values, i.e. \f$\sum_{u\in V} sup(u)\f$ must be
       
   369 zero or negative in order to have a feasible solution (since the sum
       
   370 of the expressions on the left-hand side of the inequalities is zero).
       
   371 It means that the total demand must be greater or equal to the total
       
   372 supply and all the supplies have to be carried out from the supply nodes,
       
   373 but there could be demands that are not satisfied.
       
   374 If \f$\sum_{u\in V} sup(u)\f$ is zero, then all the supply/demand
       
   375 constraints have to be satisfied with equality, i.e. all demands
       
   376 have to be satisfied and all supplies have to be used.
       
   377 
       
   378 If you need the opposite inequalities in the supply/demand constraints
       
   379 (i.e. the total demand is less than the total supply and all the demands
       
   380 have to be satisfied while there could be supplies that are not used),
       
   381 then you could easily transform the problem to the above form by reversing
       
   382 the direction of the arcs and taking the negative of the supply values
       
   383 (e.g. using \ref ReverseDigraph and \ref NegMap adaptors).
       
   384 However \ref NetworkSimplex algorithm also supports this form directly
       
   385 for the sake of convenience.
       
   386 
       
   387 A feasible solution for this problem can be found using \ref Circulation.
       
   388 
       
   389 Note that the above formulation is actually more general than the usual
       
   390 definition of the minimum cost flow problem, in which strict equalities
       
   391 are required in the supply/demand contraints, i.e.
       
   392 
       
   393 \f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) =
       
   394     sup(u) \quad \forall u\in V. \f]
       
   395 
       
   396 However if the sum of the supply values is zero, then these two problems
       
   397 are equivalent. So if you need the equality form, you have to ensure this
       
   398 additional contraint for the algorithms.
       
   399 
       
   400 The dual solution of the minimum cost flow problem is represented by node 
       
   401 potentials \f$\pi: V\rightarrow\mathbf{Z}\f$.
       
   402 An \f$f: A\rightarrow\mathbf{Z}\f$ feasible solution of the problem
       
   403 is optimal if and only if for some \f$\pi: V\rightarrow\mathbf{Z}\f$
       
   404 node potentials the following \e complementary \e slackness optimality
       
   405 conditions hold.
       
   406 
       
   407  - For all \f$uv\in A\f$ arcs:
       
   408    - if \f$cost^\pi(uv)>0\f$, then \f$f(uv)=lower(uv)\f$;
       
   409    - if \f$lower(uv)<f(uv)<upper(uv)\f$, then \f$cost^\pi(uv)=0\f$;
       
   410    - if \f$cost^\pi(uv)<0\f$, then \f$f(uv)=upper(uv)\f$.
       
   411  - For all \f$u\in V\f$ nodes:
       
   412    - if \f$\sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \neq sup(u)\f$,
       
   413      then \f$\pi(u)=0\f$.
       
   414  
       
   415 Here \f$cost^\pi(uv)\f$ denotes the \e reduced \e cost of the arc
       
   416 \f$uv\in A\f$ with respect to the potential function \f$\pi\f$, i.e.
       
   417 \f[ cost^\pi(uv) = cost(uv) + \pi(u) - \pi(v).\f]
       
   418 
       
   419 All algorithms provide dual solution (node potentials) as well,
       
   420 if an optimal flow is found.
       
   421 
       
   422 LEMON contains several algorithms for solving minimum cost flow problems.
       
   423  - \ref NetworkSimplex Primal Network Simplex algorithm with various
   348  - \ref NetworkSimplex Primal Network Simplex algorithm with various
   424    pivot strategies.
   349    pivot strategies.
   425  - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on
   350  - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on
   426    cost scaling.
   351    cost scaling.
   427  - \ref CapacityScaling Successive Shortest %Path algorithm with optional
   352  - \ref CapacityScaling Successive Shortest %Path algorithm with optional
   428    capacity scaling.
   353    capacity scaling.
   429  - \ref CancelAndTighten The Cancel and Tighten algorithm.
   354  - \ref CancelAndTighten The Cancel and Tighten algorithm.
   430  - \ref CycleCanceling Cycle-Canceling algorithms.
   355  - \ref CycleCanceling Cycle-Canceling algorithms.
   431 
       
   432 Most of these implementations support the general inequality form of the
       
   433 minimum cost flow problem, but CancelAndTighten and CycleCanceling
       
   434 only support the equality form due to the primal method they use.
       
   435 
   356 
   436 In general NetworkSimplex is the most efficient implementation,
   357 In general NetworkSimplex is the most efficient implementation,
   437 but in special cases other algorithms could be faster.
   358 but in special cases other algorithms could be faster.
   438 For example, if the total supply and/or capacities are rather small,
   359 For example, if the total supply and/or capacities are rather small,
   439 CapacityScaling is usually the fastest algorithm (without effective scaling).
   360 CapacityScaling is usually the fastest algorithm (without effective scaling).