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 
58 class BlisConGenerator {
59 
60 protected:
63 
66 
67  //------------------------------------------------------
68  // CON CONTROL
69  //------------------------------------------------------
70 
78 
81 
83  std::string name_;
84 
86  bool normal_;
87 
89  bool atSolution_;
90 
93  bool whenInfeasible_;
94 
95  //------------------------------------------------------
96  // CON STATISTICS
97  //------------------------------------------------------
98 
100  int numConsGenerated_;
101 
103  int numConsUsed_;
104 
106  double time_;
107 
109  int calls_;
110 
112  int noConsCalls_;
113 
114  public:
115 
120  :
121  model_(NULL),
122  generator_(NULL),
125  normal_(true),
126  atSolution_(false),
127  whenInfeasible_(false),
129  numConsUsed_(0),
130  time_(0),
131  calls_(0),
132  noConsCalls_(0)
133  { name_ = "UNKNOWN"; }
134 
136  BlisConGenerator(BlisModel * model,
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 
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 setCutGenerationFreq(int freq)
Set the con generation strategy.
int calls_
The times of calling this generator.
int cutGenerationFreq() const
Get the con generation interval.
void addTime(double t)
Increase Cpu time used.
int numConsGenerated_
Number of cons generated.
void addCalls(int n=1)
Increase the number of called.
BlisModel * model_
The client model.
bool normal_
Whether to call the generator in the normal place.
bool whenInfeasible() const
Get whether the con generator should be called when the subproblem is found to be infeasible...
int cutGenerationFrequency_
The frequency of calls to the cut generator.
bool whenInfeasible_
Whether to call generator when a subproblem is found to be infeasible.
Row Cut Class.
Definition: OsiRowCut.hpp:29
double time() const
Cpu time used.
bool normal() const
Get whether the con generator should be called in the normal place.
BlisConGenerator & operator=(const BlisConGenerator &rhs)
Assignment operator.
char * name_
Name of generator.
void setNormal(bool value)
Set whether the con generator should be called in the normal place.
BlisModel * getModel()
Set the client model.
void refreshModel(BlisModel *model)
Set the client model.
virtual ~BlisConGenerator()
Destructor.
std::string name() const
return name of generator.
int numConsGenerated()
Get number of generated cons.
Interface between Blis and Cut Generation Library.
BlisCutStrategy
Definition: Blis.h:69
int calls() const
Number called.
int numConsUsed()
Get number of used cons.
void addNumConsUsed(int n)
Increase the number of generated cons.
BlisConGenerator()
Default constructor.
bool atSolution() const
Get whether the con generator should be called when a solution is found.
int strategy_
When to call CglCutGenerator::generateCuts routine.
void setStrategy(BlisCutStrategy value)
Set the con generation strategy.
void addNumConsGenerated(int n)
Increase the number of generated cons.
BlisCutStrategy strategy() const
Get the con generation interval.
Cut Generator Base Class.
void setName(const char *str)
return name of generator.
void setWhenInfeasible(bool value)
Set whether the con generator should be called when the subproblem is found to be infeasible...
bool atSolution_
Whether to call the generator when a new solution is found.
const char * name() const
return name of generator.
void addNoConsCalls(int n=1)
Increase the number of no cons called.
int noConsCalls() const
Number called and no cons found.
Validate cuts against a known solution.
void setAtSolution(bool value)
Set whether the con generator should be called when a solution is found.
double time_
Used CPU/User time.
void setModel(BlisModel *m)
Set the model.
int numConsUsed_
Number of cons used.
int strategy() const
Get the con generation interval.
int noConsCalls_
The times of calling this generator and no cons found.
virtual bool generateConstraints(BcpsConstraintPool &conPool)
Generate cons for the client model.
CglCutGenerator * generator_
The CglCutGenerator object.
std::string name_
Name of generator.
CglCutGenerator * generator() const
Get the CglCutGenerator bound to this BlisConGenerator.
BlisCutStrategy strategy_
When to call CglCutGenerator::generateCuts routine.