Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef BlisConGenerator_h_
00031 #define BlisConGenerator_h_
00032
00033 #include "OsiSolverInterface.hpp"
00034 #include "OsiCuts.hpp"
00035
00036
00037 class BlisModel;
00038
00039 class OsiRowCut;
00040 class OsiRowCutDebugger;
00041 class CglCutGenerator;
00042
00043
00044
00045
00058 class BlisConGenerator {
00059
00060 protected:
00062 BlisModel *model_;
00063
00065 CglCutGenerator * generator_;
00066
00067
00068
00069
00070
00077 BlisCutStrategy strategy_;
00078
00080 int cutGenerationFrequency_;
00081
00083 std::string name_;
00084
00086 bool normal_;
00087
00089 bool atSolution_;
00090
00093 bool whenInfeasible_;
00094
00095
00096
00097
00098
00100 int numConsGenerated_;
00101
00103 int numConsUsed_;
00104
00106 double time_;
00107
00109 int calls_;
00110
00112 int noConsCalls_;
00113
00114 public:
00115
00119 BlisConGenerator()
00120 :
00121 model_(NULL),
00122 generator_(NULL),
00123 strategy_(BlisCutStrategyAuto),
00124 cutGenerationFrequency_(1),
00125 normal_(true),
00126 atSolution_(false),
00127 whenInfeasible_(false),
00128 numConsGenerated_(0),
00129 numConsUsed_(0),
00130 time_(0),
00131 calls_(0),
00132 noConsCalls_(0)
00133 { name_ = "UNKNOWN"; }
00134
00136 BlisConGenerator(BlisModel * model,
00137 CglCutGenerator * generator,
00138 const char * name = NULL,
00139 BlisCutStrategy strategy = BlisCutStrategyAuto,
00140 int cutGenerationFrequency_ = 1,
00141 bool normal = true,
00142 bool atSolution = false,
00143 bool infeasible = false);
00144
00146 BlisConGenerator (const BlisConGenerator &);
00147
00149 BlisConGenerator & operator=(const BlisConGenerator& rhs);
00150
00152 virtual ~BlisConGenerator()
00153 {
00154 if (generator_) {
00155 delete generator_;
00156 generator_ = NULL;
00157 }
00158 }
00160
00172 virtual bool generateConstraints(BcpsConstraintPool &conPool);
00174
00182 inline BlisModel *getModel() { return model_; }
00183
00185 inline void setModel(BlisModel *m) { model_ = m; }
00186
00188 void refreshModel(BlisModel * model);
00189
00191 void setName(const char *str) { name_ = str; }
00192
00194 inline std::string name() const { return name_; }
00195
00197 void setStrategy(BlisCutStrategy value) { strategy_ = value; }
00198
00200 inline BlisCutStrategy strategy() const { return strategy_; }
00201
00203 void setCutGenerationFreq(int freq) { cutGenerationFrequency_ = freq; }
00204
00206 inline int cutGenerationFreq() const { return cutGenerationFrequency_; }
00207
00209 inline bool normal() const { return normal_; }
00210
00212 inline void setNormal(bool value) { normal_ = value; }
00213
00216 inline bool atSolution() const { return atSolution_; }
00217
00220 inline void setAtSolution(bool value) { atSolution_ = value; }
00221
00224 inline bool whenInfeasible() const { return whenInfeasible_; }
00225
00228 inline void setWhenInfeasible(bool value) { whenInfeasible_ = value; }
00229
00231 inline CglCutGenerator * generator() const { return generator_; }
00232
00234 inline int numConsGenerated() { return numConsGenerated_; }
00235
00237 inline void addNumConsGenerated(int n) { numConsGenerated_ += n; }
00238
00240 inline int numConsUsed() { return numConsUsed_; }
00241
00243 inline void addNumConsUsed(int n) { numConsUsed_ += n; }
00244
00246 inline double time() const { return time_; }
00247
00249 inline void addTime(double t) { time_ += t; }
00250
00252 inline int calls() const { return calls_; }
00253
00255 inline void addCalls(int n=1) { calls_ += n; }
00256
00258 inline int noConsCalls() const { return noConsCalls_; }
00259
00261 inline void addNoConsCalls(int n=1) { noConsCalls_ += n; }
00263 };
00264
00265 #endif