lemon/lp_glpk.h
author deba
Tue, 17 Oct 2006 10:50:57 +0000
changeset 2247 269a0dcee70b
parent 1956 a055123339d5
child 2312 07e46cbb7d85
permissions -rw-r--r--
Update the Path concept
Concept check for paths

DirPath renamed to Path
The interface updated to the new lemon interface
Make difference between the empty path and the path from one node
Builder interface have not been changed
// I wanted but there was not accordance about it

UPath is removed
It was a buggy implementation, it could not iterate on the
nodes in the right order
Right way to use undirected paths => path of edges in undirected graphs

The tests have been modified to the current implementation
     1 /* -*- C++ -*-
     2  *
     3  * This file is a part of LEMON, a generic C++ optimization library
     4  *
     5  * Copyright (C) 2003-2006
     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 #ifndef LEMON_LP_GLPK_H
    20 #define LEMON_LP_GLPK_H
    21 
    22 ///\file
    23 ///\brief Header of the LEMON-GLPK lp solver interface.
    24 ///\ingroup gen_opt_group
    25 
    26 #include <lemon/lp_base.h>
    27 extern "C" {
    28 #include <glpk.h>
    29 }
    30 
    31 namespace lemon {
    32 
    33 
    34   /// \brief Interface for the GLPK LP solver
    35   /// 
    36   /// This class implements an interface for the GLPK LP solver.
    37   ///\ingroup gen_opt_group
    38   class LpGlpk : virtual public LpSolverBase {
    39   protected:
    40     LPX* lp;
    41     
    42   public:
    43     
    44     typedef LpSolverBase Parent;
    45     
    46     LpGlpk();
    47     ~LpGlpk();
    48     
    49   protected:
    50     virtual LpSolverBase &_newLp();
    51     virtual LpSolverBase &_copyLp();
    52 
    53     virtual int _addCol();
    54     virtual int _addRow();
    55     virtual void _eraseCol(int i);
    56     virtual void _eraseRow(int i);
    57     virtual void _getColName(int col,       std::string & name);
    58     virtual void _setColName(int col, const std::string & name);
    59     virtual void _setRowCoeffs(int i, 
    60 			       int length,
    61                                const int   * indices, 
    62                                const Value   * values );
    63     virtual void _setColCoeffs(int i, 
    64 			       int length,
    65                                const int   * indices, 
    66                                const Value   * values);
    67     virtual void _setCoeff(int row, int col, Value value);
    68     virtual void _setColLowerBound(int i, Value value);
    69     virtual void _setColUpperBound(int i, Value value);
    70 //     virtual void _setRowLowerBound(int i, Value value);
    71 //     virtual void _setRowUpperBound(int i, Value value);
    72     virtual void _setRowBounds(int i, Value lower, Value upper);
    73     virtual void _setObjCoeff(int i, Value obj_coef);
    74     virtual void _clearObj();
    75 //     virtual void _setObj(int length,
    76 //                          int  const * indices, 
    77 //                          Value  const * values ) = 0;
    78 
    79     ///\e
    80     
    81     ///\todo It should be clarified
    82     ///
    83     virtual SolveExitStatus _solve();
    84     virtual Value _getPrimal(int i);
    85     virtual Value _getDual(int i);
    86     virtual Value _getPrimalValue();
    87     virtual bool _isBasicCol(int i);
    88     ///\e
    89     
    90     ///\todo It should be clarified
    91     ///
    92     virtual SolutionStatus _getPrimalStatus();
    93     virtual SolutionStatus _getDualStatus();
    94     virtual ProblemTypes _getProblemType();
    95 
    96     virtual void _setMax();
    97     virtual void _setMin();
    98 
    99   public:
   100     ///Set the verbosity of the messages
   101 
   102     ///Set the verbosity of the messages
   103     ///
   104     ///\param m is the level of the messages output by the solver routines.
   105     ///The possible values are:
   106     ///- 0 --- no output (default value)
   107     ///- 1 --- error messages only
   108     ///- 2 --- normal output
   109     ///- 3 --- full output (includes informational messages)
   110     void messageLevel(int m);
   111     ///Turns on or off the presolver
   112 
   113     ///Turns on (\c b is \c true) or off (\c b is \c false) the presolver
   114     ///
   115     ///The presolver is off by default.
   116     void presolver(bool b);
   117     
   118   };
   119 } //END OF NAMESPACE LEMON
   120 
   121 #endif //LEMON_LP_GLPK_H
   122