ClpPlusMinusOneMatrix.hpp
Go to the documentation of this file.
1 /* $Id: ClpPlusMinusOneMatrix.hpp 1525 2010-02-26 17:27:59Z mjs $ */
2 // Copyright (C) 2003, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 #ifndef ClpPlusMinusOneMatrix_H
5 #define ClpPlusMinusOneMatrix_H
6 
7 
8 #include "CoinPragma.hpp"
9 
10 #include "ClpMatrixBase.hpp"
11 
17 
18 public:
21  virtual CoinPackedMatrix * getPackedMatrix() const;
24  virtual bool isColOrdered() const ;
26  virtual CoinBigIndex getNumElements() const;
28  virtual int getNumCols() const {
29  return numberColumns_;
30  }
32  virtual int getNumRows() const {
33  return numberRows_;
34  }
35 
40  virtual const double * getElements() const;
46  virtual const int * getIndices() const {
47  return indices_;
48  }
49  // and for advanced use
50  int * getMutableIndices() const {
51  return indices_;
52  }
53 
54  virtual const CoinBigIndex * getVectorStarts() const;
56  virtual const int * getVectorLengths() const;
57 
59  virtual void deleteCols(const int numDel, const int * indDel);
61  virtual void deleteRows(const int numDel, const int * indDel);
63  virtual void appendCols(int number, const CoinPackedVectorBase * const * columns);
65  virtual void appendRows(int number, const CoinPackedVectorBase * const * rows);
66 #ifndef SLIM_CLP
67 
71  virtual int appendMatrix(int number, int type,
72  const CoinBigIndex * starts, const int * index,
73  const double * element, int numberOther = -1);
74 #endif
75 
76  virtual ClpMatrixBase * reverseOrderedCopy() const;
78  virtual CoinBigIndex countBasis(
79  const int * whichColumn,
80  int & numberColumnBasic);
82  virtual void fillBasis(ClpSimplex * model,
83  const int * whichColumn,
84  int & numberColumnBasic,
85  int * row, int * start,
86  int * rowCount, int * columnCount,
87  CoinFactorizationDouble * element);
92  virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model, int * inputWeights) const;
96  virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
97  double & smallestPositive, double & largestPositive);
100  virtual void unpack(const ClpSimplex * model, CoinIndexedVector * rowArray,
101  int column) const ;
106  virtual void unpackPacked(ClpSimplex * model,
107  CoinIndexedVector * rowArray,
108  int column) const;
111  virtual void add(const ClpSimplex * model, CoinIndexedVector * rowArray,
112  int column, double multiplier) const ;
114  virtual void add(const ClpSimplex * model, double * array,
115  int column, double multiplier) const;
117  virtual void releasePackedMatrix() const;
123  virtual void setDimensions(int numrows, int numcols);
125  void checkValid(bool detail) const;
127 
133  virtual void times(double scalar,
134  const double * x, double * y) const;
136  virtual void times(double scalar,
137  const double * x, double * y,
138  const double * rowScale,
139  const double * columnScale) const;
143  virtual void transposeTimes(double scalar,
144  const double * x, double * y) const;
146  virtual void transposeTimes(double scalar,
147  const double * x, double * y,
148  const double * rowScale,
149  const double * columnScale, double * spare = NULL) const;
154  virtual void transposeTimes(const ClpSimplex * model, double scalar,
155  const CoinIndexedVector * x,
156  CoinIndexedVector * y,
157  CoinIndexedVector * z) const;
163  virtual void transposeTimesByRow(const ClpSimplex * model, double scalar,
164  const CoinIndexedVector * x,
165  CoinIndexedVector * y,
166  CoinIndexedVector * z) const;
170  virtual void subsetTransposeTimes(const ClpSimplex * model,
171  const CoinIndexedVector * x,
172  const CoinIndexedVector * y,
173  CoinIndexedVector * z) const;
176  virtual bool canCombine(const ClpSimplex * model,
177  const CoinIndexedVector * pi) const;
179  virtual void transposeTimes2(const ClpSimplex * model,
180  const CoinIndexedVector * pi1, CoinIndexedVector * dj1,
181  const CoinIndexedVector * pi2,
182  CoinIndexedVector * spare,
183  double referenceIn, double devex,
184  // Array for exact devex to say what is in reference framework
185  unsigned int * reference,
186  double * weights, double scaleFactor);
188  virtual void subsetTimes2(const ClpSimplex * model,
189  CoinIndexedVector * dj1,
190  const CoinIndexedVector * pi2, CoinIndexedVector * dj2,
191  double referenceIn, double devex,
192  // Array for exact devex to say what is in reference framework
193  unsigned int * reference,
194  double * weights, double scaleFactor);
196 
199  inline CoinBigIndex * startPositive() const {
201  return startPositive_;
202  }
204  inline CoinBigIndex * startNegative() const {
205  return startNegative_;
206  }
208 
209 
215  virtual ~ClpPlusMinusOneMatrix();
217 
228  ClpPlusMinusOneMatrix(const CoinPackedMatrix&);
230  ClpPlusMinusOneMatrix(int numberRows, int numberColumns,
231  bool columnOrdered, const int * indices,
232  const CoinBigIndex * startPositive, const CoinBigIndex * startNegative);
235  ClpPlusMinusOneMatrix (const ClpPlusMinusOneMatrix & wholeModel,
236  int numberRows, const int * whichRows,
237  int numberColumns, const int * whichColumns);
238 
241  virtual ClpMatrixBase * clone() const ;
244  virtual ClpMatrixBase * subsetClone (
245  int numberRows, const int * whichRows,
246  int numberColumns, const int * whichColumns) const ;
248  void passInCopy(int numberRows, int numberColumns,
249  bool columnOrdered, int * indices,
250  CoinBigIndex * startPositive, CoinBigIndex * startNegative);
252  virtual bool canDoPartialPricing() const;
254  virtual void partialPricing(ClpSimplex * model, double start, double end,
255  int & bestSequence, int & numberWanted);
257 
258 
259 protected:
263  mutable CoinPackedMatrix * matrix_;
265  mutable int * lengths_;
267  CoinBigIndex * startPositive_;
269  CoinBigIndex * startNegative_;
271  int * indices_;
278 
280 };
281 
282 #endif