6 #ifndef CoinSearchTree_H
7 #define CoinSearchTree_H
29 void set(
unsigned int bits[4]);
32 std::string
str()
const;
140 printf(
"prefs of sibligs: sibling[%i]: %s\n", i, pref.c_str());
153 static inline const char*
name() {
return "CoinSearchTreeComparePreferred"; }
163 }
else if (yPref < xPref) {
169 printf(
"Comparing xpref (%s) and ypref (%s) : %s\n",
170 xpref.str().c_str(), ypref.str().c_str(), retval ?
"T" :
"F");
179 static inline const char*
name() {
return "CoinSearchTreeCompareDepth"; }
198 static inline const char*
name() {
return "CoinSearchTreeCompareBreadth"; }
208 static inline const char*
name() {
return "CoinSearchTreeCompareBest"; }
233 virtual void fixTop() = 0;
237 virtual const char*
compName()
const = 0;
251 candidateList_.front()->currentNode()->getPreferred().print(output);
252 printf(
"top's pref: %s\n", output);
270 const bool incrInserted =
true) {
279 const bool incrInserted =
true) {
295 #ifdef CAN_TRUST_STL_HEAP
297 template <
class Comp>
325 const char*
compName()
const {
return Comp::name(); }
330 template <
class Comp>
351 for (ch = 2; ch <
size; pos = ch, ch *= 2) {
352 if (
comp_(candidates[ch+1], candidates[ch]))
354 if (
comp_(s, candidates[ch]))
356 candidates[pos] = candidates[ch];
359 if (
comp_(candidates[ch], s)) {
360 candidates[pos] = candidates[ch];
373 for (ch = pos/2; ch != 0; pos = ch, ch /= 2) {
374 if (
comp_(candidates[ch], s))
376 candidates[pos] = candidates[ch];
391 const char*
compName()
const {
return Comp::name(); }
449 const bool incrInserted =
true) {
bool recentlyReevaluatedSearchStrategy_
variable used to test whether we need to reevaluate search strategy
bool hasUB_
Whether there is an upper bound or not.
void reevaluateSearchStrategy()
double bestQuality() const
CoinTreeNode * top() const
CoinSearchTreeBase & operator=(const CoinSearchTreeBase &)
virtual ~CoinSearchTreeBase()
CoinTreeSiblings & operator=(const CoinTreeSiblings &)
void CoinDisjointCopyN(register const T *from, const int size, register T *to)
This helper function copies an array to another location.
CoinTreeNode(int d, int f=-1, double q=-COIN_DBL_MAX, double tlb=-COIN_DBL_MAX, BitVector128 p=BitVector128())
bool operator<(const BitVector128 &b0, const BitVector128 &b1)
size_t numInserted() const
CoinTreeNode * top() const
friend bool operator<(const BitVector128 &b0, const BitVector128 &b1)
void setQuality(double q)
bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const
CoinTreeNode(const CoinTreeNode &x)
virtual ~CoinSearchTree()
void setTrueLB(double tlb)
virtual void realpush(CoinTreeSiblings *s)=0
static const char * name()
BitVector128 getPreferred() const
int fractionality_
A measure of fractionality, e.g., the number of unsatisfied integrality requirements.
void pop()
pop will advance the next pointer among the siblings on the top and then moves the top to its correct...
std::vector< CoinTreeSiblings * > candidateList_
CoinSearchTreeManager & operator=(const CoinSearchTreeManager &)
void setFractionality(int f)
CoinTreeNode * bestQualityCandidate() const
static const char * name()
void set(unsigned int bits[4])
int getFractionality() const
double true_lower_bound_
A true lower bound on the node.
void setTree(CoinSearchTreeBase *t)
void push(int numNodes, CoinTreeNode **nodes, const bool incrInserted=true)
bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const
const std::vector< CoinTreeSiblings * > & getCandidates() const
CoinTreeSiblings(const int n, CoinTreeNode **nodes)
void push(CoinTreeNode *node, const bool incrInserted=true)
const double COIN_DBL_MAX
const char * compName() const
bool advanceNode()
returns false if cannot be advanced
A class from which the real tree nodes should be derived from.
CoinSearchTreeBase * getTree() const
bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const
static const char * name()
virtual void realpush(CoinTreeSiblings *s)
static const char * name()
CoinTreeSiblings(const CoinTreeSiblings &s)
virtual const char * compName() const =0
CoinTreeNode ** siblings_
CoinSearchTree(const CoinSearchTreeBase &t)
void push(const CoinTreeSiblings &s, const bool incrInserted=true)
void push(const CoinTreeSiblings &sib, const bool incrInserted=true)
double getQuality() const
CoinTreeNode & operator=(const CoinTreeNode &x)
int depth_
The depth of the node in the tree.
void push(const int n, CoinTreeNode **nodes, const bool incrInserted=true)
double quality_
Some quality for the node.
bool operator()(const CoinTreeSiblings *x, const CoinTreeSiblings *y) const
Function objects to compare search tree nodes.
void setPreferred(BitVector128 p)
virtual void fixTop()
After changing data in the top node, fix the heap.
virtual ~CoinSearchTreeManager()
CoinSearchTreeBase * candidates_
CoinTreeNode * currentNode() const
void newSolution(double solValue)