Blis  0.94.0
BlisConGenerator.h
Go to the documentation of this file.
1 /*===========================================================================*
2  * This file is part of the BiCePS Linear Integer Solver (BLIS). *
3  * *
4  * BLIS is distributed under the Eclipse Public License as part of the *
5  * COIN-OR repository (http://www.coin-or.org). *
6  * *
7  * Authors: *
8  * *
9  * Yan Xu, Lehigh University *
10  * Ted Ralphs, Lehigh University *
11  * *
12  * Conceptual Design: *
13  * *
14  * Yan Xu, Lehigh University *
15  * Ted Ralphs, Lehigh University *
16  * Laszlo Ladanyi, IBM T.J. Watson Research Center *
17  * Matthew Saltzman, Clemson University *
18  * *
19  * *
20  * Copyright (C) 2001-2013, Lehigh University, Yan Xu, and Ted Ralphs. *
21  * All Rights Reserved. *
22  *===========================================================================*/
23 
24 
25 //#############################################################################
26 // This file is modified from COIN/Cbc/CbcCutGenerator.hpp
27 //#############################################################################
28 
29 
30 #ifndef BlisConGenerator_h_
31 #define BlisConGenerator_h_
32 
33 #include "OsiSolverInterface.hpp"
34 #include "OsiCuts.hpp"
35 
36 
37 class BlisModel;
38 
39 class OsiRowCut;
40 class OsiRowCutDebugger;
41 class CglCutGenerator;
42 
43 
44 //#############################################################################
45 
59 
60 protected:
63 
65  CglCutGenerator * generator_;
66 
67  //------------------------------------------------------
68  // CON CONTROL
69  //------------------------------------------------------
70 
78 
81 
83  std::string name_;
84 
86  bool normal_;
87 
90 
94 
95  //------------------------------------------------------
96  // CON STATISTICS
97  //------------------------------------------------------
98 
101 
104 
106  double time_;
107 
109  int calls_;
110 
113 
114  public:
115 
120  :
121  model_(NULL),
122  generator_(NULL),
123  strategy_(BlisCutStrategyAuto),
124  cutGenerationFrequency_(1),
125  normal_(true),
126  atSolution_(false),
127  whenInfeasible_(false),
128  numConsGenerated_(0),
129  numConsUsed_(0),
130  time_(0),
131  calls_(0),
132  noConsCalls_(0)
133  { name_ = "UNKNOWN"; }
134 
136  BlisConGenerator(BlisModel * model,
137  CglCutGenerator * generator,
138  const char * name = NULL,
140  int cutGenerationFrequency_ = 1,
141  bool normal = true,
142  bool atSolution = false,
143  bool infeasible = false);
144 
147 
150 
153  {
154  if (generator_) {
155  delete generator_;
156  generator_ = NULL;
157  }
158  }
160 
172  virtual bool generateConstraints(BcpsConstraintPool &conPool);
174 
182  inline BlisModel *getModel() { return model_; }
183 
185  inline void setModel(BlisModel *m) { model_ = m; }
186 
188  void refreshModel(BlisModel * model);
189 
191  void setName(const char *str) { name_ = str; }
192 
194  inline std::string name() const { return name_; }
195 
197  void setStrategy(BlisCutStrategy value) { strategy_ = value; }
198 
200  inline BlisCutStrategy strategy() const { return strategy_; }
201 
203  void setCutGenerationFreq(int freq) { cutGenerationFrequency_ = freq; }
204 
206  inline int cutGenerationFreq() const { return cutGenerationFrequency_; }
207 
209  inline bool normal() const { return normal_; }
210 
212  inline void setNormal(bool value) { normal_ = value; }
213 
216  inline bool atSolution() const { return atSolution_; }
217 
220  inline void setAtSolution(bool value) { atSolution_ = value; }
221 
224  inline bool whenInfeasible() const { return whenInfeasible_; }
225 
228  inline void setWhenInfeasible(bool value) { whenInfeasible_ = value; }
229 
231  inline CglCutGenerator * generator() const { return generator_; }
232 
234  inline int numConsGenerated() { return numConsGenerated_; }
235 
237  inline void addNumConsGenerated(int n) { numConsGenerated_ += n; }
238 
240  inline int numConsUsed() { return numConsUsed_; }
241 
243  inline void addNumConsUsed(int n) { numConsUsed_ += n; }
244 
246  inline double time() const { return time_; }
247 
249  inline void addTime(double t) { time_ += t; }
250 
252  inline int calls() const { return calls_; }
253 
255  inline void addCalls(int n=1) { calls_ += n; }
256 
258  inline int noConsCalls() const { return noConsCalls_; }
259 
261  inline void addNoConsCalls(int n=1) { noConsCalls_ += n; }
263 };
264 
265 #endif
void addNoConsCalls(int n=1)
Increase the number of no cons called.
BlisModel * model_
The client model.
bool whenInfeasible() const
Get whether the con generator should be called when the subproblem is found to be infeasible...
int numConsUsed()
Get number of used cons.
bool atSolution() const
Get whether the con generator should be called when a solution is found.
CglCutGenerator * generator_
The CglCutGenerator object.
void addNumConsUsed(int n)
Increase the number of generated cons.
bool normal() const
Get whether the con generator should be called in the normal place.
virtual ~BlisConGenerator()
Destructor.
CglCutGenerator * generator() const
Get the CglCutGenerator bound to this BlisConGenerator.
int noConsCalls_
The times of calling this generator and no cons found.
std::string name() const
return name of generator.
int numConsGenerated_
Number of cons generated.
BlisConGenerator()
Default constructor.
int numConsGenerated()
Get number of generated cons.
BlisModel * getModel()
Set the client model.
double time() const
Cpu time used.
BlisCutStrategy strategy() const
Get the con generation interval.
void setName(const char *str)
return name of generator.
std::string name_
Name of generator.
int cutGenerationFrequency_
The frequency of calls to the cut generator.
int calls() const
Number called.
int cutGenerationFreq() const
Get the con generation interval.
bool normal_
Whether to call the generator in the normal place.
int numConsUsed_
Number of cons used.
bool atSolution_
Whether to call the generator when a new solution is found.
void refreshModel(BlisModel *model)
Refresh the model.
BlisConGenerator & operator=(const BlisConGenerator &rhs)
Assignment operator.
void addNumConsGenerated(int n)
Increase the number of generated cons.
int noConsCalls() const
Number called and no cons found.
double time_
Used CPU/User time.
void setNormal(bool value)
Set whether the con generator should be called in the normal place.
BlisCutStrategy strategy_
When to call CglCutGenerator::generateCuts routine.
int calls_
The times of calling this generator.
void addTime(double t)
Increase Cpu time used.
void setCutGenerationFreq(int freq)
Set the con generation strategy.
void setStrategy(BlisCutStrategy value)
Set the con generation strategy.
void addCalls(int n=1)
Increase the number of called.
virtual bool generateConstraints(BcpsConstraintPool &conPool)
Generate cons for the client model.
BlisCutStrategy
Definition: Blis.h:69
void setAtSolution(bool value)
Set whether the con generator should be called when a solution is found.
void setWhenInfeasible(bool value)
Set whether the con generator should be called when the subproblem is found to be infeasible...
Interface between Blis and Cut Generation Library.
bool whenInfeasible_
Whether to call generator when a subproblem is found to be infeasible.
void setModel(BlisModel *m)
Set the model.