Cbc
trunk
|
00001 /* $Id$ */ 00002 // Copyright (C) 2002, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 // This code is licensed under the terms of the Eclipse Public License (EPL). 00005 00006 #ifndef CbcParam_H 00007 #define CbcParam_H 00008 00009 #include "OsiSolverInterface.hpp" 00010 #include "CbcModel.hpp" 00011 class ClpSimplex; 00035 enum CbcParameterType 00036 00037 { CBC_PARAM_GENERALQUERY = -100, 00038 CBC_PARAM_FULLGENERALQUERY, 00039 00040 CLP_PARAM_DBL_PRIMALTOLERANCE = 1, 00041 CLP_PARAM_DBL_DUALTOLERANCE, 00042 CBC_PARAM_DBL_CUTOFF, 00043 CLP_PARAM_DBL_TIMELIMIT, 00044 CLP_PARAM_DBL_DUALBOUND, 00045 CLP_PARAM_DBL_PRIMALWEIGHT, 00046 CLP_PARAM_DBL_OBJSCALE, 00047 CLP_PARAM_DBL_RHSSCALE, 00048 00049 CBC_PARAM_DBL_INFEASIBILITYWEIGHT = 51, 00050 CBC_PARAM_DBL_INTEGERTOLERANCE, 00051 CBC_PARAM_DBL_INCREMENT, 00052 CBC_PARAM_DBL_ALLOWABLEGAP, 00053 00054 CBC_PARAM_DBL_DJFIX = 81, 00055 CBC_PARAM_DBL_GAPRATIO, 00056 CBC_PARAM_DBL_TIGHTENFACTOR, 00057 00058 CLP_PARAM_INT_LOGLEVEL = 101, 00059 CLP_PARAM_INT_SOLVERLOGLEVEL, 00060 CBC_PARAM_INT_MAXNODES, 00061 CBC_PARAM_INT_STRONGBRANCHING, 00062 CLP_PARAM_INT_MAXFACTOR, 00063 CLP_PARAM_INT_PERTVALUE, 00064 CLP_PARAM_INT_MAXITERATION, 00065 CLP_PARAM_INT_PRESOLVEPASS, 00066 CLP_PARAM_INT_IDIOT, 00067 CLP_PARAM_INT_SPRINT, 00068 CLP_PARAM_INT_OUTPUTFORMAT, 00069 CLP_PARAM_INT_SLPVALUE, 00070 CLP_PARAM_INT_PRESOLVEOPTIONS, 00071 CLP_PARAM_INT_PRINTOPTIONS, 00072 CLP_PARAM_INT_SPECIALOPTIONS, 00073 00074 CLP_PARAM_STR_DIRECTION = 201, 00075 CLP_PARAM_STR_DUALPIVOT, 00076 CLP_PARAM_STR_SCALING, 00077 CLP_PARAM_STR_ERRORSALLOWED, 00078 CLP_PARAM_STR_KEEPNAMES, 00079 CLP_PARAM_STR_SPARSEFACTOR, 00080 CLP_PARAM_STR_PRIMALPIVOT, 00081 CLP_PARAM_STR_PRESOLVE, 00082 CLP_PARAM_STR_CRASH, 00083 CLP_PARAM_STR_BIASLU, 00084 CLP_PARAM_STR_PERTURBATION, 00085 CLP_PARAM_STR_MESSAGES, 00086 CLP_PARAM_STR_AUTOSCALE, 00087 CLP_PARAM_STR_CHOLESKY, 00088 CLP_PARAM_STR_KKT, 00089 CLP_PARAM_STR_BARRIERSCALE, 00090 CLP_PARAM_STR_GAMMA, 00091 CLP_PARAM_STR_CROSSOVER, 00092 CLP_PARAM_STR_PFI, 00093 CLP_PARAM_NOTUSED_ALGORITHM, 00094 00095 CBC_PARAM_STR_NODESTRATEGY = 251, 00096 CBC_PARAM_STR_BRANCHSTRATEGY, 00097 CBC_PARAM_NOTUSED_ADDCUTSSTRATEGY, 00098 CBC_PARAM_STR_GOMORYCUTS, 00099 CBC_PARAM_STR_PROBINGCUTS, 00100 CBC_PARAM_STR_KNAPSACKCUTS, 00101 CBC_PARAM_NOTUSED_ODDHOLECUTS, 00102 CBC_PARAM_STR_ROUNDING, 00103 CBC_PARAM_STR_SOLVER, 00104 CBC_PARAM_STR_CLIQUECUTS, 00105 CBC_PARAM_STR_COSTSTRATEGY, 00106 CBC_PARAM_STR_FLOWCUTS, 00107 CBC_PARAM_STR_MIXEDCUTS, 00108 CBC_PARAM_STR_TWOMIRCUTS, 00109 CBC_PARAM_STR_PREPROCESS, 00110 00111 CLP_PARAM_ACTION_DIRECTORY = 301, 00112 CLP_PARAM_ACTION_IMPORT, 00113 CLP_PARAM_ACTION_EXPORT, 00114 CLP_PARAM_ACTION_RESTORE, 00115 CLP_PARAM_ACTION_SAVE, 00116 CLP_PARAM_ACTION_DUALSIMPLEX, 00117 CLP_PARAM_ACTION_PRIMALSIMPLEX, 00118 CLP_PARAM_ACTION_MAXIMIZE, 00119 CLP_PARAM_ACTION_MINIMIZE, 00120 CLP_PARAM_ACTION_EXIT, 00121 CLP_PARAM_ACTION_STDIN, 00122 CLP_PARAM_ACTION_UNITTEST, 00123 CLP_PARAM_ACTION_NETLIB_DUAL, 00124 CLP_PARAM_ACTION_NETLIB_PRIMAL, 00125 CLP_PARAM_ACTION_SOLUTION, 00126 CLP_PARAM_ACTION_TIGHTEN, 00127 CLP_PARAM_ACTION_FAKEBOUND, 00128 CLP_PARAM_ACTION_HELP, 00129 CLP_PARAM_ACTION_PLUSMINUS, 00130 CLP_PARAM_ACTION_NETWORK, 00131 CLP_PARAM_ACTION_ALLSLACK, 00132 CLP_PARAM_ACTION_REVERSE, 00133 CLP_PARAM_ACTION_BARRIER, 00134 CLP_PARAM_ACTION_NETLIB_BARRIER, 00135 CLP_PARAM_ACTION_REALLY_SCALE, 00136 CLP_PARAM_ACTION_BASISIN, 00137 CLP_PARAM_ACTION_BASISOUT, 00138 CLP_PARAM_ACTION_SOLVECONTINUOUS, 00139 CBC_PARAM_ACTION_BAB, 00140 CBC_PARAM_ACTION_MIPLIB, 00141 CLP_PARAM_ACTION_CLEARCUTS, 00142 CLP_VERSION_NOTUSED_PRINTVERSION, 00143 00144 CBC_PARAM_NOTUSED_OSLSTUFF = 401, 00145 CBC_PARAM_NOTUSED_CBCSTUFF, 00146 00147 CBC_PARAM_NOTUSED_INVALID = 1000 00148 }; 00149 00150 00152 00153 class CbcParam { 00154 00155 public: 00156 00159 00160 CbcParam ( ); 00161 CbcParam (std::string name, std::string help, 00162 double lower, double upper, CbcParameterType type, bool display = true); 00163 CbcParam (std::string name, std::string help, 00164 int lower, int upper, CbcParameterType type, bool display = true); 00165 // Other strings will be added by insert 00166 CbcParam (std::string name, std::string help, std::string firstValue, 00167 CbcParameterType type, int defaultIndex = 0, bool display = true); 00168 // Action 00169 CbcParam (std::string name, std::string help, 00170 CbcParameterType type, int indexNumber = -1, bool display = true); 00172 CbcParam(const CbcParam &); 00174 CbcParam & operator=(const CbcParam & rhs); 00176 ~CbcParam ( ); 00178 00181 00182 void append(std::string keyWord); 00184 void addHelp(std::string keyWord); 00186 inline std::string name( ) const { 00187 return name_; 00188 }; 00190 inline std::string shortHelp( ) const { 00191 return shortHelp_; 00192 }; 00194 int setDoubleParameter(CbcModel & model, double value) const; 00196 double doubleParameter(CbcModel & model) const; 00198 int setIntParameter(CbcModel & model, int value) const; 00200 int intParameter(CbcModel & model) const; 00202 int setDoubleParameter(ClpSimplex * model, double value) const; 00204 double doubleParameter(ClpSimplex * model) const; 00206 int setIntParameter(ClpSimplex * model, int value) const; 00208 int intParameter(ClpSimplex * model) const; 00210 int setDoubleParameter(OsiSolverInterface * model, double value) const; 00212 double doubleParameter(OsiSolverInterface * model) const; 00214 int setIntParameter(OsiSolverInterface * model, int value) const; 00216 int intParameter(OsiSolverInterface * model) const; 00218 int checkDoubleParameter(double value) const; 00220 std::string matchName ( ) const; 00222 int parameterOption ( std::string check ) const; 00224 void printOptions ( ) const; 00226 inline std::string currentOption ( ) const { 00227 return definedKeyWords_[currentKeyWord_]; 00228 } 00230 inline void setCurrentOption ( int value ) { 00231 currentKeyWord_ = value; 00232 } 00234 inline void setIntValue ( int value ) { 00235 intValue_ = value; 00236 } 00237 inline int intValue () const { 00238 return intValue_; 00239 } 00241 inline void setDoubleValue ( double value ) { 00242 doubleValue_ = value; 00243 } 00244 inline double doubleValue () const { 00245 return doubleValue_; 00246 } 00248 inline void setStringValue ( std::string value ) { 00249 stringValue_ = value; 00250 } 00251 inline std::string stringValue () const { 00252 return stringValue_; 00253 } 00255 int matches (std::string input) const; 00257 inline CbcParameterType type() const { 00258 return type_; 00259 } 00261 inline bool displayThis() const { 00262 return display_; 00263 } 00265 inline void setLonghelp(const std::string help) { 00266 longHelp_ = help; 00267 } 00269 void printLongHelp() const; 00271 void printString() const; 00273 inline int indexNumber() const { 00274 return indexNumber_; 00275 } 00276 private: 00278 void gutsOfConstructor(); 00280 00281 private: 00282 00287 // Type see CbcParameterType 00288 CbcParameterType type_; 00290 double lowerDoubleValue_; 00291 double upperDoubleValue_; 00293 int lowerIntValue_; 00294 int upperIntValue_; 00295 // Length of name 00296 unsigned int lengthName_; 00297 // Minimum match 00298 unsigned int lengthMatch_; 00300 std::vector<std::string> definedKeyWords_; 00302 std::string name_; 00304 std::string shortHelp_; 00306 std::string longHelp_; 00308 CbcParameterType action_; 00310 int currentKeyWord_; 00312 bool display_; 00314 int intValue_; 00316 double doubleValue_; 00318 std::string stringValue_; 00320 int indexNumber_; 00322 }; 00323 #endif /* CbcParam_H */ 00324