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

ClpPlusMinusOneMatrix.hpp

00001 // Copyright (C) 2003, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef ClpPlusMinusOneMatrix_H
00004 #define ClpPlusMinusOneMatrix_H
00005 
00006 
00007 #include "CoinPragma.hpp"
00008 
00009 #include "ClpMatrixBase.hpp"
00010 
00015 class ClpPlusMinusOneMatrix : public ClpMatrixBase {
00016   
00017 public:
00020 
00021    virtual CoinPackedMatrix * getPackedMatrix() const;
00023   virtual bool isColOrdered() const ;
00025   virtual  CoinBigIndex getNumElements() const; 
00027    virtual int getNumCols() const { return numberColumns_; }
00029   virtual int getNumRows() const { return numberRows_; };
00030 
00035   virtual const double * getElements() const; 
00041   virtual const int * getIndices() const
00042   { return indices_;};
00043 
00044   virtual const CoinBigIndex * getVectorStarts() const;
00046   virtual const int * getVectorLengths() const;
00047 
00049   virtual void deleteCols(const int numDel, const int * indDel);
00051   virtual void deleteRows(const int numDel, const int * indDel);
00053   virtual void appendCols(int number, const CoinPackedVectorBase * const * columns);
00055   virtual void appendRows(int number, const CoinPackedVectorBase * const * rows);
00057   virtual ClpMatrixBase * reverseOrderedCopy() const;
00060   virtual CoinBigIndex numberInBasis(const int * columnIsBasic) const ;
00062   virtual CoinBigIndex fillBasis(const ClpSimplex * model,
00063                                 const int * columnIsBasic, int & numberBasic,
00064                                 int * row, int * column,
00065                                 double * element) const ;
00068   virtual CoinBigIndex fillBasis(const ClpSimplex * model,
00069                                  const int * whichColumn, 
00070                                  int numberRowBasic,
00071                                  int numberColumnBasic,
00072                                  int * row, int * column,
00073                                  double * element) const ;
00078   virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model,int * inputWeights) const;
00082   virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
00083                        double & smallestPositive, double & largestPositive);
00086   virtual void unpack(const ClpSimplex * model,CoinIndexedVector * rowArray,
00087                    int column) const ;
00092   virtual void unpackPacked(ClpSimplex * model,
00093                             CoinIndexedVector * rowArray,
00094                             int column) const;
00097   virtual void add(const ClpSimplex * model,CoinIndexedVector * rowArray,
00098                    int column, double multiplier) const ;
00100    virtual void releasePlusMinusOneMatrix() const { };
00102 
00108   virtual void times(double scalar,
00109                        const double * x, double * y) const;
00111   virtual void times(double scalar,
00112                      const double * x, double * y,
00113                      const double * rowScale, 
00114                      const double * columnScale) const;
00118     virtual void transposeTimes(double scalar,
00119                                 const double * x, double * y) const;
00121     virtual void transposeTimes(double scalar,
00122                                 const double * x, double * y,
00123                                 const double * rowScale, 
00124                                 const double * columnScale) const;
00129   virtual void transposeTimes(const ClpSimplex * model, double scalar,
00130                               const CoinIndexedVector * x,
00131                               CoinIndexedVector * y,
00132                               CoinIndexedVector * z) const;
00138   virtual void transposeTimesByRow(const ClpSimplex * model, double scalar,
00139                               const CoinIndexedVector * x,
00140                               CoinIndexedVector * y,
00141                               CoinIndexedVector * z) const;
00146   virtual void subsetTransposeTimes(const ClpSimplex * model,
00147                                     const CoinIndexedVector * x,
00148                                     const CoinIndexedVector * y,
00149                                     CoinIndexedVector * z) const;
00151 
00154 
00155   inline int * startPositive() const
00156   { return startPositive_;};
00158   inline int * startNegative() const
00159   { return startNegative_;};
00161 
00162 
00166    ClpPlusMinusOneMatrix();
00168    virtual ~ClpPlusMinusOneMatrix();
00170 
00174    ClpPlusMinusOneMatrix(const ClpPlusMinusOneMatrix&);
00176    ClpPlusMinusOneMatrix(const CoinPackedMatrix&);
00179   ClpPlusMinusOneMatrix (const ClpPlusMinusOneMatrix & wholeModel,
00180                     int numberRows, const int * whichRows,
00181                     int numberColumns, const int * whichColumns);
00182 
00183    ClpPlusMinusOneMatrix& operator=(const ClpPlusMinusOneMatrix&);
00185   virtual ClpMatrixBase * clone() const ;
00188   virtual ClpMatrixBase * subsetClone (
00189                     int numberRows, const int * whichRows,
00190                     int numberColumns, const int * whichColumns) const ;
00192   void passInCopy(int numberRows, int numberColumns,
00193                   bool columnOrdered, int * indices,
00194                   int * startPositive, int * startNegative);
00196   virtual bool canDoPartialPricing() const;
00198   virtual void partialPricing(ClpSimplex * model, int start, int end,
00199                       int & bestSequence, int & numberWanted);
00201    
00202     
00203 protected:
00207 
00208   mutable double * elements_;
00209   mutable int * lengths_;
00211   int * startPositive_;
00213   int * startNegative_;
00215   int * indices_;
00217   int numberRows_;
00219   int numberColumns_;
00221   bool columnOrdered_;
00222   
00224 };
00225 
00226 #endif

Generated on Wed Dec 3 14:37:29 2003 for CLP by doxygen 1.3.5