6 #ifndef ClpPlusMinusOneMatrix_H
7 #define ClpPlusMinusOneMatrix_H
10 #include "CoinPragma.hpp"
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);
74 const CoinBigIndex * starts,
const int * index,
75 const double * element,
int numberOther = -1);
81 const int * whichColumn,
82 int & numberColumnBasic);
85 const int * whichColumn,
86 int & numberColumnBasic,
87 int * row,
int * start,
88 int * rowCount,
int * columnCount,
89 CoinFactorizationDouble * element);
98 virtual void rangeOfElements(
double & smallestNegative,
double & largestNegative,
99 double & smallestPositive,
double & largestPositive);
109 CoinIndexedVector * rowArray,
113 virtual void add(
const ClpSimplex * model, CoinIndexedVector * rowArray,
114 int column,
double multiplier)
const ;
117 int column,
double multiplier)
const;
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;
146 const double * x,
double * y)
const;
149 const double * x,
double * y,
150 const double * rowScale,
151 const double * columnScale,
double * spare = NULL)
const;
157 const CoinIndexedVector * x,
158 CoinIndexedVector * y,
159 CoinIndexedVector * z)
const;
166 const CoinIndexedVector * x,
167 CoinIndexedVector * y,
168 CoinIndexedVector * z)
const;
173 const CoinIndexedVector * x,
174 const CoinIndexedVector * y,
175 CoinIndexedVector * z)
const;
179 const CoinIndexedVector * pi)
const;
182 const CoinIndexedVector * pi1, CoinIndexedVector * dj1,
183 const CoinIndexedVector * pi2,
184 CoinIndexedVector * spare,
185 double referenceIn,
double devex,
187 unsigned int * reference,
188 double * weights,
double scaleFactor);
191 CoinIndexedVector * dj1,
192 const CoinIndexedVector * pi2, CoinIndexedVector * dj2,
193 double referenceIn,
double devex,
195 unsigned int * reference,
196 double * weights,
double scaleFactor);
233 bool columnOrdered,
const int * indices,
238 int numberRows,
const int * whichRows,
239 int numberColumns,
const int * whichColumns);
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,
257 int & bestSequence,
int & numberWanted);
265 mutable CoinPackedMatrix *
matrix_;
278 #ifdef CLP_PLUS_ONE_MATRIX
282 mutable int otherFlags_;
virtual void rangeOfElements(double &smallestNegative, double &largestNegative, double &smallestPositive, double &largestPositive)
Returns largest and smallest elements of both signs.
int type() const
Returns type.
virtual void partialPricing(ClpSimplex *model, double start, double end, int &bestSequence, int &numberWanted)
Partial pricing.
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 bool canDoPartialPricing() const
Says whether it can do partial pricing.
virtual int getNumRows() const
Number of rows.
Abstract base class for Clp Matrices.
virtual CoinBigIndex getNumElements() const
Number of entries in the packed matrix.
virtual void deleteRows(const int numDel, const int *indDel)
Delete the rows whose indices are listed in indDel.
virtual ClpMatrixBase * clone() const
Clone.
CoinPackedMatrix * matrix_
For fake CoinPackedMatrix.
virtual void transposeTimesByRow(const ClpSimplex *model, double scalar, const CoinIndexedVector *x, CoinIndexedVector *y, CoinIndexedVector *z) const
Return x * scalar * A + y in z.
virtual void setDimensions(int numrows, int numcols)
Set the dimensions of the matrix.
virtual const int * getVectorLengths() const
The lengths of the major-dimension vectors.
virtual void deleteCols(const int numDel, const int *indDel)
Delete the columns whose indices are listed in indDel.
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.
int * getMutableIndices() const
virtual ClpMatrixBase * reverseOrderedCopy() const
Returns a new matrix in reverse order without gaps.
This implements a simple +- one matrix as derived from ClpMatrixBase.
virtual void transposeTimes(double scalar, const double *x, double *y) const
Return y + x * scalar * A in y.
virtual void times(double scalar, const double *x, double *y) const
Return y + A * scalar *x in y.
This solves LPs using the simplex method.
virtual const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
void checkValid(bool detail) const
Just checks matrix valid - will say if dimensions not quite right if detail.
ClpPlusMinusOneMatrix()
Default constructor.
int *COIN_RESTRICT indices_
Data -1, then +1 rows in pairs (row==-1 if one entry)
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...
int numberRows_
Number of rows.
virtual bool canCombine(const ClpSimplex *model, const CoinIndexedVector *pi) const
Returns true if can combine transposeTimes and subsetTransposeTimes and if it would be faster...
int numberColumns_
Number of columns.
virtual const CoinBigIndex * getVectorStarts() const
virtual ~ClpPlusMinusOneMatrix()
Destructor.
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.
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...
CoinBigIndex *COIN_RESTRICT startNegative_
Start of -1's for each.
virtual bool isColOrdered() const
Whether the packed matrix is column major ordered or not.
virtual void unpack(const ClpSimplex *model, CoinIndexedVector *rowArray, int column) const
Unpacks a column into an CoinIndexedvector.
virtual void appendRows(int number, const CoinPackedVectorBase *const *rows)
Append Rows.
virtual const double * getElements() const
A vector containing the elements in the packed matrix.
CoinBigIndex * startNegative() const
Return starts of -1s.
CoinBigIndex *COIN_RESTRICT startPositive_
Start of +1's for each.
virtual ClpMatrixBase * subsetClone(int numberRows, const int *whichRows, int numberColumns, const int *whichColumns) const
Subset clone (without gaps).
virtual CoinBigIndex countBasis(const int *whichColumn, int &numberColumnBasic)
Returns number of elements in column part of basis.
virtual int getNumCols() const
Number of columns.
virtual void releasePackedMatrix() const
Allow any parts of a created CoinMatrix to be deleted.
virtual void appendCols(int number, const CoinPackedVectorBase *const *columns)
Append Columns.
virtual CoinPackedMatrix * getPackedMatrix() const
Return a complete CoinPackedMatrix.
CoinBigIndex * startPositive() const
Return starts of +1s.
virtual void subsetTransposeTimes(const ClpSimplex *model, const CoinIndexedVector *x, const CoinIndexedVector *y, CoinIndexedVector *z) const
Return x *A in z but just for indices in y.
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.
ClpPlusMinusOneMatrix & operator=(const ClpPlusMinusOneMatrix &)
bool columnOrdered_
True if column ordered.
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.
void passInCopy(int numberRows, int numberColumns, bool columnOrdered, int *indices, CoinBigIndex *startPositive, CoinBigIndex *startNegative)
pass in copy (object takes ownership)