00001 // Copyright (C) 2008, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef ClpNode_H 00004 #define ClpNode_H 00005 00006 #include "CoinPragma.hpp" 00007 00008 // This implements all stuff for Clp fathom 00013 class ClpFactorization; 00014 class ClpDualRowSteepest; 00015 class ClpNodeStuff; 00016 class ClpNode { 00017 00018 public: 00021 00022 void applyNode(ClpSimplex * model, bool justBounds ); 00024 int fixOnReducedCosts(ClpSimplex * model); 00026 00029 00030 inline double branchingValue() const 00031 { return branchingValue_;} 00033 int way() const; 00035 bool fathomed() const; 00037 void changeState(); 00039 inline int sequence() const 00040 { return sequence_;} 00042 00046 ClpNode(); 00048 ClpNode (const ClpSimplex * model, const ClpNodeStuff * stuff); 00050 void gutsOfConstructor(const ClpSimplex * model, const ClpNodeStuff * stuff); 00052 virtual ~ClpNode(); 00054 00058 ClpNode(const ClpNode&); 00060 ClpNode& operator=(const ClpNode&); 00062 00063 protected: 00064 // For state of branch 00065 typedef struct { 00066 unsigned int firstBranch:1; // nonzero if first branch on variable is up 00067 unsigned int branch:2; // 0 means do first branch next, 1 second, 2 finished 00068 unsigned int spare:29; 00069 } branchState; 00072 00073 double branchingValue_; 00075 ClpFactorization * factorization_; 00077 ClpDualRowSteepest * weights_; 00079 unsigned char * status_; 00081 double * primalSolution_; 00083 double * dualSolution_; 00085 int * pivotVariables_; 00087 int * fixed_; 00089 branchState branchState_; 00091 int sequence_; 00093 int numberFixed_; 00095 }; 00096 class ClpNodeStuff { 00097 00098 public: 00102 ClpNodeStuff(); 00104 virtual ~ClpNodeStuff(); 00106 00110 ClpNodeStuff(const ClpNodeStuff&); 00112 ClpNodeStuff& operator=(const ClpNodeStuff&); 00114 00115 public: 00118 00119 double integerTolerance_; 00121 double integerIncrement_; 00123 }; 00124 #endif