coin-Cgl
/build/buildd/coinor-cgl-0.55.0/Cgl/src/CglLandP/CglLandPValidator.hpp
Go to the documentation of this file.
00001 // Copyright (C) 2005, Pierre Bonami and others.  All Rights Reserved.
00002 // Author:   Pierre Bonami
00003 //           Tepper School of Business
00004 //           Carnegie Mellon University, Pittsburgh, PA 15213
00005 // Date:     11/22/05
00006 //---------------------------------------------------------------------------
00007 
00008 #ifndef CglLandPValidator_H
00009 #define CglLandPValidator_H
00010 #include "OsiSolverInterface.hpp"
00011 #include "CglParam.hpp"
00012 #include <vector>
00013 
00015 //[5] = {"Accepted", "violation too small", "small coefficient too small", "big dynamic","too dense"}
00016 
00017 
00018 namespace LAP
00019 {
00020 
00022 class Validator
00023 {
00024 public:
00026     enum RejectionsReasons {
00027         NoneAccepted=0 ,
00028         SmallViolation ,
00029         SmallCoefficient ,
00030         BigDynamic ,
00031         DenseCut,
00032         EmptyCut,
00033         DummyEnd
00034     };
00035 
00037     Validator(double maxFillIn = 1.,
00038               double maxRatio = 1e8,
00039               double minViolation = 0,
00040               bool scale = false,
00041               double rhsScale = 1);
00042 
00044     int cleanCut(OsiRowCut & aCut, const double * solCut,const OsiSolverInterface &si, const CglParam & par,
00045                  const double * colLower, const double * colUpper) const;
00047     int cleanCut2(OsiRowCut & aCut, const double * solCut, const OsiSolverInterface &si, const CglParam & par,
00048                   const double * colLower, const double * colUpper) const;
00050     int operator()(OsiRowCut & aCut, const double * solCut,const OsiSolverInterface &si, const CglParam & par,
00051                    const double * colLower, const double * colUpper) const {
00052         return cleanCut(aCut, solCut, si, par, colLower, colUpper);
00053     }
00056     void setMaxFillIn(double value) {
00057         maxFillIn_ = value;
00058     }
00059     void setMaxRatio(double value) {
00060         maxRatio_ = value;
00061     }
00062     void setMinViolation(double value) {
00063         minViolation_ = value;
00064     }
00065 
00066     void setRhsScale(double v){
00067        rhsScale_ = v;
00068     }
00072     double getMaxFillIn() {
00073         return maxFillIn_;
00074     }
00075     double getMaxRatio() {
00076         return maxRatio_;
00077     }
00078     double getMinViolation() {
00079         return minViolation_;
00080     }
00083     const std::string& failureString(RejectionsReasons code) const {
00084         return rejections_[(int) code];
00085     }
00086     const std::string& failureString(int code) const {
00087         return rejections_[ code];
00088     }
00089     int numRejected(RejectionsReasons code)const {
00090         return numRejected_[(int) code];
00091     }
00092     int numRejected(int code)const {
00093         return numRejected_[ code];
00094     }
00095 private:
00096     static void fillRejectionReasons();
00098     double maxFillIn_;
00100     double maxRatio_;
00102     double minViolation_;
00104     bool scale_;
00106     double rhsScale_;
00108     static std::vector<std::string> rejections_;
00110     mutable std::vector<int> numRejected_;
00111 };
00112 
00113 }/* Ends namespace LAP.*/
00114 #endif