Cbc  2.9.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CbcFollowOn.hpp
Go to the documentation of this file.
1 // $Id: CbcFollowOn.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/10/2009-- carved out of CbcBranchActual
7 
8 #ifndef CbcFollowOn_H
9 #define CbcFollowOn_H
10 
11 #include "CbcBranchBase.hpp"
12 #include "OsiRowCut.hpp"
13 #include "CoinHelperFunctions.hpp"
14 #include "CoinPackedMatrix.hpp"
15 
25 class CbcFollowOn : public CbcObject {
26 
27 public:
28 
29  // Default Constructor
30  CbcFollowOn ();
31 
35 
36  // Copy constructor
37  CbcFollowOn ( const CbcFollowOn &);
38 
40  virtual CbcObject * clone() const;
41 
42  // Assignment operator
43  CbcFollowOn & operator=( const CbcFollowOn& rhs);
44 
45  // Destructor
46  ~CbcFollowOn ();
47 
49  virtual double infeasibility(const OsiBranchingInformation * info,
50  int &preferredWay) const;
51 
54  virtual void feasibleRegion();
55 
57  virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
59  virtual int gutsOfFollowOn(int & otherRow, int & preferredWay) const;
60 
61 protected:
68  int * rhs_;
69 };
70 
75 
76 public:
77 
78  // Default Constructor
80 
81  // Useful constructor
83  int way,
84  int numberOnDownSide, const int * down,
85  int numberOnUpSide, const int * up);
86 
87  // Copy constructor
89 
90  // Assignment operator
92 
94  virtual CbcBranchingObject * clone() const;
95 
96  // Destructor
97  virtual ~CbcFixingBranchingObject ();
98 
101  virtual double branch();
102 
103 #ifdef JJF_ZERO
104  // No need to override. Default works fine.
108  virtual void previousBranch();
109 #endif
110 
114  virtual void print();
115 
117  virtual CbcBranchObjType type() const {
118  return FollowOnBranchObj;
119  }
120 
128  virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
129 
139  (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
140 
141 private:
148  int * downList_;
150  int * upList_;
151 };
152 
161 class CbcIdiotBranch : public CbcObject {
162 
163 public:
164 
165  // Default Constructor
166  CbcIdiotBranch ();
167 
171 
172  // Copy constructor
173  CbcIdiotBranch ( const CbcIdiotBranch &);
174 
176  virtual CbcObject * clone() const;
177 
178  // Assignment operator
179  CbcIdiotBranch & operator=( const CbcIdiotBranch& rhs);
180 
181  // Destructor
182  ~CbcIdiotBranch ();
183 
185  virtual double infeasibility(const OsiBranchingInformation * info,
186  int &preferredWay) const;
187 
190  virtual void feasibleRegion();
191 
193  virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
195  virtual void initializeForBranching(CbcModel * );
196 protected:
198  OsiRowCut buildCut(const OsiBranchingInformation * info,int type,int & preferredWay) const;
204 };
205 
206 #endif
207 
virtual CbcBranchingObject * clone() const
Clone.
virtual ~CbcFixingBranchingObject()
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
virtual double branch()
Does next branch and updates state.
virtual void feasibleRegion()
This looks at solution and sets bounds to contain solution.
virtual void print()
Print something about branch - only if log level high.
virtual void feasibleRegion()=0
For the variable(s) referenced by the object, look at the current solution and set bounds to match th...
OsiRowCut buildCut(const OsiBranchingInformation *info, int type, int &preferredWay) const
Build "cut".
CbcRangeCompare
virtual void feasibleRegion()
This looks at solution and sets bounds to contain solution.
Define an idiotic idea class.
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
Definition: CbcObject.hpp:245
Abstract Base Class for describing an interface to a solver.
virtual CbcObject * clone() const
Clone.
int numberDown_
data Number on down list
double infeasibility() const
Return infeasibility.
CbcFollowOn & operator=(const CbcFollowOn &rhs)
CbcModel * model() const
Return model.
Definition: CbcObject.hpp:240
int way() const
Get the state of the branching object.
CbcFixingBranchingObject & operator=(const CbcFixingBranchingObject &rhs)
Abstract branching object base class Now just difference with OsiBranchingObject. ...
int * upList_
upList - variables to fix to lb on up branch
CoinPackedMatrix matrixByRow_
Matrix by row.
Definition: CbcFollowOn.hpp:66
virtual void previousBranch()
Reset every information so that the branching object appears to point to the previous child...
CoinThreadRandom savedRandomNumberGenerator_
Saved version of thread specific random number generator.
CbcBranchObjType
Row Cut Class.
Definition: OsiRowCut.hpp:29
virtual int compareOriginalObject(const CbcBranchingObject *brObj) const
Compare the original object of this with the original object of brObj.
CbcModel * model() const
Return model.
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object...
Sparse Matrix Base Class.
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way)
Creates a branching object.
General Branching Object class.
Definition: CbcFollowOn.hpp:74
int * downList_
downList - variables to fix to lb on down branch
virtual void print() const
Print something about branch - only if log level high.
int * rhs_
Possible rhs (if 0 then not possible)
Definition: CbcFollowOn.hpp:68
int numberUp_
Number on up list.
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way)
Creates a branching object.
Define a follow on class.
Definition: CbcFollowOn.hpp:25
CoinPackedMatrix matrix_
data Matrix
Definition: CbcFollowOn.hpp:64
CoinThreadRandom randomNumberGenerator_
data Thread specific random number generator
virtual CbcObject * clone() const
Clone.
virtual int gutsOfFollowOn(int &otherRow, int &preferredWay) const
As some computation is needed in more than one place - returns row.
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
CbcIdiotBranch & operator=(const CbcIdiotBranch &rhs)
Simple Branch and bound class.
Definition: CbcModel.hpp:101
Class for thread specific random numbers.
virtual void initializeForBranching(CbcModel *)
Initialize for branching.