CoinUtils trunk
CoinSnapshot.hpp
Go to the documentation of this file.
00001 /* $Id$ */
00002 // Copyright (C) 2006, International Business Machines
00003 // Corporation and others.  All Rights Reserved.
00004 // This code is licensed under the terms of the Eclipse Public License (EPL).
00005 
00006 #ifndef CoinSnapshot_H
00007 #define CoinSnapshot_H
00008 
00009 class CoinPackedMatrix;
00010 #include "CoinTypes.hpp"
00011 
00012 //#############################################################################
00013 
00025 class CoinSnapshot  {
00026   
00027 public:
00028   
00029   //---------------------------------------------------------------------------
00035 
00036   inline int getNumCols() const
00037   { return numCols_;}
00038   
00040   inline int getNumRows() const
00041   { return numRows_;}
00042   
00044   inline int getNumElements() const
00045   { return numElements_;}
00046   
00048   inline int getNumIntegers() const
00049   { return numIntegers_;}
00050   
00052   inline const double * getColLower() const
00053   { return colLower_;}
00054   
00056   inline const double * getColUpper() const
00057   { return colUpper_;}
00058   
00060   inline const double * getRowLower() const
00061   { return rowLower_;}
00062   
00064   inline const double * getRowUpper() const
00065   { return rowUpper_;}
00066   
00074   inline const double * getRightHandSide() const
00075   { return rightHandSide_;}
00076 
00078   inline const double * getObjCoefficients() const
00079   { return objCoefficients_;}
00080   
00082   inline double getObjSense() const
00083   { return objSense_;}
00084   
00086   inline bool isContinuous(int colIndex) const
00087   { return colType_[colIndex]=='C';}
00088   
00090   inline bool isBinary(int colIndex) const
00091   { return colType_[colIndex]=='B';}
00092   
00094   inline bool isInteger(int colIndex) const
00095   { return colType_[colIndex]=='B'||colType_[colIndex]=='I';}
00096   
00098   inline bool isIntegerNonBinary(int colIndex) const
00099   { return colType_[colIndex]=='I';}
00100   
00102   inline bool isFreeBinary(int colIndex) const
00103   { return colType_[colIndex]=='B'&&colUpper_[colIndex]>colLower_[colIndex];}
00104 
00106   inline const char * getColType() const
00107   { return colType_;}
00108   
00110   inline const CoinPackedMatrix * getMatrixByRow() const
00111   { return matrixByRow_;}
00112   
00114   inline const CoinPackedMatrix * getMatrixByCol() const
00115   { return matrixByCol_;}
00116   
00118   inline const CoinPackedMatrix * getOriginalMatrixByRow() const
00119   { return originalMatrixByRow_;}
00120   
00122   inline const CoinPackedMatrix * getOriginalMatrixByCol() const
00123   { return originalMatrixByCol_;}
00125   
00128 
00129   inline const double * getColSolution() const
00130   { return colSolution_;}
00131   
00133   inline const double * getRowPrice() const
00134   { return rowPrice_;}
00135   
00137   inline const double * getReducedCost() const
00138   { return reducedCost_;}
00139   
00141   inline const double * getRowActivity() const
00142   { return rowActivity_;}
00143   
00145   inline const double * getDoNotSeparateThis() const
00146   { return doNotSeparateThis_;}
00148   
00151 
00152   inline double getInfinity() const
00153   { return infinity_;}
00154   
00157   inline double getObjValue() const
00158   { return objValue_;}
00159 
00161   inline double getObjOffset() const
00162   { return objOffset_;}
00163 
00165   inline double getDualTolerance() const
00166   { return dualTolerance_;}
00167 
00169   inline double getPrimalTolerance() const
00170   { return primalTolerance_;}
00171 
00173   inline double getIntegerTolerance() const
00174   { return integerTolerance_;}
00175 
00177   inline double getIntegerUpperBound() const
00178   { return integerUpperBound_;}
00179 
00181   inline double getIntegerLowerBound() const
00182   { return integerLowerBound_;}
00184   
00185   //---------------------------------------------------------------------------
00186   
00201   void loadProblem(const CoinPackedMatrix& matrix,
00202                    const double* collb, const double* colub,   
00203                    const double* obj,
00204                    const double* rowlb, const double* rowub,
00205                    bool makeRowCopy=false);
00206   
00208   
00209   //---------------------------------------------------------------------------
00210   
00213 
00214   inline void setNumCols(int value)
00215   { numCols_ = value;}
00216   
00218   inline void setNumRows(int value)
00219   { numRows_ = value;}
00220   
00222   inline void setNumElements(int value)
00223   { numElements_ = value;}
00224   
00226   inline void setNumIntegers(int value)
00227   { numIntegers_ = value;}
00228   
00230   void setColLower(const double * array, bool copyIn=true);
00231   
00233   void setColUpper(const double * array, bool copyIn=true);
00234   
00236   void setRowLower(const double * array, bool copyIn=true);
00237   
00239   void setRowUpper(const double * array, bool copyIn=true);
00240   
00248   void setRightHandSide(const double * array, bool copyIn=true);
00249 
00258   void createRightHandSide();
00259 
00261   void setObjCoefficients(const double * array, bool copyIn=true);
00262   
00264   inline void setObjSense(double value)
00265   { objSense_ = value;}
00266   
00268   void setColType(const char *array, bool copyIn=true);
00269   
00271   void setMatrixByRow(const CoinPackedMatrix * matrix, bool copyIn=true);
00272   
00274   void createMatrixByRow();
00275   
00277   void setMatrixByCol(const CoinPackedMatrix * matrix, bool copyIn=true);
00278   
00280   void setOriginalMatrixByRow(const CoinPackedMatrix * matrix, bool copyIn=true);
00281   
00283   void setOriginalMatrixByCol(const CoinPackedMatrix * matrix, bool copyIn=true);
00284 
00286   void setColSolution(const double * array, bool copyIn=true);
00287   
00289   void setRowPrice(const double * array, bool copyIn=true);
00290   
00292   void setReducedCost(const double * array, bool copyIn=true);
00293   
00295   void setRowActivity(const double * array, bool copyIn=true);
00296   
00298   void setDoNotSeparateThis(const double * array, bool copyIn=true);
00299 
00301   inline void setInfinity(double value)
00302   { infinity_ = value;}
00303   
00305   inline void setObjValue(double value)
00306   { objValue_ = value;}
00307 
00309   inline void setObjOffset(double value)
00310   { objOffset_ = value;}
00311 
00313   inline void setDualTolerance(double value)
00314   { dualTolerance_ = value;}
00315 
00317   inline void setPrimalTolerance(double value)
00318   { primalTolerance_ = value;}
00319 
00321   inline void setIntegerTolerance(double value)
00322   { integerTolerance_ = value;}
00323 
00325   inline void setIntegerUpperBound(double value)
00326   { integerUpperBound_ = value;}
00327 
00329   inline void setIntegerLowerBound(double value)
00330   { integerLowerBound_ = value;}
00332   
00333   //---------------------------------------------------------------------------
00334   
00336 
00337 
00338   CoinSnapshot(); 
00339     
00341   CoinSnapshot(const CoinSnapshot &);
00342   
00344   CoinSnapshot & operator=(const CoinSnapshot& rhs);
00345   
00347   virtual ~CoinSnapshot ();
00348   
00350 
00351 private:
00353 
00354 
00360   void gutsOfDestructor(int type);
00362   void gutsOfCopy(const CoinSnapshot & rhs);
00364 
00366 
00368   double objSense_;
00369   
00371   double infinity_;
00372   
00374   double objValue_;
00375 
00377   double objOffset_;
00378 
00380   double dualTolerance_;
00381 
00383   double primalTolerance_;
00384 
00386   double integerTolerance_;
00387 
00389   double integerUpperBound_;
00390 
00392   double integerLowerBound_;
00393 
00395   const double * colLower_;
00396   
00398   const double * colUpper_;
00399   
00401   const double * rowLower_;
00402   
00404   const double * rowUpper_;
00405   
00407   const double * rightHandSide_;
00408   
00410   const double * objCoefficients_;
00411   
00413   const char * colType_;
00414   
00416   const CoinPackedMatrix * matrixByRow_;
00417   
00419   const CoinPackedMatrix * matrixByCol_;
00420   
00422   const CoinPackedMatrix * originalMatrixByRow_;
00423   
00425   const CoinPackedMatrix * originalMatrixByCol_;
00426 
00428   const double * colSolution_;
00429   
00431   const double * rowPrice_;
00432   
00434   const double * reducedCost_;
00435   
00437   const double * rowActivity_;
00438   
00440   const double * doNotSeparateThis_;
00441 
00443   int numCols_;
00444   
00446   int numRows_;
00447   
00449   int numElements_;
00450   
00452   int numIntegers_;
00453 
00455     typedef struct {
00456       unsigned int colLower:1;
00457       unsigned int colUpper:1;
00458       unsigned int rowLower:1;
00459       unsigned int rowUpper:1;
00460       unsigned int rightHandSide:1;
00461       unsigned int objCoefficients:1;
00462       unsigned int colType:1;
00463       unsigned int matrixByRow:1;
00464       unsigned int matrixByCol:1;
00465       unsigned int originalMatrixByRow:1;
00466       unsigned int originalMatrixByCol:1;
00467       unsigned int colSolution:1;
00468       unsigned int rowPrice:1;
00469       unsigned int reducedCost:1;
00470       unsigned int rowActivity:1;
00471       unsigned int doNotSeparateThis:1;
00472   } coinOwned;
00473   coinOwned owned_;
00475 };  
00476 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines