forked from coin-or/Cbc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CbcCompareUser.hpp
73 lines (65 loc) · 2.04 KB
/
CbcCompareUser.hpp
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
// Copyright (C) 2002, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
#ifndef CbcCompareUser_H
#define CbcCompareUser_H
#include "CbcNode.hpp"
#include "CbcCompareBase.hpp"
class CbcModel;
/* This is an example of a more complex rule with data
It is default after first solution
If weight is 0.0 then it is computed to hit first solution
less 2%
*/
class CbcCompareUser : public CbcCompareBase {
public:
// Default Constructor
CbcCompareUser();
// Constructor with weight
CbcCompareUser(double weight);
// Copy constructor
CbcCompareUser(const CbcCompareUser &rhs);
// Assignment operator
CbcCompareUser &operator=(const CbcCompareUser &rhs);
/// Clone
virtual CbcCompareBase *clone() const;
~CbcCompareUser();
/* This returns true if weighted value of node y is less than
weighted value of node x */
virtual bool test(CbcNode *x, CbcNode *y);
/// This is alternate test function
virtual bool alternateTest(CbcNode *x, CbcNode *y);
// This allows method to change behavior as it is called
// after each solution
virtual bool newSolution(CbcModel *model,
double objectiveAtContinuous,
int numberInfeasibilitiesAtContinuous);
/// Returns true if wants code to do scan with alternate criterion
virtual bool fullScan() const;
// This allows method to change behavior
// Return true if want tree re-sorted
virtual bool every1000Nodes(CbcModel *model, int numberNodes);
/* if weight == -1.0 then depth first (before solution)
if -2.0 then do breadth first just for first 1000 nodes
*/
inline double getWeight() const
{
return weight_;
}
inline void setWeight(double weight)
{
weight_ = weight;
}
protected:
// Weight for each infeasibility
double weight_;
// Weight for each infeasibility - computed from solution
double saveWeight_;
// Number of solutions
int numberSolutions_;
// count
mutable int count_;
// Tree size (at last check)
int treeSize_;
};
#endif