Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

/files2/home/rwaltz/Software/COIN/Clp/include/ClpGubMatrix.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2003, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef ClpGubMatrix_H
00004 #define ClpGubMatrix_H
00005 
00006 
00007 #include "CoinPragma.hpp"
00008 
00009 #include "ClpPackedMatrix.hpp"
00010 class ClpSimplex;
00019 class ClpGubMatrix : public ClpPackedMatrix {
00020   
00021 public:
00023   virtual ClpMatrixBase * reverseOrderedCopy() const;
00026   virtual CoinBigIndex fillBasis(ClpSimplex * model,
00027                                  const int * whichColumn, 
00028                                  int numberRowBasic,
00029                                  int & numberColumnBasic,
00030                                  int * row, int * column,
00031                                  double * element)  ;
00034   virtual void unpack(const ClpSimplex * model,CoinIndexedVector * rowArray,
00035                    int column) const ;
00040   virtual void unpackPacked(ClpSimplex * model,
00041                             CoinIndexedVector * rowArray,
00042                             int column) const;
00045   virtual void add(const ClpSimplex * model,CoinIndexedVector * rowArray,
00046                    int column, double multiplier) const ;
00048   virtual void add(const ClpSimplex * model,double * array,
00049                    int column, double multiplier) const;
00051   virtual void partialPricing(ClpSimplex * model, double start, double end,
00052                       int & bestSequence, int & numberWanted);
00054   virtual int hiddenRows() const;
00056 
00063   virtual void transposeTimes(const ClpSimplex * model, double scalar,
00064                               const CoinIndexedVector * x,
00065                               CoinIndexedVector * y,
00066                               CoinIndexedVector * z) const;
00072   virtual void transposeTimesByRow(const ClpSimplex * model, double scalar,
00073                               const CoinIndexedVector * x,
00074                               CoinIndexedVector * y,
00075                               CoinIndexedVector * z) const;
00080   virtual void subsetTransposeTimes(const ClpSimplex * model,
00081                                     const CoinIndexedVector * x,
00082                                     const CoinIndexedVector * y,
00083                                     CoinIndexedVector * z) const;
00090   virtual int extendUpdated(ClpSimplex * model,CoinIndexedVector * update,int mode);
00096   virtual void primalExpanded(ClpSimplex * model,int mode);
00105   virtual void dualExpanded(ClpSimplex * model,CoinIndexedVector * array,
00106                             double * other,int mode);
00124   virtual int generalExpanded(ClpSimplex * model,int mode,int & number);
00128   virtual int updatePivot(ClpSimplex * model,double oldInValue, double oldOutValue);
00130   virtual void useEffectiveRhs(ClpSimplex * model,bool cheapest=true);
00134   virtual double * rhsOffset(ClpSimplex * model,bool forceRefresh=false,
00135                                 bool check=false);
00148   virtual int synchronize(ClpSimplex * model,int mode);
00150   virtual void correctSequence(int & sequenceIn, int & sequenceOut) const;
00152 
00153 
00154 
00158    ClpGubMatrix();
00160    virtual ~ClpGubMatrix();
00162 
00166    ClpGubMatrix(const ClpGubMatrix&);
00168    ClpGubMatrix(const CoinPackedMatrix&);
00171   ClpGubMatrix (const ClpGubMatrix & wholeModel,
00172                     int numberRows, const int * whichRows,
00173                     int numberColumns, const int * whichColumns);
00174   ClpGubMatrix (const CoinPackedMatrix & wholeModel,
00175                     int numberRows, const int * whichRows,
00176                     int numberColumns, const int * whichColumns);
00177 
00179    ClpGubMatrix(CoinPackedMatrix * matrix);
00180 
00183    ClpGubMatrix(ClpPackedMatrix * matrix, int numberSets,
00184                 const int * start, const int * end,
00185                 const double * lower, const double * upper,
00186                 const unsigned char * status=NULL);
00187 
00188    ClpGubMatrix& operator=(const ClpGubMatrix&);
00190   virtual ClpMatrixBase * clone() const ;
00193   virtual ClpMatrixBase * subsetClone (
00194                     int numberRows, const int * whichRows,
00195                     int numberColumns, const int * whichColumns) const ;
00197   void redoSet(ClpSimplex * model,int newKey, int oldKey, int iSet); 
00199 
00201 
00202   inline ClpSimplex::Status getStatus(int sequence) const
00203   {return static_cast<ClpSimplex::Status> (status_[sequence]&7);};
00204   inline void setStatus(int sequence, ClpSimplex::Status status)
00205   {
00206     unsigned char & st_byte = status_[sequence];
00207     st_byte &= ~7;
00208     st_byte |= status;
00209   };
00211   inline void setFlagged( int sequence)
00212   {
00213     status_[sequence] |= 64;
00214   };
00215   inline void clearFlagged( int sequence)
00216   {
00217     status_[sequence] &= ~64;
00218   };
00219   inline bool flagged(int sequence) const
00220   {return ((status_[sequence]&64)!=0);};
00222   inline void setAbove( int sequence)
00223   {
00224     unsigned char iStat = status_[sequence];
00225     iStat &= ~24;
00226     status_[sequence] = iStat|16;
00227   };
00229   inline void setFeasible( int sequence)
00230   {
00231     unsigned char iStat = status_[sequence];
00232     iStat &= ~24;
00233     status_[sequence] = iStat|8;
00234   };
00236   inline void setBelow( int sequence)
00237   {
00238     unsigned char iStat = status_[sequence];
00239     iStat &= ~24;
00240     status_[sequence] = iStat;
00241   };
00242   inline double weight( int sequence) const
00243   {
00244     int iStat = status_[sequence]&31;
00245     iStat = iStat>>3;
00246     return (double) (iStat-1);
00247   };
00249   inline int * start() const
00250   { return start_;};
00252   inline int * end() const
00253   { return end_;};
00255   inline double * lower() const
00256   { return lower_;};
00258   inline double * upper() const
00259   { return upper_;};
00261   inline int * keyVariable() const
00262   { return keyVariable_;};
00264   inline int * backward() const
00265   { return backward_;};
00267   inline int numberSets() const
00268   { return numberSets_;};
00270   void ClpGubMatrix::switchOffCheck();
00272    
00273     
00274 protected:
00278 
00279   double sumDualInfeasibilities_;
00281   double sumPrimalInfeasibilities_;
00283   double sumOfRelaxedDualInfeasibilities_;
00285   double sumOfRelaxedPrimalInfeasibilities_;
00287   double infeasibilityWeight_;
00289   int * start_;
00291   int * end_;
00293   double * lower_;
00295   double * upper_;
00297   mutable unsigned char * status_;
00299   unsigned char * saveStatus_;
00301   int * savedKeyVariable_;
00303   int * backward_;
00305   int * backToPivotRow_;
00307   double * changeCost_;
00309   mutable int * keyVariable_;
00313   mutable int * next_;
00315   int * toIndex_;
00316   // Reverse pointer from index to set
00317   int * fromIndex_; 
00319   ClpSimplex * model_;
00321   int numberDualInfeasibilities_;
00323   int numberPrimalInfeasibilities_;
00329   int noCheck_;
00331   int numberSets_;
00333   int saveNumber_;
00335   int possiblePivotKey_;
00337   int gubSlackIn_;
00339   int firstGub_;
00341   int lastGub_;
00344   int gubType_;
00346 };
00347 
00348 #endif

Generated on Fri Aug 6 11:42:58 2004 by doxygen 1.3.5