Bonmin  1.8.8
BonQuadCut.hpp
Go to the documentation of this file.
1 // (C) Copyright International Business Machines Corporation 2007
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors :
6 // Pierre Bonami, International Business Machines Corporation
7 //
8 // Date : 10/06/2007
9 
10 #ifndef BonQuadCut_H
11 #define BonQuadCut_H
12 
13 #include "CoinPackedMatrix.hpp"
14 #include "OsiRowCut.hpp"
15 #include "OsiCuts.hpp"
16 #include "BonTypes.hpp"
17 #include <list>
18 
19 
20 namespace Bonmin {
21 
25  Full };
26 
27 class QuadCut : public OsiRowCut {
28  public:
29 
31  QuadCut();
32 
34  QuadCut(const QuadCut & other);
35 
37  QuadCut& operator=(const QuadCut & rhs);
38 
40  virtual OsiRowCut * clone() const;
41 
43  ~QuadCut();
44 
46  void print() const;
47 
49  CoinPackedMatrix& Q(){
50  return Q_;
51  }
52 
54  const CoinPackedMatrix& Q() const{
55  return Q_;
56  }
57 
61  return type_;}
62 
63  const MatrixStorageType& type() const{
64  return type_;}
65 
67  double & c(){return c_;}
68 
70  const double & c() const {return c_;}
71 
73  double violated(const double * solution) const;
74 
75  private:
77  double c_;
79  CoinPackedMatrix Q_;
82 
85  void operator+=(double value);
87 
89  void operator-=(double value);
90 
92  void operator*=(double value);
93 
95  void operator/=(double value);
97 
98 };
99 
101 class Cuts : public OsiCuts {
102  public:
105  Cuts();
106 
108  Cuts(const Cuts& other);
109 
111  Cuts& operator=(const Cuts & rhs);
112 
114  ~Cuts();
115 
117  inline void insert(const QuadCut& c);
118 
123  inline void insert(QuadCut* &c);
124 
126  inline void insert(const Cuts &cs);
127 
129  inline int sizeQuadCuts() const;
130 
132  inline int sizeCuts() const;
133 
135  void printCuts() const;
136 
137 
139  inline QuadCut * quadCutPtr(int i);
140 
142  inline const QuadCut * quadCutPtr(int i) const;
143 
145  inline QuadCut& quadCut(int i);
146 
147 
149  inline const QuadCut& quadCut(int i) const;
150 
152  inline void eraseQuadCut(int i);
153 
154  private:
156 };
157 
158 void
160  quadCuts_.push_back(new QuadCut(c));
161 }
162 
163 void
165  quadCuts_.push_back(c);
166  c = NULL;
167 }
168 
169 void
170 Cuts::insert(const Cuts & cs){
171  OsiCuts::insert(cs);
172  for(unsigned int i = 0 ; i < cs.quadCuts_.size() ; i++){
173  quadCuts_.push_back(new QuadCut(*cs.quadCuts_[i]));
174  }
175 }
176 
177 int
179  return static_cast<int>(quadCuts_.size());
180 }
181 
182 int
183 Cuts::sizeCuts() const {
184  return static_cast<int>(quadCuts_.size()) + OsiCuts::sizeCuts();
185 }
186 
187 QuadCut *
189  return quadCuts_[i];
190 }
191 
192 const QuadCut *
193 Cuts::quadCutPtr(int i) const {
194  return quadCuts_[i];
195 }
196 
197 QuadCut &
199  return *quadCuts_[i];
200 }
201 
202 const QuadCut &
203 Cuts::quadCut(int i) const {
204  return *quadCuts_[i];
205 }
206 
207 void
209  delete quadCuts_[i];
210  quadCuts_.erase(quadCuts_.begin() + i);
211 }
212 typedef std::list<QuadCut*> list_QuadCut;
213 
214 }// Ends Bonmin namespace
215 #endif
216 
217 
Stores the whole matrix of a non-symetric Q.
Definition: BonQuadCut.hpp:25
QuadCut & quadCut(int i)
Access to a quadratic cut by reference.
Definition: BonQuadCut.hpp:198
void operator/=(double value)
divide every vector entry by value
~Cuts()
Destructor.
Generalizes OsiCuts to handle quadratic cuts.
Definition: BonQuadCut.hpp:101
CoinPackedMatrix & Q()
Return the matrix stored.
Definition: BonQuadCut.hpp:49
MatrixStorageType
Definition: BonQuadCut.hpp:22
Cuts()
Default constructor.
void operator-=(double value)
subtract value from every vector entry
~QuadCut()
Destructor.
void print() const
Print.
Cuts & operator=(const Cuts &rhs)
Assignment operator.
const MatrixStorageType & type() const
Definition: BonQuadCut.hpp:63
int sizeCuts() const
Total number of cuts in the collection.
Definition: BonQuadCut.hpp:183
Stores only the upper triangle of a symetric Q.
Definition: BonQuadCut.hpp:23
std::list< QuadCut * > list_QuadCut
Definition: BonQuadCut.hpp:212
QuadCut * quadCutPtr(int i)
Access to a quadratic cut by pointer.
Definition: BonQuadCut.hpp:188
QuadCutPtrStorage quadCuts_
Definition: BonQuadCut.hpp:155
QuadCut()
Default constructor.
vector< QuadCut * > QuadCutPtrStorage
Definition: BonQuadCut.hpp:103
double & c()
Acces the constant.
Definition: BonQuadCut.hpp:67
void printCuts() const
Print all cuts in the collection.
int sizeQuadCuts() const
Number of quadratic cuts in the collection.
Definition: BonQuadCut.hpp:178
QuadCut & operator=(const QuadCut &rhs)
Assignment operator.
const CoinPackedMatrix & Q() const
Return the matrix stored.
Definition: BonQuadCut.hpp:54
Stores the lower triangle of a symetric Q.
Definition: BonQuadCut.hpp:24
double violated(const double *solution) const
Compute cut violation.
double c_
Stores the constant part of the cut.
Definition: BonQuadCut.hpp:77
virtual OsiRowCut * clone() const
Virtual copy.
const double & c() const
Acces the constant.
Definition: BonQuadCut.hpp:70
MatrixStorageType type_
Storage type.
Definition: BonQuadCut.hpp:81
void insert(const QuadCut &c)
insert a quadratic cut into the collection.
Definition: BonQuadCut.hpp:159
MatrixStorageType & type()
Acces storage type Acces storage type.
Definition: BonQuadCut.hpp:60
void operator*=(double value)
multiply every vector entry by value
void eraseQuadCut(int i)
Erase quadratic cut from the collection.
Definition: BonQuadCut.hpp:208
CoinPackedMatrix Q_
Stores quadratic part of cut.
Definition: BonQuadCut.hpp:79
void operator+=(double value)
add value to every vector entry