/home/coin/SVN-release/Cbc-1.1.1/Clp/src/ClpDynamicMatrix.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2004, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef ClpDynamicMatrix_H
00004 #define ClpDynamicMatrix_H
00005 
00006 
00007 #include "CoinPragma.hpp"
00008 
00009 #include "ClpPackedMatrix.hpp"
00010 class ClpSimplex;
00017 class ClpDynamicMatrix : public ClpPackedMatrix {
00018   
00019 public:
00021   enum DynamicStatus {
00022     soloKey = 0x00,
00023     inSmall = 0x01,
00024     atUpperBound = 0x02,
00025     atLowerBound = 0x03
00026   };
00029 
00030   virtual void partialPricing(ClpSimplex * model, double start, double end,
00031                       int & bestSequence, int & numberWanted);
00032 
00036   virtual int updatePivot(ClpSimplex * model,double oldInValue, double oldOutValue);
00040   virtual double * rhsOffset(ClpSimplex * model,bool forceRefresh=false,
00041                                 bool check=false);
00045   virtual void times(double scalar,
00046                        const double * x, double * y) const;
00048   void modifyOffset(int sequence, double amount);
00050   double keyValue(int iSet) const;
00059   virtual void dualExpanded(ClpSimplex * model,CoinIndexedVector * array,
00060                             double * other,int mode);
00078   virtual int generalExpanded(ClpSimplex * model,int mode,int & number);
00083   virtual int refresh(ClpSimplex * model);
00087   virtual void createVariable(ClpSimplex * model, int & bestSequence);
00089   virtual double reducedCost( ClpSimplex * model,int sequence) const;
00091   void gubCrash();
00093   void initialProblem();
00095   int addColumn(int numberEntries,const int * row, const float * element,
00096                  float cost, float lower, float upper, int iSet,
00097                  DynamicStatus status);
00102   virtual void packDown(const int * in, int numberToPack) {};
00104   inline double columnLower(int sequence) const
00105   { if (columnLower_) return columnLower_[sequence]; else return 0.0;};
00107   inline double columnUpper(int sequence) const
00108   { if (columnUpper_) return columnUpper_[sequence]; else return COIN_DBL_MAX;};
00109 
00111 
00112 
00113 
00117    ClpDynamicMatrix();
00124   ClpDynamicMatrix(ClpSimplex * model, int numberSets,
00125                    int numberColumns, const int * starts,
00126                    const double * lower, const double * upper,
00127                    const int * startColumn, const int * row,
00128                    const double * element, const double * cost,
00129                    const double * columnLower=NULL, const double * columnUpper=NULL,
00130                    const unsigned char * status=NULL,
00131                    const unsigned char * dynamicStatus=NULL);
00132   
00134    virtual ~ClpDynamicMatrix();
00136 
00140    ClpDynamicMatrix(const ClpDynamicMatrix&);
00142    ClpDynamicMatrix(const CoinPackedMatrix&);
00143 
00144    ClpDynamicMatrix& operator=(const ClpDynamicMatrix&);
00146   virtual ClpMatrixBase * clone() const ;
00148 
00150 
00151   inline ClpSimplex::Status getStatus(int sequence) const
00152   {return static_cast<ClpSimplex::Status> (status_[sequence]&7);};
00153   inline void setStatus(int sequence, ClpSimplex::Status status)
00154   {
00155     unsigned char & st_byte = status_[sequence];
00156     st_byte &= ~7;
00157     st_byte |= status;
00158   };
00160   inline int numberSets() const
00161   { return numberSets_;};
00163   inline bool flagged(int i) const {
00164     return (dynamicStatus_[i]&8)!=0;
00165   };
00166   inline void setFlagged(int i) {
00167     dynamicStatus_[i] |= 8;
00168   };
00169   inline void unsetFlagged(int i) {
00170     dynamicStatus_[i]  &= ~8;;
00171   };
00172   inline void setDynamicStatus(int sequence, DynamicStatus status)
00173   {
00174     unsigned char & st_byte = dynamicStatus_[sequence];
00175     st_byte &= ~7;
00176     st_byte |= status;
00177   };
00178   inline DynamicStatus getDynamicStatus(int sequence) const
00179   {return static_cast<DynamicStatus> (dynamicStatus_[sequence]&7);};
00181   inline double objectiveOffset() const
00182   { return objectiveOffset_;};
00184   inline CoinBigIndex * startColumn() const
00185   { return startColumn_;};
00187   inline int * row() const
00188   { return row_;};
00190   inline float * element() const
00191   { return element_;};
00193   inline float * cost() const
00194   { return cost_;};
00196   inline int * id() const
00197   { return id_;};
00199   inline float * columnLower() const
00200   { return columnLower_;};
00202   inline float * columnUpper() const
00203   { return columnUpper_;};
00205   inline float * lowerSet() const
00206   { return lowerSet_;};
00208   inline float * upperSet() const
00209   { return upperSet_;};
00211   inline int numberGubColumns() const
00212   { return numberGubColumns_;};
00214   inline int firstAvailable() const
00215   { return firstAvailable_;};
00217   inline int firstDynamic() const
00218   { return firstDynamic_;};
00220   inline int lastDynamic() const
00221   { return lastDynamic_;};
00223   inline int numberStaticRows() const
00224   { return numberStaticRows_;};
00226   inline int numberElements() const
00227   { return numberElements_;};
00228   inline int * keyVariable() const
00229   { return keyVariable_;};
00231   void switchOffCheck();
00233   inline unsigned char * gubRowStatus() const
00234   { return status_;};
00236   inline unsigned char * dynamicStatus() const
00237   { return dynamicStatus_;};
00239   int whichSet (int sequence) const;
00241    
00242     
00243 protected:
00247 
00248   double sumDualInfeasibilities_;
00250   double sumPrimalInfeasibilities_;
00252   double sumOfRelaxedDualInfeasibilities_;
00254   double sumOfRelaxedPrimalInfeasibilities_;
00256   double savedBestGubDual_;
00258   int savedBestSet_;
00260   int * backToPivotRow_;
00262   mutable int * keyVariable_;
00264   int * toIndex_;
00265   // Reverse pointer from index to set
00266   int * fromIndex_; 
00268   int numberSets_;
00270   int numberActiveSets_;
00272   double objectiveOffset_;
00274   float * lowerSet_;
00276   float * upperSet_;
00278   unsigned char * status_;
00280   ClpSimplex * model_;
00282   int firstAvailable_;
00284   int firstAvailableBefore_;
00286   int firstDynamic_;
00288   int lastDynamic_;
00290   int numberStaticRows_;
00292   int numberElements_;
00294   int numberDualInfeasibilities_;
00296   int numberPrimalInfeasibilities_;
00302   int noCheck_;
00304   double infeasibilityWeight_;
00306   int numberGubColumns_;
00308   int maximumGubColumns_;
00310   int maximumElements_;
00312   int * startSet_;
00314   int * next_;
00316   CoinBigIndex * startColumn_;
00318   int * row_;
00320   float * element_;
00322   float * cost_;
00324   int * id_;
00326   unsigned char * dynamicStatus_;
00328   float * columnLower_;
00330   float * columnUpper_;
00332 };
00333 
00334 #endif

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