lemon/lp_glpk.h
author hegyi
Mon, 21 Nov 2005 18:03:20 +0000
changeset 1823 cb082cdf3667
parent 1460 7c58aabb9eea
child 1840 173b53b28d7c
permissions -rw-r--r--
NewMapWin has become Dialog instead of Window. Therefore it is created dynamically, when there is need for it, instead of keeping one instance in memory. This solution is slower, but more correct than before.
     1 /* -*- C++ -*-
     2  * lemon/lp_glpk.h - Part of LEMON, a generic C++ optimization library
     3  *
     4  * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
     5  * (Egervary Research Group on Combinatorial Optimization, EGRES).
     6  *
     7  * Permission to use, modify and distribute this software is granted
     8  * provided that this copyright notice appears in all copies. For
     9  * precise terms see the accompanying LICENSE file.
    10  *
    11  * This software is provided "AS IS" with no warranty of any kind,
    12  * express or implied, and with no claim as to its suitability for any
    13  * purpose.
    14  *
    15  */
    16 
    17 #ifndef LEMON_LP_GLPK_H
    18 #define LEMON_LP_GLPK_H
    19 
    20 ///\file
    21 ///\brief Header of the LEMON-GLPK lp solver interface.
    22 ///\ingroup gen_opt_group
    23 
    24 #include <lemon/lp_base.h>
    25 extern "C" {
    26 #include <glpk.h>
    27 }
    28 
    29 namespace lemon {
    30 
    31 
    32   /// \brief Interface for the GLPK LP solver
    33   /// 
    34   /// This class implements an interface for the GLPK LP solver.
    35   ///\ingroup gen_opt_group
    36   class LpGlpk : public LpSolverBase {
    37   protected:
    38     LPX* lp;
    39     
    40   public:
    41     
    42     typedef LpSolverBase Parent;
    43     
    44     LpGlpk();
    45     ~LpGlpk();
    46     
    47   protected:
    48     virtual LpSolverBase &_newLp();
    49     virtual LpSolverBase &_copyLp();
    50 
    51     virtual int _addCol();
    52     virtual int _addRow();
    53     virtual void _eraseCol(int i);
    54     virtual void _eraseRow(int i);
    55 
    56     virtual void _setRowCoeffs(int i, 
    57 			       int length,
    58                                const int   * indices, 
    59                                const Value   * values );
    60     virtual void _setColCoeffs(int i, 
    61 			       int length,
    62                                const int   * indices, 
    63                                const Value   * values);
    64     virtual void _setCoeff(int row, int col, Value value);
    65     virtual void _setColLowerBound(int i, Value value);
    66     virtual void _setColUpperBound(int i, Value value);
    67 //     virtual void _setRowLowerBound(int i, Value value);
    68 //     virtual void _setRowUpperBound(int i, Value value);
    69     virtual void _setRowBounds(int i, Value lower, Value upper);
    70     virtual void _setObjCoeff(int i, Value obj_coef);
    71     virtual void _clearObj();
    72 //     virtual void _setObj(int length,
    73 //                          int  const * indices, 
    74 //                          Value  const * values ) = 0;
    75 
    76     ///\e
    77     
    78     ///\todo It should be clarified
    79     ///
    80     virtual SolveExitStatus _solve();
    81     virtual Value _getPrimal(int i);
    82     virtual Value _getDual(int i);
    83     virtual Value _getPrimalValue();
    84     ///\e
    85     
    86     ///\todo It should be clarified
    87     ///
    88     virtual SolutionStatus _getPrimalStatus();
    89     virtual SolutionStatus _getDualStatus();
    90     virtual ProblemTypes _getProblemType();
    91 
    92     virtual void _setMax();
    93     virtual void _setMin();
    94 
    95   public:
    96     ///Set the verbosity of the messages
    97 
    98     ///Set the verbosity of the messages
    99     ///
   100     ///\param m is the level of the messages output by the solver routines.
   101     ///The possible values are:
   102     ///- 0 --- no output (default value)
   103     ///- 1 --- error messages only
   104     ///- 2 --- normal output
   105     ///- 3 --- full output (includes informational messages)
   106     void messageLevel(int m);
   107     ///Turns on or off the presolver
   108 
   109     ///Turns on (\c b is \c true) or off (\c b is \c false) the presolver
   110     ///
   111     ///The presolver is off by default.
   112     void presolver(bool b);
   113     
   114   };
   115 } //END OF NAMESPACE LEMON
   116 
   117 #endif //LEMON_LP_GLPK_H
   118