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 Authors 00007 00008 John Forrest 00009 00010 */ 00011 #ifndef ClpNetworkBasis_H 00012 #define ClpNetworkBasis_H 00013 00014 class ClpMatrixBase; 00015 class CoinIndexedVector; 00016 class ClpSimplex; 00017 #include "CoinTypes.hpp" 00018 #ifndef COIN_FAST_CODE 00019 #define COIN_FAST_CODE 00020 #endif 00021 00026 class ClpNetworkBasis { 00027 00028 public: 00029 00032 00033 ClpNetworkBasis ( ); 00035 ClpNetworkBasis(const ClpSimplex * model, 00036 int numberRows, const CoinFactorizationDouble * pivotRegion, 00037 const int * permuteBack, const CoinBigIndex * startColumn, 00038 const int * numberInColumn, 00039 const int * indexRow, const CoinFactorizationDouble * element); 00041 ClpNetworkBasis ( const ClpNetworkBasis &other); 00042 00044 ~ClpNetworkBasis ( ); 00046 ClpNetworkBasis & operator = ( const ClpNetworkBasis & other ); 00048 00059 int factorize ( const ClpMatrixBase * matrix, 00060 int rowIsBasic[], int columnIsBasic[]); 00062 00065 00069 int replaceColumn ( CoinIndexedVector * column, 00070 int pivotRow); 00072 00079 double updateColumn ( CoinIndexedVector * regionSparse, 00080 CoinIndexedVector * regionSparse2, 00081 int pivotRow); 00087 int updateColumn ( CoinIndexedVector * regionSparse, 00088 double array[] ) const; 00095 int updateColumnTranspose ( CoinIndexedVector * regionSparse, 00096 double array[] ) const; 00098 int updateColumnTranspose ( CoinIndexedVector * regionSparse, 00099 CoinIndexedVector * regionSparse2) const; 00101 00102 private: 00103 00104 // checks looks okay 00105 void check(); 00106 // prints data 00107 void print(); 00110 #ifndef COIN_FAST_CODE 00111 00112 double slackValue_; 00113 #endif 00114 00115 int numberRows_; 00117 int numberColumns_; 00119 const ClpSimplex * model_; 00121 int * parent_; 00123 int * descendant_; 00125 int * pivot_; 00127 int * rightSibling_; 00129 int * leftSibling_; 00131 double * sign_; 00133 int * stack_; 00135 int * permute_; 00137 int * permuteBack_; 00139 int * stack2_; 00141 int * depth_; 00143 char * mark_; 00145 }; 00146 #endif