00001
00002
00003 #ifndef ClpNetworkMatrix_H
00004 #define ClpNetworkMatrix_H
00005
00006
00007 #include "CoinPragma.hpp"
00008
00009 #include "ClpMatrixBase.hpp"
00010
00016 class ClpNetworkMatrix : public ClpMatrixBase {
00017
00018 public:
00021
00022 virtual CoinPackedMatrix * getPackedMatrix() const;
00024 virtual bool isColOrdered() const { return true; }
00026 virtual CoinBigIndex getNumElements() const
00027 { return 2*numberColumns_; }
00029 virtual int getNumCols() const { return numberColumns_; }
00031 virtual int getNumRows() const { return numberRows_; };
00032
00037 virtual const double * getElements() const;
00043 virtual const int * getIndices() const
00044 { return indices_;};
00045
00046 virtual const CoinBigIndex * getVectorStarts() const;
00048 virtual const int * getVectorLengths() const;
00049
00051 virtual void deleteCols(const int numDel, const int * indDel);
00053 virtual void deleteRows(const int numDel, const int * indDel);
00055 virtual ClpMatrixBase * reverseOrderedCopy() const;
00058 virtual CoinBigIndex numberInBasis(const int * columnIsBasic) const ;
00060 virtual CoinBigIndex fillBasis(const ClpSimplex * model,
00061 const int * columnIsBasic, int & numberBasic,
00062 int * row, int * column,
00063 double * element) const ;
00066 virtual CoinBigIndex fillBasis(const ClpSimplex * model,
00067 const int * whichColumn,
00068 int numberRowBasic,
00069 int numberColumnBasic,
00070 int * row, int * column,
00071 double * element) const ;
00076 virtual CoinBigIndex * dubiousWeights(const ClpSimplex * model,int * inputWeights) const;
00080 virtual void rangeOfElements(double & smallestNegative, double & largestNegative,
00081 double & smallestPositive, double & largestPositive);
00084 virtual void unpack(const ClpSimplex * model,CoinIndexedVector * rowArray,
00085 int column) const ;
00090 virtual void unpackPacked(ClpSimplex * model,
00091 CoinIndexedVector * rowArray,
00092 int column) const;
00095 virtual void add(const ClpSimplex * model,CoinIndexedVector * rowArray,
00096 int column, double multiplier) const ;
00098 virtual void releaseNetworkMatrix() const { };
00100 virtual bool canDoPartialPricing() const;
00102 virtual void partialPricing(ClpSimplex * model, int start, int end,
00103 int & bestSequence, int & numberWanted);
00105
00111 virtual void times(double scalar,
00112 const double * x, double * y) const;
00114 virtual void times(double scalar,
00115 const double * x, double * y,
00116 const double * rowScale,
00117 const double * columnScale) const;
00121 virtual void transposeTimes(double scalar,
00122 const double * x, double * y) const;
00124 virtual void transposeTimes(double scalar,
00125 const double * x, double * y,
00126 const double * rowScale,
00127 const double * columnScale) const;
00132 virtual void transposeTimes(const ClpSimplex * model, double scalar,
00133 const CoinIndexedVector * x,
00134 CoinIndexedVector * y,
00135 CoinIndexedVector * z) const;
00140 virtual void subsetTransposeTimes(const ClpSimplex * model,
00141 const CoinIndexedVector * x,
00142 const CoinIndexedVector * y,
00143 CoinIndexedVector * z) const;
00145
00148
00149 inline bool trueNetwork() const
00150 { return trueNetwork_;};
00152
00153
00157 ClpNetworkMatrix();
00159 ClpNetworkMatrix(int numberColumns, const int * head,
00160 const int * tail);
00162 virtual ~ClpNetworkMatrix();
00164
00168 ClpNetworkMatrix(const ClpNetworkMatrix&);
00170 ClpNetworkMatrix(const CoinPackedMatrix&);
00171
00172 ClpNetworkMatrix& operator=(const ClpNetworkMatrix&);
00174 virtual ClpMatrixBase * clone() const ;
00176
00177
00178 protected:
00182
00183 mutable double * elements_;
00184 mutable int * starts_;
00185 mutable int * lengths_;
00187 int * indices_;
00189 int numberRows_;
00191 int numberColumns_;
00193 bool trueNetwork_;
00194
00196 };
00197
00198 #endif