ClpPlusMinusOneMatrix.hpp
Go to the documentation of this file.
1 /* $Id: ClpPlusMinusOneMatrix.hpp 2078 2015-01-05 12:39:49Z forrest $ */
2 // Copyright (C) 2003, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 #ifndef ClpPlusMinusOneMatrix_H
7 #define ClpPlusMinusOneMatrix_H
8 
9 
10 #include "CoinPragma.hpp"
11 
12 #include "ClpMatrixBase.hpp"
13 
19 
20 public:
23  virtual CoinPackedMatrix * getPackedMatrix() const;
26  virtual bool isColOrdered() const ;
28  virtual CoinBigIndex getNumElements() const;
30  virtual int getNumCols() const {
31  return numberColumns_;
32  }
34  virtual int getNumRows() const {
35  return numberRows_;
36  }
37 
42  virtual const double * getElements() const;
48  virtual const int * getIndices() const {
49  return indices_;
50  }
51  // and for advanced use
52  int * getMutableIndices() const {
53  return indices_;
54  }
55 
56  virtual const CoinBigIndex * getVectorStarts() const;
58  virtual const int * getVectorLengths() const;
59 
61  virtual void deleteCols(const int numDel, const int * indDel);
63  virtual void deleteRows(const int numDel, const int * indDel);
65  virtual void appendCols(int number, const CoinPackedVectorBase * const * columns);
67  virtual void appendRows(int number, const CoinPackedVectorBase * const * rows);
68 #ifndef SLIM_CLP
69 
73  virtual int appendMatrix(int number, int type,
74  const CoinBigIndex * starts, const int * index,
75  const double * element, int numberOther = -1);
76 #endif
77 
78  virtual ClpMatrixBase * reverseOrderedCopy() const;
80  virtual CoinBigIndex countBasis(
81  const int * whichColumn,
82  int & numberColumnBasic);
84  virtual void fillBasis(ClpSimplex * model,
85  const int * whichColumn,
86  int & numberColumnBasic,
87  int * row, int * start,
88  int * rowCount, int * columnCount,
89  CoinFactorizationDouble * element);
94  virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model, int * inputWeights) const;
98  virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
99  double & smallestPositive, double & largestPositive);
102  virtual void unpack(const ClpSimplex * model, CoinIndexedVector * rowArray,
103  int column) const ;
108  virtual void unpackPacked(ClpSimplex * model,
109  CoinIndexedVector * rowArray,
110  int column) const;
113  virtual void add(const ClpSimplex * model, CoinIndexedVector * rowArray,
114  int column, double multiplier) const ;
116  virtual void add(const ClpSimplex * model, double * array,
117  int column, double multiplier) const;
119  virtual void releasePackedMatrix() const;
125  virtual void setDimensions(int numrows, int numcols);
127  void checkValid(bool detail) const;
129 
135  virtual void times(double scalar,
136  const double * x, double * y) const;
138  virtual void times(double scalar,
139  const double * x, double * y,
140  const double * rowScale,
141  const double * columnScale) const;
145  virtual void transposeTimes(double scalar,
146  const double * x, double * y) const;
148  virtual void transposeTimes(double scalar,
149  const double * x, double * y,
150  const double * rowScale,
151  const double * columnScale, double * spare = NULL) const;
156  virtual void transposeTimes(const ClpSimplex * model, double scalar,
157  const CoinIndexedVector * x,
158  CoinIndexedVector * y,
159  CoinIndexedVector * z) const;
165  virtual void transposeTimesByRow(const ClpSimplex * model, double scalar,
166  const CoinIndexedVector * x,
167  CoinIndexedVector * y,
168  CoinIndexedVector * z) const;
172  virtual void subsetTransposeTimes(const ClpSimplex * model,
173  const CoinIndexedVector * x,
174  const CoinIndexedVector * y,
175  CoinIndexedVector * z) const;
178  virtual bool canCombine(const ClpSimplex * model,
179  const CoinIndexedVector * pi) const;
181  virtual void transposeTimes2(const ClpSimplex * model,
182  const CoinIndexedVector * pi1, CoinIndexedVector * dj1,
183  const CoinIndexedVector * pi2,
184  CoinIndexedVector * spare,
185  double referenceIn, double devex,
186  // Array for exact devex to say what is in reference framework
187  unsigned int * reference,
188  double * weights, double scaleFactor);
190  virtual void subsetTimes2(const ClpSimplex * model,
191  CoinIndexedVector * dj1,
192  const CoinIndexedVector * pi2, CoinIndexedVector * dj2,
193  double referenceIn, double devex,
194  // Array for exact devex to say what is in reference framework
195  unsigned int * reference,
196  double * weights, double scaleFactor);
198 
201  inline CoinBigIndex * startPositive() const {
203  return startPositive_;
204  }
206  inline CoinBigIndex * startNegative() const {
207  return startNegative_;
208  }
210 
211 
217  virtual ~ClpPlusMinusOneMatrix();
219 
232  ClpPlusMinusOneMatrix(int numberRows, int numberColumns,
233  bool columnOrdered, const int * indices,
237  ClpPlusMinusOneMatrix (const ClpPlusMinusOneMatrix & wholeModel,
238  int numberRows, const int * whichRows,
239  int numberColumns, const int * whichColumns);
240 
243  virtual ClpMatrixBase * clone() const ;
246  virtual ClpMatrixBase * subsetClone (
247  int numberRows, const int * whichRows,
248  int numberColumns, const int * whichColumns) const ;
250  void passInCopy(int numberRows, int numberColumns,
251  bool columnOrdered, int * indices,
254  virtual bool canDoPartialPricing() const;
256  virtual void partialPricing(ClpSimplex * model, double start, double end,
257  int & bestSequence, int & numberWanted);
259 
260 
261 protected:
265  mutable CoinPackedMatrix * matrix_;
267  mutable int * lengths_;
278 #ifdef CLP_PLUS_ONE_MATRIX
279 
282  mutable int otherFlags_;
283 #endif
284  bool columnOrdered_;
286 
288 };
289 
290 #endif
int numberColumns_
Number of columns.
int CoinBigIndex
virtual ClpMatrixBase * subsetClone(int numberRows, const int *whichRows, int numberColumns, const int *whichColumns) const
Subset clone (without gaps).
virtual const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
CoinPackedMatrix * matrix_
For fake CoinPackedMatrix.
virtual int getNumCols() const
Number of columns.
virtual void transposeTimes2(const ClpSimplex *model, const CoinIndexedVector *pi1, CoinIndexedVector *dj1, const CoinIndexedVector *pi2, CoinIndexedVector *spare, double referenceIn, double devex, unsigned int *reference, double *weights, double scaleFactor)
Updates two arrays for steepest.
virtual void releasePackedMatrix() const
Allow any parts of a created CoinMatrix to be deleted.
int *COIN_RESTRICT indices_
Data -1, then +1 rows in pairs (row==-1 if one entry)
virtual CoinBigIndex * dubiousWeights(const ClpSimplex *model, int *inputWeights) const
Given positive integer weights for each row fills in sum of weights for each column (and slack)...
virtual const CoinBigIndex * getVectorStarts() const
Return a complete CoinPackedMatrix.
virtual void transposeTimes(double scalar, const double *x, double *y) const
Return y + x * scalar * A in y.
virtual void fillBasis(ClpSimplex *model, const int *whichColumn, int &numberColumnBasic, int *row, int *start, int *rowCount, int *columnCount, CoinFactorizationDouble *element)
Fills in column part of basis.
int * lengths_
For fake CoinPackedMatrix.
virtual void unpackPacked(ClpSimplex *model, CoinIndexedVector *rowArray, int column) const
Unpacks a column into an CoinIndexedvector in packed foramt Note that model is NOT const...
Sparse Matrix Base Class.
bool columnOrdered_
True if column ordered.
virtual void unpack(const ClpSimplex *model, CoinIndexedVector *rowArray, int column) const
Unpacks a column into an CoinIndexedvector.
virtual bool canDoPartialPricing() const
Says whether it can do partial pricing.
ClpPlusMinusOneMatrix & operator=(const ClpPlusMinusOneMatrix &)
The copy constructor.
virtual const int * getVectorLengths() const
The lengths of the major-dimension vectors.
virtual const double * getElements() const
A vector containing the elements in the packed matrix.
Abstract base class for various sparse vectors.
int type() const
Returns type.
int * getMutableIndices() const
Return a complete CoinPackedMatrix.
double CoinFactorizationDouble
Definition: CoinTypes.hpp:57
virtual bool canCombine(const ClpSimplex *model, const CoinIndexedVector *pi) const
Returns true if can combine transposeTimes and subsetTransposeTimes and if it would be faster...
void checkValid(bool detail) const
Just checks matrix valid - will say if dimensions not quite right if detail.
ClpPlusMinusOneMatrix()
Default constructor.
virtual void rangeOfElements(double &smallestNegative, double &largestNegative, double &smallestPositive, double &largestPositive)
Returns largest and smallest elements of both signs.
virtual void appendRows(int number, const CoinPackedVectorBase *const *rows)
Append Rows.
#define COIN_RESTRICT
Indexed Vector.
virtual ~ClpPlusMinusOneMatrix()
Destructor.
virtual int getNumRows() const
Number of rows.
virtual void transposeTimesByRow(const ClpSimplex *model, double scalar, const CoinIndexedVector *x, CoinIndexedVector *y, CoinIndexedVector *z) const
Return x * scalar * A + y in z.
This solves LPs using the simplex method.
Definition: ClpSimplex.hpp:70
virtual CoinBigIndex countBasis(const int *whichColumn, int &numberColumnBasic)
Returns number of elements in column part of basis.
CoinBigIndex * startPositive() const
Return starts of +1s.
Abstract base class for Clp Matrices.
virtual void partialPricing(ClpSimplex *model, double start, double end, int &bestSequence, int &numberWanted)
Partial pricing.
CoinBigIndex *COIN_RESTRICT startNegative_
Start of -1's for each.
int numberRows_
Number of rows.
virtual void deleteRows(const int numDel, const int *indDel)
Delete the rows whose indices are listed in indDel.
virtual void setDimensions(int numrows, int numcols)
Set the dimensions of the matrix.
virtual void appendCols(int number, const CoinPackedVectorBase *const *columns)
Append Columns.
virtual void subsetTransposeTimes(const ClpSimplex *model, const CoinIndexedVector *x, const CoinIndexedVector *y, CoinIndexedVector *z) const
Return <code>x *A</code> in <code>z</code> but just for indices in y.
virtual CoinPackedMatrix * getPackedMatrix() const
Return a complete CoinPackedMatrix.
virtual void add(const ClpSimplex *model, CoinIndexedVector *rowArray, int column, double multiplier) const
Adds multiple of a column into an CoinIndexedvector You can use quickAdd to add to vector...
CoinBigIndex * startNegative() const
Return starts of -1s.
virtual ClpMatrixBase * reverseOrderedCopy() const
Returns a new matrix in reverse order without gaps.
void passInCopy(int numberRows, int numberColumns, bool columnOrdered, int *indices, CoinBigIndex *startPositive, CoinBigIndex *startNegative)
pass in copy (object takes ownership)
virtual void deleteCols(const int numDel, const int *indDel)
Delete the columns whose indices are listed in indDel.
virtual void times(double scalar, const double *x, double *y) const
Return y + A * scalar *x in y.
virtual int appendMatrix(int number, int type, const CoinBigIndex *starts, const int *index, const double *element, int numberOther=-1)
Append a set of rows/columns to the end of the matrix.
CoinBigIndex *COIN_RESTRICT startPositive_
Start of +1's for each.
virtual void subsetTimes2(const ClpSimplex *model, CoinIndexedVector *dj1, const CoinIndexedVector *pi2, CoinIndexedVector *dj2, double referenceIn, double devex, unsigned int *reference, double *weights, double scaleFactor)
Updates second array for steepest and does devex weights.
virtual ClpMatrixBase * clone() const
Clone.
This implements a simple +- one matrix as derived from ClpMatrixBase.
virtual bool isColOrdered() const
Whether the packed matrix is column major ordered or not.
virtual CoinBigIndex getNumElements() const
Number of entries in the packed matrix.