/home/coin/SVN-release/Cbc-1.1.1/Clp/src/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:
00025   virtual ClpMatrixBase * reverseOrderedCopy() const;
00027   virtual CoinBigIndex countBasis(ClpSimplex * model,
00028                                  const int * whichColumn, 
00029                                  int numberRowBasic,
00030                                   int & numberColumnBasic);
00032   virtual void fillBasis(ClpSimplex * model,
00033                                  const int * whichColumn, 
00034                                  int & numberColumnBasic,
00035                                  int * row, int * start,
00036                                  int * rowCount, int * columnCount,
00037                                  double * element);
00040   virtual void unpack(const ClpSimplex * model,CoinIndexedVector * rowArray,
00041                    int column) const ;
00046   virtual void unpackPacked(ClpSimplex * model,
00047                             CoinIndexedVector * rowArray,
00048                             int column) const;
00051   virtual void add(const ClpSimplex * model,CoinIndexedVector * rowArray,
00052                    int column, double multiplier) const ;
00054   virtual void add(const ClpSimplex * model,double * array,
00055                    int column, double multiplier) const;
00057   virtual void partialPricing(ClpSimplex * model, double start, double end,
00058                       int & bestSequence, int & numberWanted);
00060   virtual int hiddenRows() const;
00062 
00069   virtual void transposeTimes(const ClpSimplex * model, double scalar,
00070                               const CoinIndexedVector * x,
00071                               CoinIndexedVector * y,
00072                               CoinIndexedVector * z) const;
00078   virtual void transposeTimesByRow(const ClpSimplex * model, double scalar,
00079                               const CoinIndexedVector * x,
00080                               CoinIndexedVector * y,
00081                               CoinIndexedVector * z) const;
00085   virtual void subsetTransposeTimes(const ClpSimplex * model,
00086                                     const CoinIndexedVector * x,
00087                                     const CoinIndexedVector * y,
00088                                     CoinIndexedVector * z) const;
00095   virtual int extendUpdated(ClpSimplex * model,CoinIndexedVector * update,int mode);
00101   virtual void primalExpanded(ClpSimplex * model,int mode);
00110   virtual void dualExpanded(ClpSimplex * model,CoinIndexedVector * array,
00111                             double * other,int mode);
00129   virtual int generalExpanded(ClpSimplex * model,int mode,int & number);
00133   virtual int updatePivot(ClpSimplex * model,double oldInValue, double oldOutValue);
00135   virtual void useEffectiveRhs(ClpSimplex * model,bool cheapest=true);
00139   virtual double * rhsOffset(ClpSimplex * model,bool forceRefresh=false,
00140                                 bool check=false);
00153   virtual int synchronize(ClpSimplex * model,int mode);
00155   virtual void correctSequence(int & sequenceIn, int & sequenceOut) const;
00157 
00158 
00159 
00163    ClpGubMatrix();
00165    virtual ~ClpGubMatrix();
00167 
00171    ClpGubMatrix(const ClpGubMatrix&);
00173    ClpGubMatrix(const CoinPackedMatrix&);
00176   ClpGubMatrix (const ClpGubMatrix & wholeModel,
00177                     int numberRows, const int * whichRows,
00178                     int numberColumns, const int * whichColumns);
00179   ClpGubMatrix (const CoinPackedMatrix & wholeModel,
00180                     int numberRows, const int * whichRows,
00181                     int numberColumns, const int * whichColumns);
00182 
00184    ClpGubMatrix(CoinPackedMatrix * matrix);
00185 
00188    ClpGubMatrix(ClpPackedMatrix * matrix, int numberSets,
00189                 const int * start, const int * end,
00190                 const double * lower, const double * upper,
00191                 const unsigned char * status=NULL);
00192 
00193    ClpGubMatrix& operator=(const ClpGubMatrix&);
00195   virtual ClpMatrixBase * clone() const ;
00198   virtual ClpMatrixBase * subsetClone (
00199                     int numberRows, const int * whichRows,
00200                     int numberColumns, const int * whichColumns) const ;
00202   void redoSet(ClpSimplex * model,int newKey, int oldKey, int iSet); 
00204 
00206 
00207   inline ClpSimplex::Status getStatus(int sequence) const
00208   {return static_cast<ClpSimplex::Status> (status_[sequence]&7);};
00209   inline void setStatus(int sequence, ClpSimplex::Status status)
00210   {
00211     unsigned char & st_byte = status_[sequence];
00212     st_byte &= ~7;
00213     st_byte |= status;
00214   };
00216   inline void setFlagged( int sequence)
00217   {
00218     status_[sequence] |= 64;
00219   };
00220   inline void clearFlagged( int sequence)
00221   {
00222     status_[sequence] &= ~64;
00223   };
00224   inline bool flagged(int sequence) const
00225   {return ((status_[sequence]&64)!=0);};
00227   inline void setAbove( int sequence)
00228   {
00229     unsigned char iStat = status_[sequence];
00230     iStat &= ~24;
00231     status_[sequence] = iStat|16;
00232   };
00234   inline void setFeasible( int sequence)
00235   {
00236     unsigned char iStat = status_[sequence];
00237     iStat &= ~24;
00238     status_[sequence] = iStat|8;
00239   };
00241   inline void setBelow( int sequence)
00242   {
00243     unsigned char iStat = status_[sequence];
00244     iStat &= ~24;
00245     status_[sequence] = iStat;
00246   };
00247   inline double weight( int sequence) const
00248   {
00249     int iStat = status_[sequence]&31;
00250     iStat = iStat>>3;
00251     return (double) (iStat-1);
00252   };
00254   inline int * start() const
00255   { return start_;};
00257   inline int * end() const
00258   { return end_;};
00260   inline double * lower() const
00261   { return lower_;};
00263   inline double * upper() const
00264   { return upper_;};
00266   inline int * keyVariable() const
00267   { return keyVariable_;};
00269   inline int * backward() const
00270   { return backward_;};
00272   inline int numberSets() const
00273   { return numberSets_;};
00275   void switchOffCheck();
00277    
00278     
00279 protected:
00283 
00284   double sumDualInfeasibilities_;
00286   double sumPrimalInfeasibilities_;
00288   double sumOfRelaxedDualInfeasibilities_;
00290   double sumOfRelaxedPrimalInfeasibilities_;
00292   double infeasibilityWeight_;
00294   int * start_;
00296   int * end_;
00298   double * lower_;
00300   double * upper_;
00302   mutable unsigned char * status_;
00304   unsigned char * saveStatus_;
00306   int * savedKeyVariable_;
00308   int * backward_;
00310   int * backToPivotRow_;
00312   double * changeCost_;
00314   mutable int * keyVariable_;
00318   mutable int * next_;
00320   int * toIndex_;
00321   // Reverse pointer from index to set
00322   int * fromIndex_; 
00324   ClpSimplex * model_;
00326   int numberDualInfeasibilities_;
00328   int numberPrimalInfeasibilities_;
00334   int noCheck_;
00336   int numberSets_;
00338   int saveNumber_;
00340   int possiblePivotKey_;
00342   int gubSlackIn_;
00344   int firstGub_;
00346   int lastGub_;
00349   int gubType_;
00351 };
00352 
00353 #endif

Generated on Thu May 15 21:59:05 2008 by  doxygen 1.4.7