00001
00002
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