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
00021 class ClpNetworkBasis {
00022
00023 public:
00024
00027
00028 ClpNetworkBasis ( );
00030 ClpNetworkBasis(const ClpSimplex * model,
00031 int numberRows, const double * pivotRegion,
00032 const int * permuteBack,const int * startColumn,
00033 const int * numberInColumn,
00034 const int * indexRow, const double * element);
00036 ClpNetworkBasis ( const ClpNetworkBasis &other);
00037
00039 ~ClpNetworkBasis ( );
00041 ClpNetworkBasis & operator = ( const ClpNetworkBasis & other );
00043
00054 int factorize ( const ClpMatrixBase * matrix,
00055 int rowIsBasic[], int columnIsBasic[]);
00057
00060
00064 int replaceColumn ( CoinIndexedVector * column,
00065 int pivotRow);
00067
00074 double updateColumn ( CoinIndexedVector * regionSparse,
00075 CoinIndexedVector * regionSparse2,
00076 int pivotRow);
00082 int updateColumn ( CoinIndexedVector * regionSparse,
00083 double array[] ) const;
00090 int updateColumnTranspose ( CoinIndexedVector * regionSparse,
00091 double array[] ) const;
00093 int updateColumnTranspose ( CoinIndexedVector * regionSparse,
00094 CoinIndexedVector * regionSparse2) const;
00096
00097 private:
00098
00099
00100 void check();
00101
00102 void print();
00105
00106 double slackValue_;
00108 int numberRows_;
00110 int numberColumns_;
00112 const ClpSimplex * model_;
00114 int * parent_;
00116 int * descendant_;
00118 int * pivot_;
00120 int * rightSibling_;
00122 int * leftSibling_;
00124 double * sign_;
00126 int * stack_;
00128 int * permute_;
00130 int * permuteBack_;
00132 int * stack2_;
00134 int * depth_;
00136 char * mark_;
00138 };
00139 #endif