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
|
// $Id: CbcSimpleIntegerPseudoCost.hpp 1899 2013-04-09 18:12:08Z stefan $
// 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).
// Edwin 11/10/2009-- carved out of CbcBranchActual
#ifndef CbcSimpleIntegerPseudoCost_H
#define CbcSimpleIntegerPseudoCost_H
#include "CbcSimpleInteger.hpp"
/// Define a single integer class but with pseudo costs
class CbcSimpleIntegerPseudoCost : public CbcSimpleInteger {
public:
// Default Constructor
CbcSimpleIntegerPseudoCost ();
// Useful constructor - passed model index
CbcSimpleIntegerPseudoCost (CbcModel * model, int iColumn, double breakEven = 0.5);
// Useful constructor - passed and model index and pseudo costs
CbcSimpleIntegerPseudoCost (CbcModel * model, int iColumn,
double downPseudoCost, double upPseudoCost);
// Useful constructor - passed and model index and pseudo costs
CbcSimpleIntegerPseudoCost (CbcModel * model, int dummy, int iColumn,
double downPseudoCost, double upPseudoCost);
// Copy constructor
CbcSimpleIntegerPseudoCost ( const CbcSimpleIntegerPseudoCost &);
/// Clone
virtual CbcObject * clone() const;
// Assignment operator
CbcSimpleIntegerPseudoCost & operator=( const CbcSimpleIntegerPseudoCost& rhs);
// Destructor
virtual ~CbcSimpleIntegerPseudoCost ();
/// Infeasibility - large is 0.5
virtual double infeasibility(const OsiBranchingInformation * info,
int &preferredWay) const;
/// Creates a branching object
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
/// Down pseudo cost
inline double downPseudoCost() const {
return downPseudoCost_;
}
/// Set down pseudo cost
inline void setDownPseudoCost(double value) {
downPseudoCost_ = value;
}
/// Up pseudo cost
inline double upPseudoCost() const {
return upPseudoCost_;
}
/// Set up pseudo cost
inline void setUpPseudoCost(double value) {
upPseudoCost_ = value;
}
/// Up down separator
inline double upDownSeparator() const {
return upDownSeparator_;
}
/// Set up down separator
inline void setUpDownSeparator(double value) {
upDownSeparator_ = value;
}
/// Return "up" estimate
virtual double upEstimate() const;
/// Return "down" estimate (default 1.0e-5)
virtual double downEstimate() const;
/// method - see below for details
inline int method() const {
return method_;
}
/// Set method
inline void setMethod(int value) {
method_ = value;
}
protected:
/// data
/// Down pseudo cost
double downPseudoCost_;
/// Up pseudo cost
double upPseudoCost_;
/** Up/down separator
If >0.0 then do first branch up if value-floor(value)
>= this value
*/
double upDownSeparator_;
/** Method -
0 - normal - return min (up,down)
1 - if before any solution return CoinMax(up,down)
2 - if before branched solution return CoinMax(up,down)
3 - always return CoinMax(up,down)
*/
int method_;
};
#endif
|