Cbc  2.9.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CbcNode.hpp
Go to the documentation of this file.
1 /* $Id: CbcNode.hpp 1957 2013-08-27 15:19:55Z forrest $ */
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 #ifndef CbcNode_H
7 #define CbcNode_H
8 
9 #include <string>
10 #include <vector>
11 
12 #include "CoinWarmStartBasis.hpp"
13 #include "CoinSearchTree.hpp"
14 #include "CbcBranchBase.hpp"
15 #include "CbcNodeInfo.hpp"
16 #include "CbcFullNodeInfo.hpp"
17 #include "CbcPartialNodeInfo.hpp"
18 
19 class OsiSolverInterface;
20 class OsiSolverBranch;
21 
22 class OsiCuts;
23 class OsiRowCut;
24 class OsiRowCutDebugger;
25 class CoinWarmStartBasis;
26 class CbcCountRowCut;
27 class CbcModel;
28 class CbcNode;
29 class CbcSubProblem;
30 class CbcGeneralBranchingObject;
31 
49 class CbcNode : public CoinTreeNode {
50 
51 public:
52 
54  CbcNode ();
55 
57  CbcNode (CbcModel * model, CbcNode * lastNode);
58 
60  CbcNode (const CbcNode &);
61 
63  CbcNode & operator= (const CbcNode& rhs);
64 
66  ~CbcNode ();
67 
83  void
84  createInfo(CbcModel * model,
85  CbcNode * lastNode,
86  const CoinWarmStartBasis *lastws,
87  const double * lastLower, const double * lastUpper,
88  int numberOldActiveCuts, int numberNewCuts);
89 
110  int chooseBranch (CbcModel * model,
111  CbcNode * lastNode,
112  int numberPassesLeft);
138  int chooseDynamicBranch (CbcModel * model,
139  CbcNode * lastNode,
140  OsiSolverBranch * & branches,
141  int numberPassesLeft);
168  int chooseOsiBranch (CbcModel * model,
169  CbcNode * lastNode,
170  OsiBranchingInformation * usefulInfo,
171  int branchState);
187  int chooseClpBranch (CbcModel * model,
188  CbcNode * lastNode);
189  int analyze(CbcModel * model, double * results);
191  void decrementCuts(int change = 1);
192 
194  void decrementParentCuts(CbcModel * model, int change = 1);
195 
197  void nullNodeInfo();
206  void initializeInfo();
207 
209  int branch(OsiSolverInterface * solver);
210 
214  double checkIsCutoff(double cutoff);
215  // Information to make basis and bounds
216  inline CbcNodeInfo * nodeInfo() const {
217  return nodeInfo_;
218  }
219 
220  // Objective value
221  inline double objectiveValue() const {
222  return objectiveValue_;
223  }
224  inline void setObjectiveValue(double value) {
225  objectiveValue_ = value;
226  }
228  inline int numberBranches() const {
229  if (branch_)
230  return (branch_->numberBranches()) ;
231  else
232  return (-1) ;
233  }
234 
235  /* Active arm of the attached OsiBranchingObject.
236 
237  In the simplest instance, coded -1 for the down arm of the branch, +1 for
238  the up arm. But see OsiBranchingObject::way()
239  Use nodeInfo--.numberBranchesLeft_ to see how active
240  */
241  int way() const;
243  inline int depth() const {
244  return depth_;
245  }
247  inline void setDepth(int value) {
248  depth_ = value;
249  }
251  inline int numberUnsatisfied() const {
252  return numberUnsatisfied_;
253  }
255  inline void setNumberUnsatisfied(int value) {
256  numberUnsatisfied_ = value;
257  }
259  inline double sumInfeasibilities() const {
260  return sumInfeasibilities_;
261  }
263  inline void setSumInfeasibilities(double value) {
264  sumInfeasibilities_ = value;
265  }
266  // Guessed objective value (for solution)
267  inline double guessedObjectiveValue() const {
268  return guessedObjectiveValue_;
269  }
270  inline void setGuessedObjectiveValue(double value) {
271  guessedObjectiveValue_ = value;
272  }
274  inline const OsiBranchingObject * branchingObject() const {
275  return branch_;
276  }
279  return branch_;
280  }
284  }
286  inline int nodeNumber() const {
287  return nodeNumber_;
288  }
289  inline void setNodeNumber(int node) {
290  nodeNumber_ = node;
291  }
293  inline bool onTree() const {
294  return (state_&1) != 0;
295  }
297  inline void setOnTree(bool yesNo) {
298  if (yesNo) state_ |= 1;
299  else state_ &= ~1;
300  }
302  inline bool active() const {
303  return (state_&2) != 0;
304  }
306  inline void setActive(bool yesNo) {
307  if (yesNo) state_ |= 2;
308  else state_ &= ~2;
309  }
311  inline int getState() const
312  { return state_;}
314  inline void setState(int value)
315  { state_ = value;}
317  void print() const;
319  inline void checkInfo() const {
320  assert (nodeInfo_->numberBranchesLeft() ==
322  }
323 
324 private:
325  // Data
337  int depth_;
346  int state_;
347 };
348 
349 
350 #endif
351 
void setObjectiveValue(double value)
Definition: CbcNode.hpp:224
void createInfo(CbcModel *model, CbcNode *lastNode, const CoinWarmStartBasis *lastws, const double *lastLower, const double *lastUpper, int numberOldActiveCuts, int numberNewCuts)
Create a description of the subproblem at this node.
void initializeInfo()
Initialize reference counts in attached CbcNodeInfo.
void setActive(bool yesNo)
Sets true if active.
Definition: CbcNode.hpp:306
void checkInfo() const
Debug.
Definition: CbcNode.hpp:319
void setNumberUnsatisfied(int value)
Set the number of objects unsatisfied at this node.
Definition: CbcNode.hpp:255
int depth_
Depth of the node in the search tree.
Definition: CbcNode.hpp:337
int getState() const
Get state (really for debug)
Definition: CbcNode.hpp:311
void setOnTree(bool yesNo)
Sets true if on tree.
Definition: CbcNode.hpp:297
void setSumInfeasibilities(double value)
Set sum of &quot;infeasibilities&quot; reported by each object.
Definition: CbcNode.hpp:263
void nullNodeInfo()
Nulls out node info.
int numberBranches() const
Number of arms defined for the attached OsiBranchingObject.
Definition: CbcNode.hpp:228
OsiBranchingObject * branch_
Branching object for this node.
Definition: CbcNode.hpp:335
Collections of row cuts and column cuts.
Definition: OsiCuts.hpp:19
void decrementParentCuts(CbcModel *model, int change=1)
Decrement all active cut counts in chain starting at parent.
double sumInfeasibilities_
Sum of &quot;infeasibilities&quot; reported by each object.
Definition: CbcNode.hpp:333
Abstract branching object base class.
int numberUnsatisfied() const
Get the number of objects unsatisfied at this node.
Definition: CbcNode.hpp:251
The default COIN simplex (basis-oriented) warm start class.
int depth() const
Depth in branch-and-cut search tree.
Definition: CbcNode.hpp:243
bool onTree() const
Returns true if on tree.
Definition: CbcNode.hpp:293
double guessedObjectiveValue() const
Definition: CbcNode.hpp:267
void setNodeNumber(int node)
Definition: CbcNode.hpp:289
const OsiBranchingObject * branchingObject() const
Branching object for this node.
Definition: CbcNode.hpp:274
CbcNodeInfo * nodeInfo_
Information to make basis and bounds.
Definition: CbcNode.hpp:327
Abstract Base Class for describing an interface to a solver.
int numberUnsatisfied_
The number of objects unsatisfied at this node.
Definition: CbcNode.hpp:339
int chooseDynamicBranch(CbcModel *model, CbcNode *lastNode, OsiSolverBranch *&branches, int numberPassesLeft)
Create a branching object for the node - when dynamic pseudo costs.
int chooseOsiBranch(CbcModel *model, CbcNode *lastNode, OsiBranchingInformation *usefulInfo, int branchState)
Create a branching object for the node.
CbcNode()
Default Constructor.
~CbcNode()
Destructor.
int state_
State 1 - on tree 2 - active.
Definition: CbcNode.hpp:346
CbcNode & operator=(const CbcNode &rhs)
Assignment operator.
OsiBranchingObject * modifiableBranchingObject() const
Modifiable branching object for this node.
Definition: CbcNode.hpp:278
double objectiveValue() const
Definition: CbcNode.hpp:221
OsiRowCut augmented with bookkeeping.
Information required while the node is live.
Definition: CbcNode.hpp:49
CbcNodeInfo * nodeInfo() const
Definition: CbcNode.hpp:216
double sumInfeasibilities() const
Get sum of &quot;infeasibilities&quot; reported by each object.
Definition: CbcNode.hpp:259
Row Cut Class.
Definition: OsiRowCut.hpp:29
int numberBranchesLeft() const
The number of branch arms left for this branching object.
int nodeNumber_
The node number.
Definition: CbcNode.hpp:341
void setDepth(int value)
Set depth in branch-and-cut search tree.
Definition: CbcNode.hpp:247
int branch(OsiSolverInterface *solver)
Does next branch and updates state.
bool active() const
Returns true if active.
Definition: CbcNode.hpp:302
int analyze(CbcModel *model, double *results)
A class from which the real tree nodes should be derived from.
int nodeNumber() const
The node number.
Definition: CbcNode.hpp:286
Information required to recreate the subproblem at this node.
Definition: CbcNodeInfo.hpp:68
double checkIsCutoff(double cutoff)
Double checks in case node can change its mind! Returns objective value Can change objective etc...
double guessedObjectiveValue_
Guessed satisfied Objective value.
Definition: CbcNode.hpp:331
void setBranchingObject(OsiBranchingObject *branchingObject)
Set branching object for this node (takes ownership)
Definition: CbcNode.hpp:282
void print() const
Print.
Validate cuts against a known solution.
Solver Branch Class.
int chooseClpBranch(CbcModel *model, CbcNode *lastNode)
Create a branching object for the node.
int numberBranches() const
The number of branch arms created for this branching object.
int numberBranchesLeft() const
Return number of branches left in object.
void setState(int value)
Set state (really for debug)
Definition: CbcNode.hpp:314
Simple Branch and bound class.
Definition: CbcModel.hpp:101
double objectiveValue_
Objective value.
Definition: CbcNode.hpp:329
void setGuessedObjectiveValue(double value)
Definition: CbcNode.hpp:270
int chooseBranch(CbcModel *model, CbcNode *lastNode, int numberPassesLeft)
Create a branching object for the node.
void decrementCuts(int change=1)
Decrement active cut counts.
int way() const