00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ClpNetworkBasis_H
00011 #define ClpNetworkBasis_H
00012
00013 class ClpMatrixBase;
00014 class CoinIndexedVector;
00015 class ClpSimplex;
00016 #include "CoinFinite.hpp"
00017
00022 class ClpNetworkBasis {
00023
00024 public:
00025
00028
00029 ClpNetworkBasis ( );
00031 ClpNetworkBasis(const ClpSimplex * model,
00032 int numberRows, const double * pivotRegion,
00033 const int * permuteBack,const CoinBigIndex * startColumn,
00034 const int * numberInColumn,
00035 const int * indexRow, const double * element);
00037 ClpNetworkBasis ( const ClpNetworkBasis &other);
00038
00040 ~ClpNetworkBasis ( );
00042 ClpNetworkBasis & operator = ( const ClpNetworkBasis & other );
00044
00055 int factorize ( const ClpMatrixBase * matrix,
00056 int rowIsBasic[], int columnIsBasic[]);
00058
00061
00065 int replaceColumn ( CoinIndexedVector * column,
00066 int pivotRow);
00068
00075 double updateColumn ( CoinIndexedVector * regionSparse,
00076 CoinIndexedVector * regionSparse2,
00077 int pivotRow);
00083 int updateColumn ( CoinIndexedVector * regionSparse,
00084 double array[] ) const;
00091 int updateColumnTranspose ( CoinIndexedVector * regionSparse,
00092 double array[] ) const;
00094 int updateColumnTranspose ( CoinIndexedVector * regionSparse,
00095 CoinIndexedVector * regionSparse2) const;
00097
00098 private:
00099
00100
00101 void check();
00102
00103 void print();
00106
00107 double slackValue_;
00109 int numberRows_;
00111 int numberColumns_;
00113 const ClpSimplex * model_;
00115 int * parent_;
00117 int * descendant_;
00119 int * pivot_;
00121 int * rightSibling_;
00123 int * leftSibling_;
00125 double * sign_;
00127 int * stack_;
00129 int * permute_;
00131 int * permuteBack_;
00133 int * stack2_;
00135 int * depth_;
00137 char * mark_;
00139 };
00140 #endif