Cbc  2.9.8
CbcBranchDecision.hpp
Go to the documentation of this file.
1 // $Id: CbcBranchDecision.hpp 1899 2013-04-09 18:12:08Z stefan $
2 // Copyright (C) 2002, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 // Edwin 11/12/2009 carved from CbcBranchBase
7 
8 #ifndef CbcBranchDecision_H
9 #define CbcBranchDecision_H
10 
11 #include "CbcBranchBase.hpp"
12 
25 class CbcModel;
26 class OsiChooseVariable;
27 
29 public:
32 
33  // Copy constructor
35 
37  virtual ~CbcBranchDecision();
38 
40  virtual CbcBranchDecision * clone() const = 0;
41 
43  virtual void initialize(CbcModel * model) = 0;
44 
54  virtual int
56  CbcBranchingObject * bestSoFar,
57  double changeUp, int numberInfeasibilitiesUp,
58  double changeDown, int numberInfeasibilitiesDown) = 0 ;
59 
66  virtual int
67  bestBranch (CbcBranchingObject ** objects, int numberObjects, int numberUnsatisfied,
68  double * changeUp, int * numberInfeasibilitiesUp,
69  double * changeDown, int * numberInfeasibilitiesDown,
70  double objectiveValue) ;
71 
74  virtual int whichMethod() {
75  return 2;
76  }
77 
80  virtual void saveBranchingObject(OsiBranchingObject * ) {}
83  virtual void updateInformation(OsiSolverInterface * ,
84  const CbcNode * ) {}
86  virtual void setBestCriterion(double ) {}
87  virtual double getBestCriterion() const {
88  return 0.0;
89  }
91  virtual void generateCpp( FILE * ) {}
93  inline CbcModel * cbcModel() const {
94  return model_;
95  }
96  /* If chooseMethod_ id non-null then the rest is fairly pointless
97  as choosemethod_ will be doing all work
98  This comment makes more sense if you realise that there's a conversion in
99  process from the Cbc branching classes to Osi branching classes. The test
100  for use of the Osi branching classes is CbcModel::branchingMethod_
101  non-null (i.e., it points to one of these CbcBranchDecision objects) and
102  that branch decision object has an OsiChooseVariable method set. In which
103  case, we'll use it, rather than the choose[*]Variable methods defined in
104  CbcNode.
105  */
106 
107  OsiChooseVariable * chooseMethod() const {
108  return chooseMethod_;
109  }
111  void setChooseMethod(const OsiChooseVariable & method);
112 
113 protected:
114 
115  // Clone of branching object
119  /* If chooseMethod_ id non-null then the rest is fairly pointless
120  as choosemethod_ will be doing all work
121  */
122  OsiChooseVariable * chooseMethod_;
123 private:
125  CbcBranchDecision & operator=(const CbcBranchDecision& rhs);
126 
127 };
128 #endif
129 
virtual void setBestCriterion(double)
Sets or gets best criterion so far.
OsiChooseVariable * chooseMethod_
virtual int bestBranch(CbcBranchingObject **objects, int numberObjects, int numberUnsatisfied, double *changeUp, int *numberInfeasibilitiesUp, double *changeDown, int *numberInfeasibilitiesDown, double objectiveValue)
Compare N branching objects.
virtual ~CbcBranchDecision()
Destructor.
virtual int betterBranch(CbcBranchingObject *thisOne, CbcBranchingObject *bestSoFar, double changeUp, int numberInfeasibilitiesUp, double changeDown, int numberInfeasibilitiesDown)=0
Compare two branching objects.
virtual int whichMethod()
Says whether this method can handle both methods - 1 better, 2 best, 3 both.
CbcModel * model_
Pointer to model.
CbcBranchingObject * object_
OsiChooseVariable * chooseMethod() const
virtual CbcBranchDecision * clone() const =0
Clone.
Abstract branching object base class Now just difference with OsiBranchingObject. ...
Information required while the node is live.
Definition: CbcNode.hpp:49
CbcModel * cbcModel() const
Model.
CbcBranchDecision()
Default Constructor.
virtual void generateCpp(FILE *)
Create C++ lines to get to current state.
virtual void saveBranchingObject(OsiBranchingObject *)
Saves a clone of current branching object.
virtual void initialize(CbcModel *model)=0
Initialize e.g. before starting to choose a branch at a node.
virtual void updateInformation(OsiSolverInterface *, const CbcNode *)
Pass in information on branch just done.
void setChooseMethod(const OsiChooseVariable &method)
Set (clone) chooseMethod.
Simple Branch and bound class.
Definition: CbcModel.hpp:101
virtual double getBestCriterion() const