doc/min_cost_flow.dox
author Peter Kovacs <kpeter@inf.elte.hu>
Thu, 12 Nov 2009 23:26:13 +0100
changeset 806 fa6f37d7a25b
parent 755 134852d7fb0a
parent 786 e20173729589
child 877 141f9c0db4a3
permissions -rw-r--r--
Entirely rework CapacityScaling (#180)

- Use the new interface similarly to NetworkSimplex.
- Rework the implementation using an efficient internal structure
for handling the residual network. This improvement made the
code much faster (up to 2-5 times faster on large graphs).
- Handle GEQ supply type (LEQ is not supported).
- Handle negative costs for arcs of finite capacity.
(Note that this algorithm cannot handle arcs of negative cost
and infinite upper bound, thus it returns UNBOUNDED if such
an arc exists.)
- Extend the documentation.
kpeter@663
     1
/* -*- mode: C++; indent-tabs-mode: nil; -*-
kpeter@663
     2
 *
kpeter@663
     3
 * This file is a part of LEMON, a generic C++ optimization library.
kpeter@663
     4
 *
kpeter@663
     5
 * Copyright (C) 2003-2009
kpeter@663
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
kpeter@663
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
kpeter@663
     8
 *
kpeter@663
     9
 * Permission to use, modify and distribute this software is granted
kpeter@663
    10
 * provided that this copyright notice appears in all copies. For
kpeter@663
    11
 * precise terms see the accompanying LICENSE file.
kpeter@663
    12
 *
kpeter@663
    13
 * This software is provided "AS IS" with no warranty of any kind,
kpeter@663
    14
 * express or implied, and with no claim as to its suitability for any
kpeter@663
    15
 * purpose.
kpeter@663
    16
 *
kpeter@663
    17
 */
kpeter@663
    18
kpeter@663
    19
namespace lemon {
kpeter@663
    20
kpeter@663
    21
/**
kpeter@663
    22
\page min_cost_flow Minimum Cost Flow Problem
kpeter@663
    23
kpeter@663
    24
\section mcf_def Definition (GEQ form)
kpeter@663
    25
kpeter@663
    26
The \e minimum \e cost \e flow \e problem is to find a feasible flow of
kpeter@663
    27
minimum total cost from a set of supply nodes to a set of demand nodes
kpeter@663
    28
in a network with capacity constraints (lower and upper bounds)
kpeter@755
    29
and arc costs \ref amo93networkflows.
kpeter@663
    30
kpeter@663
    31
Formally, let \f$G=(V,A)\f$ be a digraph, \f$lower: A\rightarrow\mathbf{R}\f$,
kpeter@663
    32
\f$upper: A\rightarrow\mathbf{R}\cup\{+\infty\}\f$ denote the lower and
kpeter@663
    33
upper bounds for the flow values on the arcs, for which
kpeter@663
    34
\f$lower(uv) \leq upper(uv)\f$ must hold for all \f$uv\in A\f$,
kpeter@663
    35
\f$cost: A\rightarrow\mathbf{R}\f$ denotes the cost per unit flow
kpeter@663
    36
on the arcs and \f$sup: V\rightarrow\mathbf{R}\f$ denotes the
kpeter@663
    37
signed supply values of the nodes.
kpeter@663
    38
If \f$sup(u)>0\f$, then \f$u\f$ is a supply node with \f$sup(u)\f$
kpeter@663
    39
supply, if \f$sup(u)<0\f$, then \f$u\f$ is a demand node with
kpeter@663
    40
\f$-sup(u)\f$ demand.
kpeter@663
    41
A minimum cost flow is an \f$f: A\rightarrow\mathbf{R}\f$ solution
kpeter@663
    42
of the following optimization problem.
kpeter@663
    43
kpeter@663
    44
\f[ \min\sum_{uv\in A} f(uv) \cdot cost(uv) \f]
kpeter@663
    45
\f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \geq
kpeter@663
    46
    sup(u) \quad \forall u\in V \f]
kpeter@663
    47
\f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
kpeter@663
    48
kpeter@663
    49
The sum of the supply values, i.e. \f$\sum_{u\in V} sup(u)\f$ must be
kpeter@663
    50
zero or negative in order to have a feasible solution (since the sum
kpeter@663
    51
of the expressions on the left-hand side of the inequalities is zero).
kpeter@663
    52
It means that the total demand must be greater or equal to the total
kpeter@663
    53
supply and all the supplies have to be carried out from the supply nodes,
kpeter@663
    54
but there could be demands that are not satisfied.
kpeter@663
    55
If \f$\sum_{u\in V} sup(u)\f$ is zero, then all the supply/demand
kpeter@663
    56
constraints have to be satisfied with equality, i.e. all demands
kpeter@663
    57
have to be satisfied and all supplies have to be used.
kpeter@663
    58
kpeter@663
    59
kpeter@663
    60
\section mcf_algs Algorithms
kpeter@663
    61
kpeter@663
    62
LEMON contains several algorithms for solving this problem, for more
kpeter@663
    63
information see \ref min_cost_flow_algs "Minimum Cost Flow Algorithms".
kpeter@663
    64
kpeter@663
    65
A feasible solution for this problem can be found using \ref Circulation.
kpeter@663
    66
kpeter@663
    67
kpeter@663
    68
\section mcf_dual Dual Solution
kpeter@663
    69
kpeter@663
    70
The dual solution of the minimum cost flow problem is represented by
kpeter@663
    71
node potentials \f$\pi: V\rightarrow\mathbf{R}\f$.
kpeter@663
    72
An \f$f: A\rightarrow\mathbf{R}\f$ primal feasible solution is optimal
kpeter@663
    73
if and only if for some \f$\pi: V\rightarrow\mathbf{R}\f$ node potentials
kpeter@663
    74
the following \e complementary \e slackness optimality conditions hold.
kpeter@663
    75
kpeter@663
    76
 - For all \f$uv\in A\f$ arcs:
kpeter@663
    77
   - if \f$cost^\pi(uv)>0\f$, then \f$f(uv)=lower(uv)\f$;
kpeter@663
    78
   - if \f$lower(uv)<f(uv)<upper(uv)\f$, then \f$cost^\pi(uv)=0\f$;
kpeter@663
    79
   - if \f$cost^\pi(uv)<0\f$, then \f$f(uv)=upper(uv)\f$.
kpeter@663
    80
 - For all \f$u\in V\f$ nodes:
kpeter@786
    81
   - \f$\pi(u)\leq 0\f$;
kpeter@663
    82
   - if \f$\sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \neq sup(u)\f$,
kpeter@663
    83
     then \f$\pi(u)=0\f$.
kpeter@663
    84
 
kpeter@663
    85
Here \f$cost^\pi(uv)\f$ denotes the \e reduced \e cost of the arc
kpeter@663
    86
\f$uv\in A\f$ with respect to the potential function \f$\pi\f$, i.e.
kpeter@663
    87
\f[ cost^\pi(uv) = cost(uv) + \pi(u) - \pi(v).\f]
kpeter@663
    88
kpeter@663
    89
All algorithms provide dual solution (node potentials), as well,
kpeter@663
    90
if an optimal flow is found.
kpeter@663
    91
kpeter@663
    92
kpeter@663
    93
\section mcf_eq Equality Form
kpeter@663
    94
kpeter@663
    95
The above \ref mcf_def "definition" is actually more general than the
kpeter@663
    96
usual formulation of the minimum cost flow problem, in which strict
kpeter@663
    97
equalities are required in the supply/demand contraints.
kpeter@663
    98
kpeter@663
    99
\f[ \min\sum_{uv\in A} f(uv) \cdot cost(uv) \f]
kpeter@663
   100
\f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) =
kpeter@663
   101
    sup(u) \quad \forall u\in V \f]
kpeter@663
   102
\f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
kpeter@663
   103
kpeter@663
   104
However if the sum of the supply values is zero, then these two problems
kpeter@663
   105
are equivalent.
kpeter@663
   106
The \ref min_cost_flow_algs "algorithms" in LEMON support the general
kpeter@663
   107
form, so if you need the equality form, you have to ensure this additional
kpeter@663
   108
contraint manually.
kpeter@663
   109
kpeter@663
   110
kpeter@663
   111
\section mcf_leq Opposite Inequalites (LEQ Form)
kpeter@663
   112
kpeter@663
   113
Another possible definition of the minimum cost flow problem is
kpeter@663
   114
when there are <em>"less or equal"</em> (LEQ) supply/demand constraints,
kpeter@663
   115
instead of the <em>"greater or equal"</em> (GEQ) constraints.
kpeter@663
   116
kpeter@663
   117
\f[ \min\sum_{uv\in A} f(uv) \cdot cost(uv) \f]
kpeter@663
   118
\f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \leq
kpeter@663
   119
    sup(u) \quad \forall u\in V \f]
kpeter@663
   120
\f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
kpeter@663
   121
kpeter@663
   122
It means that the total demand must be less or equal to the 
kpeter@663
   123
total supply (i.e. \f$\sum_{u\in V} sup(u)\f$ must be zero or
kpeter@663
   124
positive) and all the demands have to be satisfied, but there
kpeter@663
   125
could be supplies that are not carried out from the supply
kpeter@663
   126
nodes.
kpeter@663
   127
The equality form is also a special case of this form, of course.
kpeter@663
   128
kpeter@663
   129
You could easily transform this case to the \ref mcf_def "GEQ form"
kpeter@663
   130
of the problem by reversing the direction of the arcs and taking the
kpeter@663
   131
negative of the supply values (e.g. using \ref ReverseDigraph and
kpeter@663
   132
\ref NegMap adaptors).
kpeter@663
   133
However \ref NetworkSimplex algorithm also supports this form directly
kpeter@663
   134
for the sake of convenience.
kpeter@663
   135
kpeter@663
   136
Note that the optimality conditions for this supply constraint type are
kpeter@663
   137
slightly differ from the conditions that are discussed for the GEQ form,
kpeter@663
   138
namely the potentials have to be non-negative instead of non-positive.
kpeter@663
   139
An \f$f: A\rightarrow\mathbf{R}\f$ feasible solution of this problem
kpeter@663
   140
is optimal if and only if for some \f$\pi: V\rightarrow\mathbf{R}\f$
kpeter@663
   141
node potentials the following conditions hold.
kpeter@663
   142
kpeter@663
   143
 - For all \f$uv\in A\f$ arcs:
kpeter@663
   144
   - if \f$cost^\pi(uv)>0\f$, then \f$f(uv)=lower(uv)\f$;
kpeter@663
   145
   - if \f$lower(uv)<f(uv)<upper(uv)\f$, then \f$cost^\pi(uv)=0\f$;
kpeter@663
   146
   - if \f$cost^\pi(uv)<0\f$, then \f$f(uv)=upper(uv)\f$.
kpeter@663
   147
 - For all \f$u\in V\f$ nodes:
kpeter@786
   148
   - \f$\pi(u)\geq 0\f$;
kpeter@663
   149
   - if \f$\sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \neq sup(u)\f$,
kpeter@663
   150
     then \f$\pi(u)=0\f$.
kpeter@663
   151
kpeter@663
   152
*/
kpeter@663
   153
}