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 fillBasis(ClpSimplex * model,
00061 const int * whichColumn,
00062 int numberRowBasic,
00063 int & numberColumnBasic,
00064 int * row, int * column,
00065 double * element) ;
00070 virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model,int * inputWeights) const;
00074 virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
00075 double & smallestPositive, double & largestPositive);
00078 virtual void unpack(const ClpSimplex * model,CoinIndexedVector * rowArray,
00079 int column) const ;
00084 virtual void unpackPacked(ClpSimplex * model,
00085 CoinIndexedVector * rowArray,
00086 int column) const;
00089 virtual void add(const ClpSimplex * model,CoinIndexedVector * rowArray,
00090 int column, double multiplier) const ;
00092 virtual void add(const ClpSimplex * model,double * array,
00093 int column, double multiplier) const;
00095 virtual void releasePackedMatrix() const;
00097
00103 virtual void times(double scalar,
00104 const double * x, double * y) const;
00106 virtual void times(double scalar,
00107 const double * x, double * y,
00108 const double * rowScale,
00109 const double * columnScale) const;
00113 virtual void transposeTimes(double scalar,
00114 const double * x, double * y) const;
00116 virtual void transposeTimes(double scalar,
00117 const double * x, double * y,
00118 const double * rowScale,
00119 const double * columnScale) const;
00124 virtual void transposeTimes(const ClpSimplex * model, double scalar,
00125 const CoinIndexedVector * x,
00126 CoinIndexedVector * y,
00127 CoinIndexedVector * z) const;
00133 virtual void transposeTimesByRow(const ClpSimplex * model, double scalar,
00134 const CoinIndexedVector * x,
00135 CoinIndexedVector * y,
00136 CoinIndexedVector * z) const;
00141 virtual void subsetTransposeTimes(const ClpSimplex * model,
00142 const CoinIndexedVector * x,
00143 const CoinIndexedVector * y,
00144 CoinIndexedVector * z) const;
00146
00149
00150 inline CoinBigIndex * startPositive() const
00151 { return startPositive_;};
00153 inline CoinBigIndex * startNegative() const
00154 { return startNegative_;};
00156
00157
00161 ClpPlusMinusOneMatrix();
00163 virtual ~ClpPlusMinusOneMatrix();
00165
00169 ClpPlusMinusOneMatrix(const ClpPlusMinusOneMatrix&);
00171 ClpPlusMinusOneMatrix(const CoinPackedMatrix&);
00173 ClpPlusMinusOneMatrix(int numberRows, int numberColumns,
00174 bool columnOrdered, const int * indices,
00175 const CoinBigIndex * startPositive, const CoinBigIndex * startNegative);
00178 ClpPlusMinusOneMatrix (const ClpPlusMinusOneMatrix & wholeModel,
00179 int numberRows, const int * whichRows,
00180 int numberColumns, const int * whichColumns);
00181
00182 ClpPlusMinusOneMatrix& operator=(const ClpPlusMinusOneMatrix&);
00184 virtual ClpMatrixBase * clone() const ;
00187 virtual ClpMatrixBase * subsetClone (
00188 int numberRows, const int * whichRows,
00189 int numberColumns, const int * whichColumns) const ;
00191 void passInCopy(int numberRows, int numberColumns,
00192 bool columnOrdered, int * indices,
00193 CoinBigIndex * startPositive, CoinBigIndex * startNegative);
00195 virtual bool canDoPartialPricing() const;
00197 virtual void partialPricing(ClpSimplex * model, double start, double end,
00198 int & bestSequence, int & numberWanted);
00200
00201
00202 protected:
00206
00207 mutable double * elements_;
00208 mutable int * lengths_;
00210 CoinBigIndex * startPositive_;
00212 CoinBigIndex * startNegative_;
00214 int * indices_;
00216 int numberRows_;
00218 int numberColumns_;
00220 bool columnOrdered_;
00221
00223 };
00224
00225 #endif