/build/buildd/coinor-cbc-2.5.0/Cbc/src/CbcParam.hpp
Go to the documentation of this file.
00001 /* $Id: CbcParam.hpp 1432 2010-02-07 19:33:53Z bjarni $ */
00002 // Copyright (C) 2002, International Business Machines
00003 // Corporation and others.  All Rights Reserved.
00004 
00005 #ifndef CbcParam_H
00006 #define CbcParam_H
00007 
00008 #include "OsiSolverInterface.hpp"
00009 #include "CbcModel.hpp"
00010 class ClpSimplex;
00034 enum CbcParameterType
00035 
00036 { CBC_PARAM_GENERALQUERY = -100, 
00037   CBC_PARAM_FULLGENERALQUERY,
00038 
00039   CLP_PARAM_DBL_PRIMALTOLERANCE = 1, 
00040   CLP_PARAM_DBL_DUALTOLERANCE, 
00041   CBC_PARAM_DBL_CUTOFF, 
00042   CLP_PARAM_DBL_TIMELIMIT,
00043   CLP_PARAM_DBL_DUALBOUND, 
00044   CLP_PARAM_DBL_PRIMALWEIGHT,  
00045   CLP_PARAM_DBL_OBJSCALE, 
00046   CLP_PARAM_DBL_RHSSCALE,
00047 
00048   CBC_PARAM_DBL_INFEASIBILITYWEIGHT = 51, 
00049   CBC_PARAM_DBL_INTEGERTOLERANCE, 
00050   CBC_PARAM_DBL_INCREMENT, 
00051   CBC_PARAM_DBL_ALLOWABLEGAP,
00052 
00053   CBC_PARAM_DBL_DJFIX = 81, 
00054   CBC_PARAM_DBL_GAPRATIO, 
00055   CBC_PARAM_DBL_TIGHTENFACTOR,
00056 
00057   CLP_PARAM_INT_LOGLEVEL = 101, 
00058   CLP_PARAM_INT_SOLVERLOGLEVEL, 
00059   CBC_PARAM_INT_MAXNODES, 
00060   CBC_PARAM_INT_STRONGBRANCHING,
00061   CLP_PARAM_INT_MAXFACTOR, 
00062   CLP_PARAM_INT_PERTVALUE, 
00063   CLP_PARAM_INT_MAXITERATION, 
00064   CLP_PARAM_INT_PRESOLVEPASS, 
00065   CLP_PARAM_INT_IDIOT, 
00066   CLP_PARAM_INT_SPRINT,
00067   CLP_PARAM_INT_OUTPUTFORMAT, 
00068   CLP_PARAM_INT_SLPVALUE, 
00069   CLP_PARAM_INT_PRESOLVEOPTIONS, 
00070   CLP_PARAM_INT_PRINTOPTIONS, 
00071   CLP_PARAM_INT_SPECIALOPTIONS,
00072 
00073   CLP_PARAM_STR_DIRECTION = 201, 
00074   CLP_PARAM_STR_DUALPIVOT, 
00075   CLP_PARAM_STR_SCALING, 
00076   CLP_PARAM_STR_ERRORSALLOWED, 
00077   CLP_PARAM_STR_KEEPNAMES, 
00078   CLP_PARAM_STR_SPARSEFACTOR,
00079   CLP_PARAM_STR_PRIMALPIVOT, 
00080   CLP_PARAM_STR_PRESOLVE, 
00081   CLP_PARAM_STR_CRASH, 
00082   CLP_PARAM_STR_BIASLU, 
00083   CLP_PARAM_STR_PERTURBATION, 
00084   CLP_PARAM_STR_MESSAGES, 
00085   CLP_PARAM_STR_AUTOSCALE,
00086   CLP_PARAM_STR_CHOLESKY, 
00087   CLP_PARAM_STR_KKT, 
00088   CLP_PARAM_STR_BARRIERSCALE, 
00089   CLP_PARAM_STR_GAMMA, 
00090   CLP_PARAM_STR_CROSSOVER, 
00091   CLP_PARAM_STR_PFI, 
00092   CLP_PARAM_NOTUSED_ALGORITHM,
00093 
00094   CBC_PARAM_STR_NODESTRATEGY = 251, 
00095   CBC_PARAM_STR_BRANCHSTRATEGY, 
00096   CBC_PARAM_NOTUSED_ADDCUTSSTRATEGY,
00097   CBC_PARAM_STR_GOMORYCUTS, 
00098   CBC_PARAM_STR_PROBINGCUTS, 
00099   CBC_PARAM_STR_KNAPSACKCUTS, 
00100   CBC_PARAM_NOTUSED_ODDHOLECUTS,
00101   CBC_PARAM_STR_ROUNDING, 
00102   CBC_PARAM_STR_SOLVER, 
00103   CBC_PARAM_STR_CLIQUECUTS, 
00104   CBC_PARAM_STR_COSTSTRATEGY, 
00105   CBC_PARAM_STR_FLOWCUTS, 
00106   CBC_PARAM_STR_MIXEDCUTS,
00107   CBC_PARAM_STR_TWOMIRCUTS, 
00108   CBC_PARAM_STR_PREPROCESS,
00109 
00110   CLP_PARAM_ACTION_DIRECTORY = 301, 
00111   CLP_PARAM_ACTION_IMPORT, 
00112   CLP_PARAM_ACTION_EXPORT, 
00113   CLP_PARAM_ACTION_RESTORE, 
00114   CLP_PARAM_ACTION_SAVE, 
00115   CLP_PARAM_ACTION_DUALSIMPLEX, 
00116   CLP_PARAM_ACTION_PRIMALSIMPLEX,
00117   CLP_PARAM_ACTION_MAXIMIZE, 
00118   CLP_PARAM_ACTION_MINIMIZE, 
00119   CLP_PARAM_ACTION_EXIT, 
00120   CLP_PARAM_ACTION_STDIN, 
00121   CLP_PARAM_ACTION_UNITTEST, 
00122   CLP_PARAM_ACTION_NETLIB_DUAL, 
00123   CLP_PARAM_ACTION_NETLIB_PRIMAL, 
00124   CLP_PARAM_ACTION_SOLUTION,
00125   CLP_PARAM_ACTION_TIGHTEN, 
00126   CLP_PARAM_ACTION_FAKEBOUND, 
00127   CLP_PARAM_ACTION_HELP, 
00128   CLP_PARAM_ACTION_PLUSMINUS, 
00129   CLP_PARAM_ACTION_NETWORK, 
00130   CLP_PARAM_ACTION_ALLSLACK, 
00131   CLP_PARAM_ACTION_REVERSE, 
00132   CLP_PARAM_ACTION_BARRIER, 
00133   CLP_PARAM_ACTION_NETLIB_BARRIER,
00134   CLP_PARAM_ACTION_REALLY_SCALE, 
00135   CLP_PARAM_ACTION_BASISIN, 
00136   CLP_PARAM_ACTION_BASISOUT, 
00137   CLP_PARAM_ACTION_SOLVECONTINUOUS, 
00138   CBC_PARAM_ACTION_BAB, 
00139   CBC_PARAM_ACTION_MIPLIB, 
00140   CLP_PARAM_ACTION_CLEARCUTS,
00141   CLP_VERSION_NOTUSED_PRINTVERSION,
00142 
00143   CBC_PARAM_NOTUSED_OSLSTUFF = 401, 
00144   CBC_PARAM_NOTUSED_CBCSTUFF,
00145 
00146   CBC_PARAM_NOTUSED_INVALID = 1000
00147 };
00148 
00149 
00151 
00152 class CbcParam {
00153 
00154 public:
00155 
00158 
00159     CbcParam (  );
00160     CbcParam (std::string name, std::string help,
00161               double lower, double upper, CbcParameterType type, bool display = true);
00162     CbcParam (std::string name, std::string help,
00163               int lower, int upper, CbcParameterType type, bool display = true);
00164     // Other strings will be added by insert
00165     CbcParam (std::string name, std::string help, std::string firstValue,
00166               CbcParameterType type, int defaultIndex = 0, bool display = true);
00167     // Action
00168     CbcParam (std::string name, std::string help,
00169               CbcParameterType type, int indexNumber = -1, bool display = true);
00171     CbcParam(const CbcParam &);
00173     CbcParam & operator=(const CbcParam & rhs);
00175     ~CbcParam (  );
00177 
00180 
00181     void append(std::string keyWord);
00183     void addHelp(std::string keyWord);
00185     inline std::string  name(  ) const {
00186         return name_;
00187     };
00189     inline std::string  shortHelp(  ) const {
00190         return shortHelp_;
00191     };
00193     int setDoubleParameter(CbcModel & model, double value) const;
00195     double doubleParameter(CbcModel & model) const;
00197     int setIntParameter(CbcModel & model, int value) const;
00199     int intParameter(CbcModel & model) const;
00201     int setDoubleParameter(ClpSimplex * model, double value) const;
00203     double doubleParameter(ClpSimplex * model) const;
00205     int setIntParameter(ClpSimplex * model, int value) const;
00207     int intParameter(ClpSimplex * model) const;
00209     int setDoubleParameter(OsiSolverInterface * model, double value) const;
00211     double doubleParameter(OsiSolverInterface * model) const;
00213     int setIntParameter(OsiSolverInterface * model, int value) const;
00215     int intParameter(OsiSolverInterface * model) const;
00217     int checkDoubleParameter(double value) const;
00219     std::string matchName (  ) const;
00221     int parameterOption ( std::string check ) const;
00223     void printOptions (  ) const;
00225     inline std::string currentOption (  ) const {
00226         return definedKeyWords_[currentKeyWord_];
00227     }
00229     inline void setCurrentOption ( int value ) {
00230         currentKeyWord_ = value;
00231     }
00233     inline void setIntValue ( int value ) {
00234         intValue_ = value;
00235     }
00236     inline int intValue () const {
00237         return intValue_;
00238     }
00240     inline void setDoubleValue ( double value ) {
00241         doubleValue_ = value;
00242     }
00243     inline double doubleValue () const {
00244         return doubleValue_;
00245     }
00247     inline void setStringValue ( std::string value ) {
00248         stringValue_ = value;
00249     }
00250     inline std::string stringValue () const {
00251         return stringValue_;
00252     }
00254     int matches (std::string input) const;
00256     inline CbcParameterType type() const {
00257         return type_;
00258     }
00260     inline bool displayThis() const {
00261         return display_;
00262     }
00264     inline void setLonghelp(const std::string help) {
00265         longHelp_ = help;
00266     }
00268     void printLongHelp() const;
00270     void printString() const;
00272     inline int indexNumber() const {
00273         return indexNumber_;
00274     }
00275 private:
00277     void gutsOfConstructor();
00279 
00280 private:
00281 
00286     // Type see CbcParameterType
00287     CbcParameterType type_;
00289     double lowerDoubleValue_;
00290     double upperDoubleValue_;
00292     int lowerIntValue_;
00293     int upperIntValue_;
00294     // Length of name
00295     unsigned int lengthName_;
00296     // Minimum match
00297     unsigned int lengthMatch_;
00299     std::vector<std::string> definedKeyWords_;
00301     std::string name_;
00303     std::string shortHelp_;
00305     std::string longHelp_;
00307     CbcParameterType action_;
00309     int currentKeyWord_;
00311     bool display_;
00313     int intValue_;
00315     double doubleValue_;
00317     std::string stringValue_;
00319     int indexNumber_;
00321 };
00322 #endif  /* CbcParam_H */
00323