Cbc  2.8.12
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CbcCountRowCut.hpp
Go to the documentation of this file.
1 /* $Id: CbcCountRowCut.hpp 1839 2013-01-16 18:41:25Z 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 CbcCountRowCut_H
7 #define CbcCountRowCut_H
8 
9 
10 class OsiCuts;
11 class OsiRowCut;
12 class CbcNodeInfo;
13 
14 //#############################################################################
35 class CbcCountRowCut : public OsiRowCut {
36 
37 public:
38 
41 
43  CbcCountRowCut ();
44 
46  CbcCountRowCut ( const OsiRowCut &);
47 
49  CbcCountRowCut(const OsiRowCut &, CbcNodeInfo *, int whichOne,
50  int whichGenerator = -1, int numberPointingToThis = 0);
51 
58  virtual ~CbcCountRowCut ();
60 
62  void increment(int change = 1);
63 
65  int decrement(int change = 1);
66 
74  void setInfo(CbcNodeInfo *, int whichOne);
75 
77  inline int numberPointingToThis() {
78  return numberPointingToThis_;
79  }
80 
82  inline int whichCutGenerator() const {
83  return whichCutGenerator_;
84  }
85 
87  bool canDropCut(const OsiSolverInterface * solver, int row) const;
88 
89 #ifdef CHECK_CUT_COUNTS
90  // Just for printing sanity checks
91  int tempNumber_;
92 #endif
93 
94 private:
95 
98 
100  CbcCountRowCut & operator=(const CbcCountRowCut& rhs);
101 
103  CbcNodeInfo * owner_;
104 
107  int ownerCut_;
108 
110  int numberPointingToThis_;
111 
118  int whichCutGenerator_;
119 
120 };
130 // for hashing
131 typedef struct {
132  int index, next;
133 } CoinHashLink;
134 class CbcRowCuts {
135 public:
136 
137  CbcRowCuts(int initialMaxSize=0, int hashMultiplier=4 );
138  ~CbcRowCuts();
139  CbcRowCuts(const CbcRowCuts& rhs);
140  CbcRowCuts& operator=(const CbcRowCuts& rhs);
141  inline OsiRowCut2 * cut(int sequence) const
142  { return rowCut_[sequence];}
143  inline int numberCuts() const
144  { return numberCuts_;}
145  inline int sizeRowCuts() const
146  { return numberCuts_;}
147  inline OsiRowCut * rowCutPtr(int sequence)
148  { return rowCut_[sequence];}
149  void eraseRowCut(int sequence);
150  // Return 0 if added, 1 if not, -1 if not added because of space
151  int addCutIfNotDuplicate(const OsiRowCut & cut,int whichType=0);
152  // Return 0 if added, 1 if not, -1 if not added because of space
153  int addCutIfNotDuplicateWhenGreedy(const OsiRowCut & cut,int whichType=0);
154  // Add in cuts as normal cuts (and delete)
155  void addCuts(OsiCuts & cs);
156 private:
157  OsiRowCut2 ** rowCut_;
159  CoinHashLink *hash_;
160  int size_;
161  int hashMultiplier_;
162  int numberCuts_;
163  int lastHash_;
164 };
165 #endif
166 
int addCutIfNotDuplicate(const OsiRowCut &cut, int whichType=0)
void addCuts(OsiCuts &cs)
CbcRowCuts(int initialMaxSize=0, int hashMultiplier=4)
CbcCountRowCut()
Default Constructor.
int decrement(int change=1)
Decrement the number of references and return the number left.
int numberPointingToThis()
Number of other CbcNodeInfo objects pointing to this row cut.
int sizeRowCuts() const
int addCutIfNotDuplicateWhenGreedy(const OsiRowCut &cut, int whichType=0)
int whichCutGenerator() const
Which generator for cuts - as user order.
virtual ~CbcCountRowCut()
Destructor.
OsiRowCut augmented with bookkeeping.
int numberCuts() const
OsiRowCut2 * cut(int sequence) const
Information required to recreate the subproblem at this node.
Definition: CbcNodeInfo.hpp:68
void eraseRowCut(int sequence)
void setInfo(CbcNodeInfo *, int whichOne)
Set the information associating this cut with a node.
CbcRowCuts & operator=(const CbcRowCuts &rhs)
bool canDropCut(const OsiSolverInterface *solver, int row) const
Returns true if can drop cut if slack basic.
OsiRowCut * rowCutPtr(int sequence)
void increment(int change=1)
Increment the number of references.