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

/files2/home/rwaltz/Software/COIN/Clp/include/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   };
00028   virtual void partialPricing(ClpSimplex * model, double start, double end,
00029                       int & bestSequence, int & numberWanted);
00030 
00034   virtual int updatePivot(ClpSimplex * model,double oldInValue, double oldOutValue);
00038   virtual double * rhsOffset(ClpSimplex * model,bool forceRefresh=false,
00039                                 bool check=false);
00043   virtual void times(double scalar,
00044                        const double * x, double * y) const;
00046   void modifyOffset(int sequence, double amount);
00048   double keyValue(int iSet) const;
00057   virtual void dualExpanded(ClpSimplex * model,CoinIndexedVector * array,
00058                             double * other,int mode);
00076   virtual int generalExpanded(ClpSimplex * model,int mode,int & number);
00081   virtual int refresh(ClpSimplex * model);
00085   virtual void createVariable(ClpSimplex * model, int & bestSequence);
00087   virtual double reducedCost( ClpSimplex * model,int sequence) const;
00089   void gubCrash();
00091   void initialProblem();
00093   int addColumn(int numberEntries,const int * row, const float * element,
00094                  float cost, float lower, float upper, int iSet,
00095                  DynamicStatus status);
00100   virtual void packDown(const int * in, int numberToPack) {};
00102   inline double columnLower(int sequence) const
00103   { if (columnLower_) return columnLower_[sequence]; else return 0.0;};
00105   inline double columnUpper(int sequence) const
00106   { if (columnUpper_) return columnUpper_[sequence]; else return COIN_DBL_MAX;};
00107 
00109 
00110 
00111 
00115    ClpDynamicMatrix();
00122   ClpDynamicMatrix(ClpSimplex * model, int numberSets,
00123                    int numberColumns, const int * starts,
00124                    const double * lower, const double * upper,
00125                    const int * startColumn, const int * row,
00126                    const double * element, const double * cost,
00127                    const double * columnLower=NULL, const double * columnUpper=NULL,
00128                    const unsigned char * status=NULL,
00129                    const unsigned char * dynamicStatus=NULL);
00130   
00132    virtual ~ClpDynamicMatrix();
00134 
00138    ClpDynamicMatrix(const ClpDynamicMatrix&);
00140    ClpDynamicMatrix(const CoinPackedMatrix&);
00141 
00142    ClpDynamicMatrix& operator=(const ClpDynamicMatrix&);
00144   virtual ClpMatrixBase * clone() const ;
00146 
00148 
00149   inline ClpSimplex::Status getStatus(int sequence) const
00150   {return static_cast<ClpSimplex::Status> (status_[sequence]&7);};
00151   inline void setStatus(int sequence, ClpSimplex::Status status)
00152   {
00153     unsigned char & st_byte = status_[sequence];
00154     st_byte &= ~7;
00155     st_byte |= status;
00156   };
00158   inline int numberSets() const
00159   { return numberSets_;};
00161   inline bool flagged(int i) const {
00162     return (dynamicStatus_[i]&8)!=0;
00163   };
00164   inline void setFlagged(int i) {
00165     dynamicStatus_[i] |= 8;
00166   };
00167   inline void unsetFlagged(int i) {
00168     dynamicStatus_[i]  &= ~8;;
00169   };
00170   inline void setDynamicStatus(int sequence, DynamicStatus status)
00171   {
00172     unsigned char & st_byte = dynamicStatus_[sequence];
00173     st_byte &= ~7;
00174     st_byte |= status;
00175   };
00176   inline DynamicStatus getDynamicStatus(int sequence) const
00177   {return static_cast<DynamicStatus> (dynamicStatus_[sequence]&7);};
00179   inline double objectiveOffset() const
00180   { return objectiveOffset_;};
00182   inline CoinBigIndex * startColumn() const
00183   { return startColumn_;};
00185   inline int * row() const
00186   { return row_;};
00188   inline float * element() const
00189   { return element_;};
00191   inline float * cost() const
00192   { return cost_;};
00194   inline int * id() const
00195   { return id_;};
00197   inline float * columnLower() const
00198   { return columnLower_;};
00200   inline float * columnUpper() const
00201   { return columnUpper_;};
00203   inline float * lowerSet() const
00204   { return lowerSet_;};
00206   inline float * upperSet() const
00207   { return upperSet_;};
00209   inline int numberGubColumns() const
00210   { return numberGubColumns_;};
00212   inline int firstAvailable() const
00213   { return firstAvailable_;};
00215   inline int firstDynamic() const
00216   { return firstDynamic_;};
00218   inline int lastDynamic() const
00219   { return lastDynamic_;};
00221   inline int numberStaticRows() const
00222   { return numberStaticRows_;};
00224   inline int numberElements() const
00225   { return numberElements_;};
00226   inline int * keyVariable() const
00227   { return keyVariable_;};
00229   void switchOffCheck();
00231   inline unsigned char * gubRowStatus() const
00232   { return status_;};
00234   inline unsigned char * dynamicStatus() const
00235   { return dynamicStatus_;};
00237   int whichSet (int sequence) const;
00239    
00240     
00241 protected:
00245 
00246   double sumDualInfeasibilities_;
00248   double sumPrimalInfeasibilities_;
00250   double sumOfRelaxedDualInfeasibilities_;
00252   double sumOfRelaxedPrimalInfeasibilities_;
00254   double savedBestGubDual_;
00256   int savedBestSet_;
00258   int * backToPivotRow_;
00260   mutable int * keyVariable_;
00262   int * toIndex_;
00263   // Reverse pointer from index to set
00264   int * fromIndex_; 
00266   int numberSets_;
00268   int numberActiveSets_;
00270   double objectiveOffset_;
00272   float * lowerSet_;
00274   float * upperSet_;
00276   unsigned char * status_;
00278   ClpSimplex * model_;
00280   int firstAvailable_;
00282   int firstAvailableBefore_;
00284   int firstDynamic_;
00286   int lastDynamic_;
00288   int numberStaticRows_;
00290   int numberElements_;
00292   int numberDualInfeasibilities_;
00294   int numberPrimalInfeasibilities_;
00300   int noCheck_;
00302   double infeasibilityWeight_;
00304   int numberGubColumns_;
00306   int maximumGubColumns_;
00308   int maximumElements_;
00310   int * startSet_;
00312   int * next_;
00314   CoinBigIndex * startColumn_;
00316   int * row_;
00318   float * element_;
00320   float * cost_;
00322   int * id_;
00324   unsigned char * dynamicStatus_;
00326   float * columnLower_;
00328   float * columnUpper_;
00330 };
00331 
00332 #endif

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