Cbc  2.9.9
 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 2094 2014-11-18 11:15:36Z 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 
101 
104 
108 
111 
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  // Truncate
157  void truncate(int numberAfter);
158 private:
162  int size_;
166 };
167 #endif
168 
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:290
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.