Bonmin 1.8.9
Loading...
Searching...
No Matches
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
20namespace Bonmin {
21
26
27class QuadCut : public OsiRowCut {
28 public:
29
32
34 QuadCut(const QuadCut & other);
35
38
40 virtual OsiRowCut * clone() const;
41
44
46 void print() const;
47
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_;
82
86 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
101class Cuts : public OsiCuts {
102 public:
106
108 Cuts(const Cuts& other);
109
111 Cuts& operator=(const Cuts & rhs);
112
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:
155 QuadCutPtrStorage quadCuts_;
156};
157
158void
160 quadCuts_.push_back(new QuadCut(c));
161}
162
163void
165 quadCuts_.push_back(c);
166 c = NULL;
167}
168
169void
170Cuts::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
177int
179 return static_cast<int>(quadCuts_.size());
180}
181
182int
184 return static_cast<int>(quadCuts_.size()) + OsiCuts::sizeCuts();
185}
186
187QuadCut *
189 return quadCuts_[i];
190}
191
192const QuadCut *
193Cuts::quadCutPtr(int i) const {
194 return quadCuts_[i];
195}
196
197QuadCut &
199 return *quadCuts_[i];
200}
201
202const QuadCut &
203Cuts::quadCut(int i) const {
204 return *quadCuts_[i];
205}
206
207void
209 delete quadCuts_[i];
210 quadCuts_.erase(quadCuts_.begin() + i);
211}
212typedef std::list<QuadCut*> list_QuadCut;
213
214}// Ends Bonmin namespace
215#endif
216
217
Generalizes OsiCuts to handle quadratic cuts.
void eraseQuadCut(int i)
Erase quadratic cut from the collection.
int sizeQuadCuts() const
Number of quadratic cuts in the collection.
Cuts & operator=(const Cuts &rhs)
Assignment operator.
Cuts()
Default constructor.
~Cuts()
Destructor.
Cuts(const Cuts &other)
Copy constructor.
QuadCut & quadCut(int i)
Access to a quadratic cut by reference.
void printCuts() const
Print all cuts in the collection.
QuadCut * quadCutPtr(int i)
Access to a quadratic cut by pointer.
int sizeCuts() const
Total number of cuts in the collection.
vector< QuadCut * > QuadCutPtrStorage
void insert(const QuadCut &c)
insert a quadratic cut into the collection.
~QuadCut()
Destructor.
double violated(const double *solution) const
Compute cut violation.
const MatrixStorageType & type() const
CoinPackedMatrix & Q()
Return the matrix stored.
MatrixStorageType & type()
Acces storage type Acces storage type.
const double & c() const
Acces the constant.
QuadCut & operator=(const QuadCut &rhs)
Assignment operator.
double & c()
Acces the constant.
void print() const
Print.
QuadCut()
Default constructor.
QuadCut(const QuadCut &other)
Copy constructor.
virtual OsiRowCut * clone() const
Virtual copy.
const CoinPackedMatrix & Q() const
Return the matrix stored.
A small wrap around std::vector to give easy access to array for interfacing with fortran code.
Definition BonTypes.hpp:9
void insert(const OsiRowCut &rc)
int sizeCuts() const
double rhs() const
(C) Copyright International Business Machines Corporation 2007
MatrixStorageType
@ Upper
Stores only the upper triangle of a symetric Q.
@ Lower
Stores the lower triangle of a symetric Q.
@ Full
Stores the whole matrix of a non-symetric Q.
std::list< QuadCut * > list_QuadCut