lemon/lp.h
author Peter Kovacs <kpeter@inf.elte.hu>
Thu, 12 Nov 2009 23:26:13 +0100
changeset 806 fa6f37d7a25b
parent 462 9b082b3fb33f
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.
deba@458
     1
/* -*- mode: C++; indent-tabs-mode: nil; -*-
deba@458
     2
 *
deba@458
     3
 * This file is a part of LEMON, a generic C++ optimization library.
deba@458
     4
 *
deba@458
     5
 * Copyright (C) 2003-2008
deba@458
     6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
deba@458
     7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
deba@458
     8
 *
deba@458
     9
 * Permission to use, modify and distribute this software is granted
deba@458
    10
 * provided that this copyright notice appears in all copies. For
deba@458
    11
 * precise terms see the accompanying LICENSE file.
deba@458
    12
 *
deba@458
    13
 * This software is provided "AS IS" with no warranty of any kind,
deba@458
    14
 * express or implied, and with no claim as to its suitability for any
deba@458
    15
 * purpose.
deba@458
    16
 *
deba@458
    17
 */
deba@458
    18
deba@458
    19
#ifndef LEMON_LP_H
deba@458
    20
#define LEMON_LP_H
deba@458
    21
deba@458
    22
#include<lemon/config.h>
deba@458
    23
deba@458
    24
ladanyi@627
    25
#ifdef LEMON_HAVE_GLPK
alpar@461
    26
#include <lemon/glpk.h>
ladanyi@627
    27
#elif LEMON_HAVE_CPLEX
alpar@461
    28
#include <lemon/cplex.h>
ladanyi@627
    29
#elif LEMON_HAVE_SOPLEX
alpar@461
    30
#include <lemon/soplex.h>
ladanyi@627
    31
#elif LEMON_HAVE_CLP
alpar@461
    32
#include <lemon/clp.h>
deba@458
    33
#endif
deba@458
    34
deba@458
    35
///\file
deba@458
    36
///\brief Defines a default LP solver
deba@458
    37
///\ingroup lp_group
deba@458
    38
namespace lemon {
deba@458
    39
deba@458
    40
#ifdef DOXYGEN
deba@458
    41
  ///The default LP solver identifier
deba@458
    42
deba@458
    43
  ///The default LP solver identifier.
deba@458
    44
  ///\ingroup lp_group
deba@458
    45
  ///
alpar@461
    46
  ///Currently, the possible values are \c GLPK, \c CPLEX,
alpar@461
    47
  ///\c SOPLEX or \c CLP
deba@459
    48
#define LEMON_DEFAULT_LP SOLVER
deba@458
    49
  ///The default LP solver
deba@458
    50
deba@458
    51
  ///The default LP solver.
deba@458
    52
  ///\ingroup lp_group
deba@458
    53
  ///
alpar@462
    54
  ///Currently, it is either \c GlpkLp, \c CplexLp, \c SoplexLp or \c ClpLp
alpar@462
    55
  typedef GlpkLp Lp;
deba@458
    56
deba@459
    57
  ///The default MIP solver identifier
deba@459
    58
deba@459
    59
  ///The default MIP solver identifier.
deba@458
    60
  ///\ingroup lp_group
deba@458
    61
  ///
alpar@461
    62
  ///Currently, the possible values are \c GLPK or \c CPLEX
deba@459
    63
#define LEMON_DEFAULT_MIP SOLVER
deba@459
    64
  ///The default MIP solver.
deba@458
    65
deba@459
    66
  ///The default MIP solver.
deba@458
    67
  ///\ingroup lp_group
deba@458
    68
  ///
alpar@462
    69
  ///Currently, it is either \c GlpkMip or \c CplexMip
alpar@462
    70
  typedef GlpkMip Mip;
deba@458
    71
#else
ladanyi@627
    72
#ifdef LEMON_HAVE_GLPK
alpar@461
    73
# define LEMON_DEFAULT_LP GLPK
alpar@462
    74
  typedef GlpkLp Lp;
alpar@461
    75
# define LEMON_DEFAULT_MIP GLPK
alpar@462
    76
  typedef GlpkMip Mip;
ladanyi@627
    77
#elif LEMON_HAVE_CPLEX
alpar@461
    78
# define LEMON_DEFAULT_LP CPLEX
alpar@462
    79
  typedef CplexLp Lp;
alpar@461
    80
# define LEMON_DEFAULT_MIP CPLEX
alpar@462
    81
  typedef CplexMip Mip;
ladanyi@627
    82
#elif LEMON_HAVE_SOPLEX
alpar@461
    83
# define DEFAULT_LP SOPLEX
alpar@462
    84
  typedef SoplexLp Lp;
ladanyi@627
    85
#elif LEMON_HAVE_CLP
alpar@461
    86
# define DEFAULT_LP CLP
alpar@462
    87
  typedef ClpLp Lp;  
deba@458
    88
#endif
deba@458
    89
#endif
deba@458
    90
deba@458
    91
} //namespace lemon
deba@458
    92
deba@458
    93
#endif //LEMON_LP_H