14#include "CoinWarmStartBasis.hpp"
15#include "CoinSearchTree.hpp"
18class OsiSolverInterface;
23class OsiRowCutDebugger;
24class CoinWarmStartBasis;
29class CbcGeneralBranchingObject;
112 int ¤tNumberCuts)
const = 0;
242 inline int numberCuts()
const
302 inline bool symmetryWorked()
const
CbcModel * model() const
Return model.
OsiRowCut augmented with bookkeeping.
Simple Branch and bound class.
*Decrement active cut counts void decrementCuts(int change=1)
void deleteCuts(int numberToDelete, CbcCountRowCut **cuts)
Delete cuts (decrements counts) Slow unless cuts in same order as saved.
*Increment number of objects pointing to this void incrementNumberPointingToThis()
*Say if normal bool allActivated() const
*Decrement number of references and return number left int decrement(int amount=1)
*Increment number of references void increment(int amount=1)
*Say thrown away void throwAway()
*Return number of objects pointing to this int numberPointingToThis() const
*parent CbcNodeInfo * parent_
int numberBranchesLeft_
Number of branch arms left to explore at this node.
int active_
Active node information.
void initializeInfo(int number)
Initialize reference counts.
*routine common to constructors void setParentBasedData()
*Increment active cut counts void incrementCuts(int change=1)
*Get symmetry value(true worked at this node) inline bool symmetryWorked() const
virtual CbcNodeInfo * buildRowBasis(CoinWarmStartBasis &basis) const =0
Builds up row basis backwards (until original model).
CbcNodeInfo(const CbcNodeInfo &)
Copy constructor.
*Say one branch taken int branchedOn()
*virtual Clone CbcNodeInfo * clone() const =0
virtual void applyToModel(CbcModel *model, CoinWarmStartBasis *&basis, CbcCountRowCut **addCuts, int ¤tNumberCuts) const =0
Modify model according to information at node.
CbcNodeInfo()
Default Constructor.
void setNumberCuts(int value)
*Branching object for the parent const OsiBranchingObject * parentBranch() const
*Just apply bounds to one variable force means overwrite by double double & upper
*Just apply bounds to one variable force means overwrite by double double int force
int numberRows_
Number of rows in problem (before these cuts).
*Array of pointers to cuts CbcCountRowCut ** cuts() const
*If we need to take off parent based data void unsetParentBasedData()
*Parent of this CbcNodeInfo * parent() const
*Set owner null void nullOwner()
*Decrement all active cut counts in chain starting at parent void decrementParentCuts(CbcModel *model, int change=1)
*Say if marked bool marked() const
*Return number of branches left in object int numberBranchesLeft() const
*The node number int nodeNumber() const
*Array of pointers to cuts CbcCountRowCut ** cuts_
const CbcNode * owner() const
*Set parent null void nullParent()
void addCuts(OsiCuts &cuts, int numberToBranch, int numberPointingToThis)
*Set number of objects pointing to this void setNumberPointingToThis(int number)
void setNodeNumber(int node)
CbcNode * mutableOwner() const
*Copy of the branching object of the parent when the node is created OsiBranchingObject * parentBranch_
void deactivate(int mode=3)
Deactivate node information.
void addCuts(int numberCuts, CbcCountRowCut **cuts, int numberToBranch)
*Called when number branches left down to virtual zero void allBranchesGone()
virtual ~CbcNodeInfo()
Construct with parent and owner.
*Really delete a cut void deleteCut(int whichOne)
void deleteCuts(int numberToDelete, int *which)
int numberPointingToThis_
Number of other nodes pointing to this node.
*Just apply bounds to one variable force means overwrite by lower
*Increment all active cut counts in parent chain void incrementParentCuts(CbcModel *model, int change=1)
*Say symmetry worked at this node void setSymmetryWorked()
*Set number of branches left in object void setNumberBranchesLeft(int value)
*The node number int nodeNumber_