COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/groups.dox

    r658 r637  
    318318The \e maximum \e flow \e problem is to find a flow of maximum value between
    319319a single source and a single target. Formally, there is a \f$G=(V,A)\f$
    320 digraph, a \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function and
     320digraph, a \f$cap:A\rightarrow\mathbf{R}^+_0\f$ capacity function and
    321321\f$s, t \in V\f$ source and target nodes.
    322 A maximum flow is an \f$f: A\rightarrow\mathbf{R}^+_0\f$ solution of the
     322A maximum flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of the
    323323following optimization problem.
    324324
    325 \f[ \max\sum_{sv\in A} f(sv) - \sum_{vs\in A} f(vs) \f]
    326 \f[ \sum_{uv\in A} f(uv) = \sum_{vu\in A} f(vu)
    327     \quad \forall u\in V\setminus\{s,t\} \f]
    328 \f[ 0 \leq f(uv) \leq cap(uv) \quad \forall uv\in A \f]
     325\f[ \max\sum_{a\in\delta_{out}(s)}f(a) - \sum_{a\in\delta_{in}(s)}f(a) \f]
     326\f[ \sum_{a\in\delta_{out}(v)} f(a) = \sum_{a\in\delta_{in}(v)} f(a)
     327    \qquad \forall v\in V\setminus\{s,t\} \f]
     328\f[ 0 \leq f(a) \leq cap(a) \qquad \forall a\in A \f]
    329329
    330330LEMON contains several algorithms for solving maximum flow problems:
     
    351351The \e minimum \e cost \e flow \e problem is to find a feasible flow of
    352352minimum total cost from a set of supply nodes to a set of demand nodes
    353 in a network with capacity constraints (lower and upper bounds)
    354 and arc costs.
     353in a network with capacity constraints and arc costs.
    355354Formally, let \f$G=(V,A)\f$ be a digraph,
    356355\f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and
    357 upper bounds for the flow values on the arcs, for which
    358 \f$0 \leq lower(uv) \leq upper(uv)\f$ holds for all \f$uv\in A\f$.
     356upper bounds for the flow values on the arcs,
    359357\f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow
    360 on the arcs, and \f$sup: V\rightarrow\mathbf{Z}\f$ denotes the
    361 signed supply values of the nodes.
    362 If \f$sup(u)>0\f$, then \f$u\f$ is a supply node with \f$sup(u)\f$
    363 supply, if \f$sup(u)<0\f$, then \f$u\f$ is a demand node with
    364 \f$-sup(u)\f$ demand.
    365 A minimum cost flow is an \f$f: A\rightarrow\mathbf{Z}^+_0\f$ solution
    366 of the following optimization problem.
    367 
    368 \f[ \min\sum_{uv\in A} f(uv) \cdot cost(uv) \f]
    369 \f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \geq
    370     sup(u) \quad \forall u\in V \f]
    371 \f[ lower(uv) \leq f(uv) \leq upper(uv) \quad \forall uv\in A \f]
    372 
    373 The sum of the supply values, i.e. \f$\sum_{u\in V} sup(u)\f$ must be
    374 zero or negative in order to have a feasible solution (since the sum
    375 of the expressions on the left-hand side of the inequalities is zero).
    376 It means that the total demand must be greater or equal to the total
    377 supply and all the supplies have to be carried out from the supply nodes,
    378 but there could be demands that are not satisfied.
    379 If \f$\sum_{u\in V} sup(u)\f$ is zero, then all the supply/demand
    380 constraints have to be satisfied with equality, i.e. all demands
    381 have to be satisfied and all supplies have to be used.
    382 
    383 If you need the opposite inequalities in the supply/demand constraints
    384 (i.e. the total demand is less than the total supply and all the demands
    385 have to be satisfied while there could be supplies that are not used),
    386 then you could easily transform the problem to the above form by reversing
    387 the direction of the arcs and taking the negative of the supply values
    388 (e.g. using \ref ReverseDigraph and \ref NegMap adaptors).
    389 However \ref NetworkSimplex algorithm also supports this form directly
    390 for the sake of convenience.
    391 
    392 A feasible solution for this problem can be found using \ref Circulation.
    393 
    394 Note that the above formulation is actually more general than the usual
    395 definition of the minimum cost flow problem, in which strict equalities
    396 are required in the supply/demand contraints, i.e.
    397 
    398 \f[ \sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) =
    399     sup(u) \quad \forall u\in V. \f]
    400 
    401 However if the sum of the supply values is zero, then these two problems
    402 are equivalent. So if you need the equality form, you have to ensure this
    403 additional contraint for the algorithms.
    404 
    405 The dual solution of the minimum cost flow problem is represented by node
    406 potentials \f$\pi: V\rightarrow\mathbf{Z}\f$.
    407 An \f$f: A\rightarrow\mathbf{Z}^+_0\f$ feasible solution of the problem
    408 is optimal if and only if for some \f$\pi: V\rightarrow\mathbf{Z}\f$
    409 node potentials the following \e complementary \e slackness optimality
    410 conditions hold.
    411 
    412  - For all \f$uv\in A\f$ arcs:
    413    - if \f$cost^\pi(uv)>0\f$, then \f$f(uv)=lower(uv)\f$;
    414    - if \f$lower(uv)<f(uv)<upper(uv)\f$, then \f$cost^\pi(uv)=0\f$;
    415    - if \f$cost^\pi(uv)<0\f$, then \f$f(uv)=upper(uv)\f$.
    416  - For all \f$u\in V\f$:
    417    - if \f$\sum_{uv\in A} f(uv) - \sum_{vu\in A} f(vu) \neq sup(u)\f$,
    418      then \f$\pi(u)=0\f$.
    419  
    420 Here \f$cost^\pi(uv)\f$ denotes the \e reduced \e cost of the arc
    421 \f$uv\in A\f$ with respect to the node potentials \f$\pi\f$, i.e.
    422 \f[ cost^\pi(uv) = cost(uv) + \pi(u) - \pi(v).\f]
    423 
    424 All algorithms provide dual solution (node potentials) as well
    425 if an optimal flow is found.
    426 
    427 LEMON contains several algorithms for solving minimum cost flow problems.
    428  - \ref NetworkSimplex Primal Network Simplex algorithm with various
     358on the arcs, and
     359\f$supply: V\rightarrow\mathbf{Z}\f$ denotes the supply/demand values
     360of the nodes.
     361A minimum cost flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of
     362the following optimization problem.
     363
     364\f[ \min\sum_{a\in A} f(a) cost(a) \f]
     365\f[ \sum_{a\in\delta_{out}(v)} f(a) - \sum_{a\in\delta_{in}(v)} f(a) =
     366    supply(v) \qquad \forall v\in V \f]
     367\f[ lower(a) \leq f(a) \leq upper(a) \qquad \forall a\in A \f]
     368
     369LEMON contains several algorithms for solving minimum cost flow problems:
     370 - \ref CycleCanceling Cycle-canceling algorithms.
     371 - \ref CapacityScaling Successive shortest path algorithm with optional
     372   capacity scaling.
     373 - \ref CostScaling Push-relabel and augment-relabel algorithms based on
     374   cost scaling.
     375 - \ref NetworkSimplex Primal network simplex algorithm with various
    429376   pivot strategies.
    430  - \ref CostScaling Push-Relabel and Augment-Relabel algorithms based on
    431    cost scaling.
    432  - \ref CapacityScaling Successive Shortest %Path algorithm with optional
    433    capacity scaling.
    434  - \ref CancelAndTighten The Cancel and Tighten algorithm.
    435  - \ref CycleCanceling Cycle-Canceling algorithms.
    436 
    437 Most of these implementations support the general inequality form of the
    438 minimum cost flow problem, but CancelAndTighten and CycleCanceling
    439 only support the equality form due to the primal method they use.
    440 
    441 In general NetworkSimplex is the most efficient implementation,
    442 but in special cases other algorithms could be faster.
    443 For example, if the total supply and/or capacities are rather small,
    444 CapacityScaling is usually the fastest algorithm (without effective scaling).
    445377*/
    446378
Note: See TracChangeset for help on using the changeset viewer.