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