Clp trunk
|
00001 /* $Id$ */ 00002 // Copyright (C) 2003, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 // This code is licensed under the terms of the Eclipse Public License (EPL). 00005 00006 #ifndef ClpNetworkMatrix_H 00007 #define ClpNetworkMatrix_H 00008 00009 00010 #include "CoinPragma.hpp" 00011 00012 #include "ClpMatrixBase.hpp" 00013 00019 class ClpNetworkMatrix : public ClpMatrixBase { 00020 00021 public: 00024 00025 virtual CoinPackedMatrix * getPackedMatrix() const; 00027 virtual bool isColOrdered() const { 00028 return true; 00029 } 00031 virtual CoinBigIndex getNumElements() const { 00032 return 2 * numberColumns_; 00033 } 00035 virtual int getNumCols() const { 00036 return numberColumns_; 00037 } 00039 virtual int getNumRows() const { 00040 return numberRows_; 00041 } 00042 00047 virtual const double * getElements() const; 00053 virtual const int * getIndices() const { 00054 return indices_; 00055 } 00056 00057 virtual const CoinBigIndex * getVectorStarts() const; 00059 virtual const int * getVectorLengths() const; 00060 00062 virtual void deleteCols(const int numDel, const int * indDel); 00064 virtual void deleteRows(const int numDel, const int * indDel); 00066 virtual void appendCols(int number, const CoinPackedVectorBase * const * columns); 00068 virtual void appendRows(int number, const CoinPackedVectorBase * const * rows); 00069 #ifndef SLIM_CLP 00070 00074 virtual int appendMatrix(int number, int type, 00075 const CoinBigIndex * starts, const int * index, 00076 const double * element, int numberOther = -1); 00077 #endif 00078 00079 virtual ClpMatrixBase * reverseOrderedCopy() const; 00081 virtual CoinBigIndex countBasis( 00082 const int * whichColumn, 00083 int & numberColumnBasic); 00085 virtual void fillBasis(ClpSimplex * model, 00086 const int * whichColumn, 00087 int & numberColumnBasic, 00088 int * row, int * start, 00089 int * rowCount, int * columnCount, 00090 CoinFactorizationDouble * element); 00095 virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model, int * inputWeights) const; 00099 virtual void rangeOfElements(double & smallestNegative, double & largestNegative, 00100 double & smallestPositive, double & largestPositive); 00103 virtual void unpack(const ClpSimplex * model, CoinIndexedVector * rowArray, 00104 int column) const ; 00109 virtual void unpackPacked(ClpSimplex * model, 00110 CoinIndexedVector * rowArray, 00111 int column) const; 00114 virtual void add(const ClpSimplex * model, CoinIndexedVector * rowArray, 00115 int column, double multiplier) const ; 00117 virtual void add(const ClpSimplex * model, double * array, 00118 int column, double multiplier) const; 00120 virtual void releasePackedMatrix() const ; 00122 virtual bool canDoPartialPricing() const; 00124 virtual void partialPricing(ClpSimplex * model, double start, double end, 00125 int & bestSequence, int & numberWanted); 00127 00133 virtual void times(double scalar, 00134 const double * x, double * y) const; 00136 virtual void times(double scalar, 00137 const double * x, double * y, 00138 const double * rowScale, 00139 const double * columnScale) const; 00143 virtual void transposeTimes(double scalar, 00144 const double * x, double * y) const; 00146 virtual void transposeTimes(double scalar, 00147 const double * x, double * y, 00148 const double * rowScale, 00149 const double * columnScale, double * spare = NULL) const; 00154 virtual void transposeTimes(const ClpSimplex * model, double scalar, 00155 const CoinIndexedVector * x, 00156 CoinIndexedVector * y, 00157 CoinIndexedVector * z) const; 00161 virtual void subsetTransposeTimes(const ClpSimplex * model, 00162 const CoinIndexedVector * x, 00163 const CoinIndexedVector * y, 00164 CoinIndexedVector * z) const; 00166 00169 00170 inline bool trueNetwork() const { 00171 return trueNetwork_; 00172 } 00174 00175 00179 ClpNetworkMatrix(); 00181 ClpNetworkMatrix(int numberColumns, const int * head, 00182 const int * tail); 00184 virtual ~ClpNetworkMatrix(); 00186 00190 ClpNetworkMatrix(const ClpNetworkMatrix&); 00192 ClpNetworkMatrix(const CoinPackedMatrix&); 00193 00194 ClpNetworkMatrix& operator=(const ClpNetworkMatrix&); 00196 virtual ClpMatrixBase * clone() const ; 00199 ClpNetworkMatrix (const ClpNetworkMatrix & wholeModel, 00200 int numberRows, const int * whichRows, 00201 int numberColumns, const int * whichColumns); 00204 virtual ClpMatrixBase * subsetClone ( 00205 int numberRows, const int * whichRows, 00206 int numberColumns, const int * whichColumns) const ; 00208 00209 00210 protected: 00214 00215 mutable CoinPackedMatrix * matrix_; 00216 mutable int * lengths_; 00218 int * indices_; 00220 int numberRows_; 00222 int numberColumns_; 00224 bool trueNetwork_; 00225 00227 }; 00228 00229 #endif