lemon/lp_skeleton.h
author deba
Tue, 17 Oct 2006 10:50:57 +0000
changeset 2247 269a0dcee70b
parent 1895 5b01801efbc0
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_SKELETON
    20 #define LEMON_LP_SKELETON
    21 
    22 #include <lemon/lp_base.h>
    23 
    24 ///\file
    25 ///\brief A skeleton file to implement LP solver interfaces
    26 namespace lemon {
    27 
    28   ///A skeleton class to implement LP solver interfaces
    29   class LpSkeleton :public LpSolverBase {
    30     int col_num,row_num;
    31     
    32   protected:
    33     ///\e
    34     virtual LpSolverBase &_newLp();
    35     ///\e
    36     virtual LpSolverBase &_copyLp();
    37     /// \e
    38     virtual int _addCol();
    39     /// \e
    40     virtual int _addRow();
    41     /// \e
    42     virtual void _eraseCol(int i);
    43     /// \e
    44     virtual void _eraseRow(int i);
    45     /// \e
    46     virtual void _getColName(int col,       std::string & name);
    47     /// \e
    48     virtual void _setColName(int col, const std::string & name);
    49 
    50     /// \e
    51 
    52     /// \warning Arrays are indexed from 1 (datum at index 0 is ignored)
    53     ///
    54     virtual void _setRowCoeffs(int i, 
    55 			       int length,
    56                                int  const * indices, 
    57                                Value  const * values );
    58     /// \e
    59 
    60     /// \warning Arrays are indexed from 1 (datum at index 0 is ignored)
    61     ///
    62     virtual void _setColCoeffs(int i, 
    63 			       int length,
    64                                int  const * indices, 
    65                                Value  const * values );
    66     
    67     /// Set one element of the coefficient matrix
    68     virtual void _setCoeff(int row, int col, Value value);
    69 
    70     /// The lower bound of a variable (column) have to be given by an 
    71     /// extended number of type Value, i.e. a finite number of type 
    72     /// Value or -\ref INF.
    73     virtual void _setColLowerBound(int i, Value value);
    74     /// \e
    75 
    76     /// The upper bound of a variable (column) have to be given by an 
    77     /// extended number of type Value, i.e. a finite number of type 
    78     /// Value or \ref INF.
    79     virtual void _setColUpperBound(int i, Value value);
    80     /// \e
    81 
    82 //     /// The lower bound of a linear expression (row) have to be given by an 
    83 //     /// extended number of type Value, i.e. a finite number of type 
    84 //     /// Value or -\ref INF.
    85 //     virtual void _setRowLowerBound(int i, Value value);
    86 //     /// \e
    87 
    88 //     /// The upper bound of a linear expression (row) have to be given by an 
    89 //     /// extended number of type Value, i.e. a finite number of type 
    90 //     /// Value or \ref INF.
    91 //     virtual void _setRowUpperBound(int i, Value value);
    92 
    93     /// The lower and upper bound of a linear expression (row) have to be 
    94     /// given by an 
    95     /// extended number of type Value, i.e. a finite number of type 
    96     /// Value or +/-\ref INF.
    97     virtual void _setRowBounds(int i, Value lb, Value ub);
    98     /// \e
    99 
   100 
   101     /// \e
   102     virtual void _clearObj();
   103     /// \e
   104     virtual void _setObjCoeff(int i, Value obj_coef);
   105 
   106     ///\e
   107     
   108     ///\bug Wrong interface
   109     ///
   110     virtual SolveExitStatus _solve();
   111 
   112     ///\e
   113 
   114     ///\bug Wrong interface
   115     ///
   116     virtual Value _getPrimal(int i);
   117 
   118     ///\e
   119 
   120     ///\bug Wrong interface
   121     ///
   122     virtual Value _getDual(int i);
   123 
   124     ///\e
   125 
   126     ///\bug Wrong interface
   127     ///
   128     virtual Value _getPrimalValue();
   129 
   130     ///\e
   131 
   132     ///\bug Wrong interface
   133     ///
   134     virtual SolutionStatus _getPrimalStatus();
   135 
   136     ////e
   137     virtual SolutionStatus _getDualStatus();
   138 
   139 
   140     ///\e
   141     virtual ProblemTypes _getProblemType();
   142 
   143     ///\e
   144     virtual void _setMax();
   145     ///\e
   146     virtual void _setMin();
   147 
   148     ///\e
   149     virtual bool _isBasicCol(int i);
   150 
   151     
   152 
   153   public:
   154     LpSkeleton() : LpSolverBase(), col_num(0), row_num(0) {}
   155   };  
   156 
   157 } //namespace lemon
   158 
   159 #endif // LEMON_LP_SKELETON