src/work/marci/lp/lp_solver_wrapper_2.h
changeset 1048 38a49245a701
parent 1031 0b7169db694f
     1.1 --- a/src/work/marci/lp/lp_solver_wrapper_2.h	Tue Jan 04 17:16:35 2005 +0000
     1.2 +++ b/src/work/marci/lp/lp_solver_wrapper_2.h	Tue Jan 04 17:54:41 2005 +0000
     1.3 @@ -159,9 +159,12 @@
     1.4  
     1.5    /*! \e
     1.6     */
     1.7 +  template <typename _Value>
     1.8    class LPSolverBase {
     1.9    public:
    1.10      /// \e
    1.11 +    typedef _Value Value;
    1.12 +    /// \e
    1.13      typedef IterablePartition<int>::ClassIt RowIt;
    1.14      /// \e
    1.15      typedef IterablePartition<int>::ClassIt ColIt;
    1.16 @@ -191,14 +194,14 @@
    1.17      virtual ColIt addCol() = 0;
    1.18      /// temporally, glpk style indexing
    1.19      virtual void setRowCoeffs(RowIt row_it, int num, 
    1.20 -			      int* indices, double* doubles) = 0;
    1.21 -    //pair<RowIt, double>-bol kell megadni egy std range-et
    1.22 +			      int* indices, _Value* doubles) = 0;
    1.23 +    //pair<RowIt, _Value>-bol kell megadni egy std range-et
    1.24      /// \e
    1.25      template <typename Begin, typename End>
    1.26      void setRowCoeffs(RowIt row_it, Begin begin, End end) {
    1.27        int mem_length=1+colNum();
    1.28        int* indices = new int[mem_length];
    1.29 -      double* doubles = new double[mem_length];
    1.30 +      _Value* doubles = new _Value[mem_length];
    1.31        int length=0;
    1.32        for ( ; begin!=end; ++begin) {
    1.33  	++length;
    1.34 @@ -211,14 +214,14 @@
    1.35      }
    1.36      /// temporally, glpk style indexing
    1.37      virtual void setColCoeffs(ColIt col_it, int num, 
    1.38 -			      int* indices, double* doubles) = 0;
    1.39 -    //pair<ColIt, double>-bol kell megadni egy std range-et
    1.40 +			      int* indices, _Value* doubles) = 0;
    1.41 +    //pair<ColIt, _Value>-bol kell megadni egy std range-et
    1.42      /// \e
    1.43      template <typename Begin, typename End>
    1.44      void setColCoeffs(ColIt col_it, Begin begin, End end) {
    1.45        int mem_length=1+rowNum();
    1.46        int* indices = new int[mem_length];
    1.47 -      double* doubles = new double[mem_length];
    1.48 +      _Value* doubles = new _Value[mem_length];
    1.49        int length=0;
    1.50        for ( ; begin!=end; ++begin) {
    1.51  	++length;
    1.52 @@ -235,14 +238,14 @@
    1.53      virtual void eraseRow(const RowIt& row_it) = 0;
    1.54      /// \e
    1.55      virtual void setColBounds(const ColIt& col_it, int bound_type, 
    1.56 -			      double lo, double up) =0; 
    1.57 +			      _Value lo, _Value up) =0; 
    1.58      /// \e
    1.59 -    virtual double getObjCoef(const ColIt& col_it) = 0;
    1.60 +    virtual _Value getObjCoef(const ColIt& col_it) = 0;
    1.61      /// \e
    1.62      virtual void setRowBounds(const RowIt& row_it, int bound_type, 
    1.63 -			      double lo, double up) = 0;
    1.64 +			      _Value lo, _Value up) = 0;
    1.65      /// \e
    1.66 -    virtual void setObjCoef(const ColIt& col_it, double obj_coef) = 0;
    1.67 +    virtual void setObjCoef(const ColIt& col_it, _Value obj_coef) = 0;
    1.68      /// \e
    1.69      virtual void solveSimplex() = 0;
    1.70      /// \e
    1.71 @@ -250,9 +253,9 @@
    1.72      /// \e
    1.73      virtual void solveDualSimplex() = 0;
    1.74      /// \e
    1.75 -    virtual double getPrimal(const ColIt& col_it) = 0;
    1.76 +    virtual _Value getPrimal(const ColIt& col_it) = 0;
    1.77      /// \e
    1.78 -    virtual double getObjVal() = 0;
    1.79 +    virtual _Value getObjVal() = 0;
    1.80      /// \e
    1.81      virtual int rowNum() const = 0;
    1.82      /// \e
    1.83 @@ -279,6 +282,7 @@
    1.84      virtual void printColStatus(int i) = 0;
    1.85    };
    1.86    
    1.87 +
    1.88    /// \brief Wrappers for LP solvers
    1.89    /// 
    1.90    /// This class implements a lemon wrapper for glpk.
    1.91 @@ -286,9 +290,9 @@
    1.92    /// The aim of this class is to give a general surface to different 
    1.93    /// solvers, i.e. it makes possible to write algorithms using LP's, 
    1.94    /// in which the solver can be changed to an other one easily.
    1.95 -  class LPSolverWrapper : public LPSolverBase {
    1.96 +  class LPSolverWrapper : public LPSolverBase<double> {
    1.97    public:
    1.98 -    typedef LPSolverBase Parent;
    1.99 +    typedef LPSolverBase<double> Parent;
   1.100  
   1.101      //   class Row {
   1.102      //   protected:
   1.103 @@ -323,7 +327,7 @@
   1.104  
   1.105    public:
   1.106      /// \e
   1.107 -    LPSolverWrapper() : LPSolverBase(), 
   1.108 +    LPSolverWrapper() : Parent(), 
   1.109  			lp(lpx_create_prob()) {
   1.110        lpx_set_int_parm(lp, LPX_K_DUAL, 1);
   1.111      }