/usr/include/coin/CbcCompareBase.hpp is in coinor-libcbc-dev 2.5.0-2.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | /* $Id: CbcCompareBase.hpp 1400 2009-12-11 14:14:06Z lou $ */
// Copyright (C) 2002, International Business Machines
// Corporation and others. All Rights Reserved.
#ifndef CbcCompareBase_H
#define CbcCompareBase_H
//#############################################################################
/* These are alternative strategies for node traversal.
They can take data etc for fine tuning
At present the node list is stored as a heap and the "test"
comparison function returns true if node y is better than node x.
This is rather inflexible so if the comparison functions wants
it can signal to use alternative criterion on a complete pass
throgh tree.
*/
#include "CbcNode.hpp"
#include "CbcConfig.h"
class CbcModel;
class CbcTree;
class CbcCompareBase {
public:
// Default Constructor
CbcCompareBase () {
test_ = NULL;
threaded_ = false;
}
// This allows any method to change behavior as it is called
// after each solution
virtual void newSolution(CbcModel * ) {}
// This Also allows any method to change behavior as it is called
// after each solution
virtual void newSolution(CbcModel * ,
double ,
int ) {}
// This allows any method to change behavior as it is called
// after every 1000 nodes.
// Return true if want tree re-sorted
virtual bool every1000Nodes(CbcModel * , int ) {
return false;
}
/** Returns true if wants code to do scan with alternate criterion
NOTE - this is temporarily disabled
*/
virtual bool fullScan() const {
return false;
}
virtual ~CbcCompareBase() {}
/// Create C++ lines to get to current state
virtual void generateCpp( FILE * ) {}
// Copy constructor
CbcCompareBase ( const CbcCompareBase & rhs) {
test_ = rhs.test_;
threaded_ = rhs.threaded_;
}
// Assignment operator
CbcCompareBase & operator=( const CbcCompareBase& rhs) {
if (this != &rhs) {
test_ = rhs.test_;
threaded_ = rhs.threaded_;
}
return *this;
}
/// Clone
virtual CbcCompareBase * clone() const {
abort();
return NULL;
}
/// This is test function
virtual bool test (CbcNode * , CbcNode * ) {
return true;
}
/// This is alternate test function
virtual bool alternateTest (CbcNode * x, CbcNode * y) {
return test(x, y);
}
bool operator() (CbcNode * x, CbcNode * y) {
return test(x, y);
}
/// Further test if everything else equal
inline bool equalityTest (CbcNode * x, CbcNode * y) const {
assert (x);
assert (y);
if (!threaded_) {
CbcNodeInfo * infoX = x->nodeInfo();
assert (infoX);
int nodeNumberX = infoX->nodeNumber();
CbcNodeInfo * infoY = y->nodeInfo();
assert (infoY);
int nodeNumberY = infoY->nodeNumber();
assert (nodeNumberX != nodeNumberY);
return (nodeNumberX > nodeNumberY);
} else {
assert (x->nodeNumber() != y->nodeNumber());
return (x->nodeNumber() > y->nodeNumber());
}
}
/// Say threaded
inline void sayThreaded() {
threaded_ = true;
}
protected:
CbcCompareBase * test_;
// If not threaded we can use better way to break ties
bool threaded_;
};
#endif
|