00001
00002
00003 #ifndef ClpFactorization_H
00004 #define ClpFactorization_H
00005
00006
00007 #include "CoinPragma.hpp"
00008
00009 #include "CoinFactorization.hpp"
00010 class ClpMatrixBase;
00011 class ClpSimplex;
00012 class ClpNetworkBasis;
00013
00019 class ClpFactorization : public CoinFactorization {
00020
00021 public:
00033 int factorize (ClpSimplex * model,int solveType, bool valuesPass);
00035
00036
00040 ClpFactorization();
00042 ~ClpFactorization();
00044
00048 ClpFactorization(const ClpFactorization&);
00050 ClpFactorization(const CoinFactorization&);
00051
00052 ClpFactorization& operator=(const ClpFactorization&);
00054
00055
00058
00066 int replaceColumn ( const ClpSimplex * model,
00067 CoinIndexedVector * regionSparse,
00068 CoinIndexedVector * tableauColumn,
00069 int pivotRow,
00070 double pivotCheck ,
00071 bool checkBeforeModifying=false);
00073
00081 int updateColumnFT ( CoinIndexedVector * regionSparse,
00082 CoinIndexedVector * regionSparse2);
00083 int updateColumn ( CoinIndexedVector * regionSparse,
00084 CoinIndexedVector * regionSparse2,
00085 bool noPermute=false) const;
00087 int updateColumnForDebug ( CoinIndexedVector * regionSparse,
00088 CoinIndexedVector * regionSparse2,
00089 bool noPermute=false) const;
00092 int updateColumnTranspose ( CoinIndexedVector * regionSparse,
00093 CoinIndexedVector * regionSparse2) const;
00095
00099 void goSparse();
00101 void cleanUp();
00103 bool needToReorder() const;
00104 #ifndef SLIM_CLP
00106 inline bool networkBasis() const
00107 { return (networkBasis_!=NULL);};
00108 #else
00110 inline bool networkBasis() const
00111 { return false;};
00112 #endif
00114 void getWeights(int * weights) const;
00115
00116
00118 private:
00119
00122
00123 #ifndef SLIM_CLP
00124 ClpNetworkBasis * networkBasis_;
00125 #endif
00126
00127 };
00128
00129 #endif