Clp 1.16.9
Loading...
Searching...
No Matches
ClpNetworkMatrix.hpp
Go to the documentation of this file.
1/* $Id: ClpNetworkMatrix.hpp 1665 2011-01-04 17:55:54Z lou $ */
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 ClpNetworkMatrix_H
7#define ClpNetworkMatrix_H
8
9
10#include "CoinPragma.hpp"
11
12#include "ClpMatrixBase.hpp"
13
20
21public:
25 virtual CoinPackedMatrix * getPackedMatrix() const;
27 virtual bool isColOrdered() const {
28 return true;
29 }
31 virtual CoinBigIndex getNumElements() const {
32 return 2 * numberColumns_;
33 }
35 virtual int getNumCols() const {
36 return numberColumns_;
37 }
39 virtual int getNumRows() const {
40 return numberRows_;
41 }
42
47 virtual const double * getElements() const;
53 virtual const int * getIndices() const {
54 return indices_;
55 }
56
57 virtual const CoinBigIndex * getVectorStarts() const;
59 virtual const int * getVectorLengths() const;
60
62 virtual void deleteCols(const int numDel, const int * indDel);
64 virtual void deleteRows(const int numDel, const int * indDel);
66 virtual void appendCols(int number, const CoinPackedVectorBase * const * columns);
68 virtual void appendRows(int number, const CoinPackedVectorBase * const * rows);
69#ifndef SLIM_CLP
74 virtual int appendMatrix(int number, int type,
75 const CoinBigIndex * starts, const int * index,
76 const double * element, int numberOther = -1);
77#endif
81 virtual CoinBigIndex countBasis(
82 const int * whichColumn,
83 int & numberColumnBasic);
85 virtual void fillBasis(ClpSimplex * model,
86 const int * whichColumn,
87 int & numberColumnBasic,
88 int * row, int * start,
89 int * rowCount, int * columnCount,
90 CoinFactorizationDouble * element);
95 virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model, int * inputWeights) const;
99 virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
100 double & smallestPositive, double & largestPositive);
103 virtual void unpack(const ClpSimplex * model, CoinIndexedVector * rowArray,
104 int column) const ;
109 virtual void unpackPacked(ClpSimplex * model,
110 CoinIndexedVector * rowArray,
111 int column) const;
114 virtual void add(const ClpSimplex * model, CoinIndexedVector * rowArray,
115 int column, double multiplier) const ;
117 virtual void add(const ClpSimplex * model, double * array,
118 int column, double multiplier) const;
120 virtual void releasePackedMatrix() const ;
122 virtual bool canDoPartialPricing() const;
124 virtual void partialPricing(ClpSimplex * model, double start, double end,
125 int & bestSequence, int & numberWanted);
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;
161 virtual void subsetTransposeTimes(const ClpSimplex * model,
162 const CoinIndexedVector * x,
163 const CoinIndexedVector * y,
164 CoinIndexedVector * z) const;
166
170 inline bool trueNetwork() const {
171 return trueNetwork_;
172 }
174
175
181 ClpNetworkMatrix(int numberColumns, const int * head,
182 const int * tail);
186
192 ClpNetworkMatrix(const CoinPackedMatrix&);
193
196 virtual ClpMatrixBase * clone() const ;
200 int numberRows, const int * whichRows,
201 int numberColumns, const int * whichColumns);
205 int numberRows, const int * whichRows,
206 int numberColumns, const int * whichColumns) const ;
208
209
210protected:
215 mutable CoinPackedMatrix * matrix_;
216 mutable int * lengths_;
218 int * indices_;
225
227};
228
229#endif
Abstract base class for Clp Matrices.
int type() const
Returns type.
This implements a simple network matrix as derived from ClpMatrixBase.
int * indices_
Data -1, then +1 rows in pairs (row==-1 if one entry)
virtual CoinPackedMatrix * getPackedMatrix() const
Return a complete CoinPackedMatrix.
bool trueNetwork_
True if all entries have two elements.
int numberRows_
Number of rows.
virtual void deleteCols(const int numDel, const int *indDel)
Delete the columns whose indices are listed in indDel.
virtual ClpMatrixBase * clone() const
Clone.
virtual void appendCols(int number, const CoinPackedVectorBase *const *columns)
Append Columns.
ClpNetworkMatrix & operator=(const ClpNetworkMatrix &)
virtual void unpackPacked(ClpSimplex *model, CoinIndexedVector *rowArray, int column) const
Unpacks a column into an CoinIndexedvector in packed format Note that model is NOT const.
bool trueNetwork() const
Return true if really network, false if has slacks.
ClpNetworkMatrix()
Default constructor.
virtual void rangeOfElements(double &smallestNegative, double &largestNegative, double &smallestPositive, double &largestPositive)
Returns largest and smallest elements of both signs.
virtual bool isColOrdered() const
Whether the packed matrix is column major ordered or not.
virtual bool canDoPartialPricing() const
Says whether it can do partial pricing.
virtual void add(const ClpSimplex *model, double *array, int column, double multiplier) const
Adds multiple of a column into an array.
ClpNetworkMatrix(const ClpNetworkMatrix &wholeModel, int numberRows, const int *whichRows, int numberColumns, const int *whichColumns)
Subset constructor (without gaps).
virtual ClpMatrixBase * subsetClone(int numberRows, const int *whichRows, int numberColumns, const int *whichColumns) const
Subset clone (without gaps).
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.
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.
virtual const double * getElements() const
A vector containing the elements in the packed matrix.
virtual const CoinBigIndex * getVectorStarts() const
virtual void releasePackedMatrix() const
Allow any parts of a created CoinMatrix to be deleted.
virtual ~ClpNetworkMatrix()
Destructor.
ClpNetworkMatrix(const ClpNetworkMatrix &)
The copy constructor.
virtual void partialPricing(ClpSimplex *model, double start, double end, int &bestSequence, int &numberWanted)
Partial pricing.
virtual void unpack(const ClpSimplex *model, CoinIndexedVector *rowArray, int column) const
Unpacks a column into an CoinIndexedvector.
virtual ClpMatrixBase * reverseOrderedCopy() const
Returns a new matrix in reverse order without gaps.
virtual int getNumCols() const
Number of columns.
virtual int getNumRows() const
Number of rows.
virtual void appendRows(int number, const CoinPackedVectorBase *const *rows)
Append Rows.
virtual const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
ClpNetworkMatrix(int numberColumns, const int *head, const int *tail)
Constructor from two arrays.
virtual void times(double scalar, const double *x, double *y, const double *rowScale, const double *columnScale) const
And for scaling.
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 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.
virtual const int * getVectorLengths() const
The lengths of the major-dimension vectors.
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.
CoinPackedMatrix * matrix_
For fake CoinPackedMatrix.
ClpNetworkMatrix(const CoinPackedMatrix &)
The copy constructor from an CoinNetworkMatrix.
virtual void transposeTimes(double scalar, const double *x, double *y, const double *rowScale, const double *columnScale, double *spare=NULL) const
And for scaling.
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 void transposeTimes(const ClpSimplex *model, double scalar, const CoinIndexedVector *x, CoinIndexedVector *y, CoinIndexedVector *z) const
Return x * scalar * A + y in z.
virtual CoinBigIndex countBasis(const int *whichColumn, int &numberColumnBasic)
Returns number of elements in column part of basis.
int numberColumns_
Number of columns.
This solves LPs using the simplex method.
Definition: ClpSimplex.hpp:70