00001
00002
00003
00004
00005
00006
00007
00008 #ifndef CglValidator_H
00009 #define CglValidator_H
00010 #include "OsiSolverInterface.hpp"
00011 #include "CglParam.hpp"
00012 #include <vector>
00013
00015
00016
00017
00018
00020 class CglValidator
00021 {
00022 public:
00024 enum RejectionsReasons{
00025 NoneAccepted=0 ,
00026 SmallViolation ,
00027 SmallCoefficient ,
00028 BigDynamic ,
00029 DenseCut,
00030 EmptyCut,
00031 DummyEnd
00032 };
00033
00035 CglValidator(double maxFillIn = 1.,
00036 double maxRatio = 1e8,
00037 double minViolation = 0,
00038 bool scale = false);
00039
00041 int cleanCut(OsiRowCut & aCut, const double * solCut,const OsiSolverInterface &si, const CglParam & par) const;
00043 int cleanCut2(OsiRowCut & aCut, const double * solCut, const OsiSolverInterface &si, const CglParam & par) const;
00045 int operator()(OsiRowCut & aCut, const double * solCut,const OsiSolverInterface &si, const CglParam & par) const
00046 {return cleanCut2(aCut, solCut, si, par);}
00049 void setMaxFillIn(double value) { maxFillIn_ = value;}
00050 void setMaxRatio(double value) { maxRatio_ = value;}
00051 void setMinViolation(double value) {minViolation_ = value;}
00055 double getMaxFillIn() {return maxFillIn_;}
00056 double getMaxRatio() { return maxRatio_;}
00057 double getMinViolation() {return minViolation_;}
00060 const std::string& failureString(RejectionsReasons code) const {return rejections_[(int) code];}
00061 const std::string& failureString(int code) const {return rejections_[ code];}
00062 int numRejected(RejectionsReasons code)const{ return numRejected_[(int) code];}
00063 int numRejected(int code)const{ return numRejected_[ code];}
00064 private:
00065 static void fillRejectionReasons();
00067 double maxFillIn_;
00069 double maxRatio_;
00071 double minViolation_;
00073 bool scale_;
00075 static std::vector<std::string> rejections_;
00077 mutable std::vector<int> numRejected_;
00078 };
00079 #endif