Cbc  2.10.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CbcCountRowCut.hpp
Go to the documentation of this file.
1 /* $Id: CbcCountRowCut.hpp 2465 2019-01-03 19:26:52Z unxusr $ */
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 class OsiCuts;
10 class OsiRowCut;
11 class CbcNodeInfo;
12 
13 //#############################################################################
34 class CbcCountRowCut : public OsiRowCut {
35 
36 public:
39 
42 
44  CbcCountRowCut(const OsiRowCut &);
45 
47  CbcCountRowCut(const OsiRowCut &, CbcNodeInfo *, int whichOne,
48  int whichGenerator = -1, int numberPointingToThis = 0);
49 
56  virtual ~CbcCountRowCut();
58 
60  void increment(int change = 1);
61 
63  int decrement(int change = 1);
64 
72  void setInfo(CbcNodeInfo *, int whichOne);
73 
75  inline int numberPointingToThis()
76  {
77  return numberPointingToThis_;
78  }
79 
81  inline int whichCutGenerator() const
82  {
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:
97 
100 
103 
107 
110 
118 };
128 // for hashing
129 typedef struct {
130  int index, next;
131 } CoinHashLink;
132 class CbcRowCuts {
133 public:
134  CbcRowCuts(int initialMaxSize = 0, int hashMultiplier = 4);
135  ~CbcRowCuts();
136  CbcRowCuts(const CbcRowCuts &rhs);
137  CbcRowCuts &operator=(const CbcRowCuts &rhs);
138  inline OsiRowCut2 *cut(int sequence) const
139  {
140  return rowCut_[sequence];
141  }
142  inline int numberCuts() const
143  {
144  return numberCuts_;
145  }
146  inline int sizeRowCuts() const
147  {
148  return numberCuts_;
149  }
150  inline OsiRowCut *rowCutPtr(int sequence)
151  {
152  return rowCut_[sequence];
153  }
154  void eraseRowCut(int sequence);
155  // Return 0 if added, 1 if not, -1 if not added because of space
156  int addCutIfNotDuplicate(const OsiRowCut &cut, int whichType = 0);
157  // Return 0 if added, 1 if not, -1 if not added because of space
158  int addCutIfNotDuplicateWhenGreedy(const OsiRowCut &cut, int whichType = 0);
159  // Add in cuts as normal cuts (and delete)
160  void addCuts(OsiCuts &cs);
161  // Truncate
162  void truncate(int numberAfter);
163 
164 private:
168  int size_;
172 };
173 #endif
174 
175 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
176 */
int addCutIfNotDuplicate(const OsiRowCut &cut, int whichType=0)
void addCuts(OsiCuts &cs)
CoinHashLink * hash_
Hash table.
void truncate(int numberAfter)
CbcRowCuts(int initialMaxSize=0, int hashMultiplier=4)
double rhs() const
Get right-hand side.
Collections of row cuts and column cuts.
Definition: OsiCuts.hpp:19
CbcCountRowCut()
Default Constructor.
int decrement(int change=1)
Decrement the number of references and return the number left.
Abstract Base Class for describing an interface to a solver.
int numberPointingToThis()
Number of other CbcNodeInfo objects pointing to this row cut.
CbcNodeInfo * owner_
Backward pointer to owning CbcNodeInfo.
Row Cut Class which refers back to row which created it.
Definition: OsiRowCut.hpp:300
int sizeRowCuts() const
OsiRowCut2 ** rowCut_
int addCutIfNotDuplicateWhenGreedy(const OsiRowCut &cut, int whichType=0)
OsiRowCut_inline const CoinPackedVector & row() const
Get row elements.
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
Row Cut Class.
Definition: OsiRowCut.hpp:29
int ownerCut_
Index of cut in owner's cut set (cuts_ ).
int numberPointingToThis_
Number of other CbcNodeInfo objects pointing to this cut.
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.
CbcCountRowCut & operator=(const CbcCountRowCut &rhs)
Standard assignment is illegal (reference counts would be incorrect)
CbcRowCuts & operator=(const CbcRowCuts &rhs)
int whichCutGenerator_
Which generator created this cut (add 10000 if globally valid) if -1 then from global cut pool -2 cut...
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.