00001
00002
00003
00004 #ifndef CglTreeInfo_H
00005 #define CglTreeInfo_H
00006
00007 #include "OsiCuts.hpp"
00008 #include "OsiSolverInterface.hpp"
00009 #include "CoinHelperFunctions.hpp"
00010 class CglStored;
00013 class CglTreeInfo {
00014 public:
00016 int level;
00019 int pass;
00022 int formulation_rows;
00029 int options;
00031 bool inTree;
00041 OsiRowCut ** strengthenRow;
00043 CoinThreadRandom * randomNumberGenerator;
00045 CglTreeInfo ();
00046
00048 CglTreeInfo (
00049 const CglTreeInfo &);
00051 virtual CglTreeInfo * clone() const;
00052
00054 CglTreeInfo &
00055 operator=(
00056 const CglTreeInfo& rhs);
00057
00059 virtual
00060 ~CglTreeInfo ();
00062 virtual void fixes(int variable, int toValue, int fixedVariable,bool fixedToLower) {}
00065 virtual int initializeFixing(const OsiSolverInterface * model) {return 0;}
00066
00067 };
00068
00070 typedef struct {
00071 unsigned int oneFixed:1;
00072 unsigned int sequence:31;
00073 } fixEntry;
00074
00075 class CglTreeProbingInfo : public CglTreeInfo {
00076 public:
00078 CglTreeProbingInfo ();
00080 CglTreeProbingInfo (const OsiSolverInterface * model);
00081
00083 CglTreeProbingInfo (
00084 const CglTreeProbingInfo &);
00086 virtual CglTreeInfo * clone() const;
00087
00089 CglTreeProbingInfo &
00090 operator=(
00091 const CglTreeProbingInfo& rhs);
00092
00094 virtual
00095 ~CglTreeProbingInfo ();
00096 OsiSolverInterface * analyze(const OsiSolverInterface & si, int createSolver=0);
00098 virtual void fixes(int variable, int toValue, int fixedVariable,bool fixedToLower);
00101 virtual int initializeFixing(const OsiSolverInterface * model) ;
00103 int fixColumns(OsiSolverInterface & si) const;
00105 int fixColumns(int iColumn, int value, OsiSolverInterface & si) const;
00107 int packDown();
00109 void generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
00110 const CglTreeInfo info) const;
00112 inline fixEntry * fixEntries() const
00113 { convert(); return fixEntry_;}
00115 inline int * toZero() const
00116 { convert(); return toZero_;}
00118 inline int * toOne() const
00119 { convert(); return toOne_;}
00121 inline int * integerVariable() const
00122 { return integerVariable_;}
00124 inline int * backward() const
00125 { return backward_;}
00127 inline int numberVariables() const
00128 { return numberVariables_;}
00130 inline int numberIntegers() const
00131 { return numberIntegers_;}
00132 private:
00134 void convert() const;
00135 protected:
00137 mutable fixEntry * fixEntry_;
00139 mutable int * toZero_;
00141 mutable int * toOne_;
00143 int * integerVariable_;
00145 int * backward_;
00147 mutable int * fixingEntry_;
00149 int numberVariables_;
00151 int numberIntegers_;
00153 int maximumEntries_;
00155 mutable int numberEntries_;
00156 };
00157
00158 #endif