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
|
// $Id: CbcBranchDefaultDecision.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 CbcBranchDefaultDecision_H
#define CbcBranchDefaultDecision_H
#include "CbcBranchBase.hpp"
/** Branching decision default class
This class implements a simple default algorithm
(betterBranch()) for choosing a branching variable.
*/
class CbcBranchDefaultDecision : public CbcBranchDecision {
public:
// Default Constructor
CbcBranchDefaultDecision ();
// Copy constructor
CbcBranchDefaultDecision ( const CbcBranchDefaultDecision &);
virtual ~CbcBranchDefaultDecision();
/// Clone
virtual CbcBranchDecision * clone() const;
/// Initialize, <i>e.g.</i> before the start of branch selection at a node
virtual void initialize(CbcModel * model);
/** \brief Compare two branching objects. Return nonzero if \p thisOne is
better than \p bestSoFar.
The routine compares branches using the values supplied in \p numInfUp and
\p numInfDn until a solution is found by search, after which it uses the
values supplied in \p changeUp and \p changeDn. The best branching object
seen so far and the associated parameter values are remembered in the
\c CbcBranchDefaultDecision object. The nonzero return value is +1 if the
up branch is preferred, -1 if the down branch is preferred.
As the names imply, the assumption is that the values supplied for
\p numInfUp and \p numInfDn will be the number of infeasibilities reported
by the branching object, and \p changeUp and \p changeDn will be the
estimated change in objective. Other measures can be used if desired.
Because an \c CbcBranchDefaultDecision object remembers the current best
branching candidate (#bestObject_) as well as the values used in the
comparison, the parameter \p bestSoFar is redundant, hence unused.
*/
virtual int betterBranch(CbcBranchingObject * thisOne,
CbcBranchingObject * bestSoFar,
double changeUp, int numInfUp,
double changeDn, int numInfDn);
/** Sets or gets best criterion so far */
virtual void setBestCriterion(double value);
virtual double getBestCriterion() const;
/** \brief Compare N branching objects. Return index of best
and sets way of branching in chosen object.
This routine is used only after strong branching.
*/
virtual int
bestBranch (CbcBranchingObject ** objects, int numberObjects, int numberUnsatisfied,
double * changeUp, int * numberInfeasibilitiesUp,
double * changeDown, int * numberInfeasibilitiesDown,
double objectiveValue) ;
private:
/// Illegal Assignment operator
CbcBranchDefaultDecision & operator=(const CbcBranchDefaultDecision& rhs);
/// data
/// "best" so far
double bestCriterion_;
/// Change up for best
double bestChangeUp_;
/// Number of infeasibilities for up
int bestNumberUp_;
/// Change down for best
double bestChangeDown_;
/// Pointer to best branching object
CbcBranchingObject * bestObject_;
/// Number of infeasibilities for down
int bestNumberDown_;
};
#endif
|