CglTreeInfo.hpp

Go to the documentation of this file.
00001 // $Id: CglTreeInfo.hpp 1201 2014-03-07 17:24:04Z forrest $
00002 // Copyright (C) 2000, 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 #ifndef CglTreeInfo_H
00007 #define CglTreeInfo_H
00008 
00009 #include "OsiCuts.hpp"
00010 #include "OsiSolverInterface.hpp"
00011 #include "CoinHelperFunctions.hpp"
00012 class CglStored;
00015 class CglTreeInfo {
00016 public:
00018   int level;
00021   int pass;
00024   int formulation_rows;
00038   int options;
00040   bool inTree;
00050   OsiRowCut ** strengthenRow;
00052   CoinThreadRandom * randomNumberGenerator;
00054   CglTreeInfo ();
00055  
00057   CglTreeInfo (
00058     const CglTreeInfo &);
00060   virtual CglTreeInfo * clone() const;
00061 
00063   CglTreeInfo &
00064     operator=(
00065     const CglTreeInfo& rhs);
00066   
00068   virtual
00069     ~CglTreeInfo ();
00071   virtual bool fixes(int , int , int ,bool) {return false;}
00074   virtual int initializeFixing(const OsiSolverInterface * ) {return 0;}
00075   
00076 };
00077 
00079 typedef struct {
00080   //unsigned int oneFixed:1; //  nonzero if variable to 1 fixes all
00081   //unsigned int sequence:31; //  variable (in matrix) (but also see cliqueRow_)
00082   unsigned int fixes;
00083 } CliqueEntry;
00084 
00085 class CglTreeProbingInfo : public CglTreeInfo {
00086 public:
00088   CglTreeProbingInfo ();
00090   CglTreeProbingInfo (const OsiSolverInterface * model);
00091  
00093   CglTreeProbingInfo (
00094     const CglTreeProbingInfo &);
00096   virtual CglTreeInfo * clone() const;
00097 
00099   CglTreeProbingInfo &
00100     operator=(
00101     const CglTreeProbingInfo& rhs);
00102   
00104   virtual
00105     ~CglTreeProbingInfo ();
00106   OsiSolverInterface * analyze(const OsiSolverInterface & si, int createSolver=0,
00107                                int numberExtraCliques=0,const int * starts=NULL,
00108                                const CliqueEntry * entries=NULL,const char * type=NULL);
00112   virtual bool fixes(int variable, int toValue, int fixedVariable,bool fixedToLower);
00115   virtual int initializeFixing(const OsiSolverInterface * model) ;
00117   int fixColumns(OsiSolverInterface & si) const;
00119   int fixColumns(int iColumn, int value, OsiSolverInterface & si) const;
00121   int packDown();
00123   void generateCuts(const OsiSolverInterface & si, OsiCuts & cs,
00124                     const CglTreeInfo info) const;
00126   inline CliqueEntry * fixEntries()
00127   { convert(); return fixEntry_;}
00129   inline int * toZero()
00130   { convert(); return toZero_;}
00132   inline int * toOne()
00133   { convert(); return toOne_;}
00135   inline int * integerVariable() const
00136   { return integerVariable_;}
00138   inline int * backward() const
00139   { return backward_;}
00141   inline int numberVariables() const
00142   { return numberVariables_;}
00144   inline int numberIntegers() const
00145   { return numberIntegers_;}
00146 private:
00148   void convert();
00149 protected:
00151   CliqueEntry * fixEntry_;
00153   int * toZero_;
00155   int * toOne_;
00157   int * integerVariable_;
00159   int * backward_;
00161   int * fixingEntry_;
00163   int numberVariables_;
00165   int numberIntegers_;
00167   int maximumEntries_;
00169   int numberEntries_;
00170 };
00171 inline int sequenceInCliqueEntry(const CliqueEntry & cEntry)
00172 { return cEntry.fixes&0x7fffffff;}
00173 inline void setSequenceInCliqueEntry(CliqueEntry & cEntry,int sequence)
00174 { cEntry.fixes = sequence|(cEntry.fixes&0x80000000);}
00175 inline bool oneFixesInCliqueEntry(const CliqueEntry & cEntry)
00176 { return (cEntry.fixes&0x80000000)!=0;}
00177 inline void setOneFixesInCliqueEntry(CliqueEntry & cEntry,bool oneFixes)
00178 { cEntry.fixes = (oneFixes ? 0x80000000 : 0)|(cEntry.fixes&0x7fffffff);}
00179 
00180 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 3 Jun 2015 for Cgl by  doxygen 1.6.1