Clp trunk
|
00001 00002 /* $Id$ */ 00003 // Copyright (C) 2002, International Business Machines 00004 // Corporation and others. All Rights Reserved. 00005 // This code is licensed under the terms of the Eclipse Public License (EPL). 00006 00007 #ifdef USE_CBCCONFIG 00008 # include "CbcConfig.h" 00009 #else 00010 # include "ClpConfig.h" 00011 #endif 00012 00013 #ifndef CbcOrClpParam_H 00014 #define CbcOrClpParam_H 00015 00027 class OsiSolverInterface; 00028 class CbcModel; 00029 class ClpSimplex; 00047 enum CbcOrClpParameterType 00048 00049 { 00050 CBC_PARAM_GENERALQUERY = -100, 00051 CBC_PARAM_FULLGENERALQUERY, 00052 00053 CLP_PARAM_DBL_PRIMALTOLERANCE = 1, 00054 CLP_PARAM_DBL_DUALTOLERANCE, 00055 CLP_PARAM_DBL_TIMELIMIT, 00056 CLP_PARAM_DBL_DUALBOUND, 00057 CLP_PARAM_DBL_PRIMALWEIGHT, 00058 CLP_PARAM_DBL_OBJSCALE, 00059 CLP_PARAM_DBL_RHSSCALE, 00060 00061 CBC_PARAM_DBL_INFEASIBILITYWEIGHT = 51, 00062 CBC_PARAM_DBL_CUTOFF, 00063 CBC_PARAM_DBL_INTEGERTOLERANCE, 00064 CBC_PARAM_DBL_INCREMENT, 00065 CBC_PARAM_DBL_ALLOWABLEGAP, 00066 CBC_PARAM_DBL_TIMELIMIT_BAB, 00067 CBC_PARAM_DBL_GAPRATIO, 00068 00069 CBC_PARAM_DBL_DJFIX = 81, 00070 CBC_PARAM_DBL_TIGHTENFACTOR, 00071 CLP_PARAM_DBL_PRESOLVETOLERANCE, 00072 CLP_PARAM_DBL_OBJSCALE2, 00073 CBC_PARAM_DBL_FAKEINCREMENT, 00074 CBC_PARAM_DBL_FAKECUTOFF, 00075 CBC_PARAM_DBL_ARTIFICIALCOST, 00076 CBC_PARAM_DBL_DEXTRA3, 00077 CBC_PARAM_DBL_SMALLBAB, 00078 CBC_PARAM_DBL_DEXTRA4, 00079 CBC_PARAM_DBL_DEXTRA5, 00080 00081 CLP_PARAM_INT_SOLVERLOGLEVEL = 101, 00082 #ifndef COIN_HAS_CBC 00083 CLP_PARAM_INT_LOGLEVEL = 101, 00084 #endif 00085 CLP_PARAM_INT_MAXFACTOR, 00086 CLP_PARAM_INT_PERTVALUE, 00087 CLP_PARAM_INT_MAXITERATION, 00088 CLP_PARAM_INT_PRESOLVEPASS, 00089 CLP_PARAM_INT_IDIOT, 00090 CLP_PARAM_INT_SPRINT, 00091 CLP_PARAM_INT_OUTPUTFORMAT, 00092 CLP_PARAM_INT_SLPVALUE, 00093 CLP_PARAM_INT_PRESOLVEOPTIONS, 00094 CLP_PARAM_INT_PRINTOPTIONS, 00095 CLP_PARAM_INT_SPECIALOPTIONS, 00096 CLP_PARAM_INT_SUBSTITUTION, 00097 CLP_PARAM_INT_DUALIZE, 00098 CLP_PARAM_INT_VERBOSE, 00099 CLP_PARAM_INT_CPP, 00100 CLP_PARAM_INT_PROCESSTUNE, 00101 CLP_PARAM_INT_USESOLUTION, 00102 00103 CBC_PARAM_INT_STRONGBRANCHING = 151, 00104 CBC_PARAM_INT_CUTDEPTH, 00105 CBC_PARAM_INT_MAXNODES, 00106 CBC_PARAM_INT_NUMBERBEFORE, 00107 CBC_PARAM_INT_NUMBERANALYZE, 00108 CBC_PARAM_INT_MIPOPTIONS, 00109 CBC_PARAM_INT_MOREMIPOPTIONS, 00110 CBC_PARAM_INT_MAXHOTITS, 00111 CBC_PARAM_INT_FPUMPITS, 00112 CBC_PARAM_INT_MAXSOLS, 00113 CBC_PARAM_INT_FPUMPTUNE, 00114 CBC_PARAM_INT_TESTOSI, 00115 CBC_PARAM_INT_EXTRA1, 00116 CBC_PARAM_INT_EXTRA2, 00117 CBC_PARAM_INT_EXTRA3, 00118 CBC_PARAM_INT_EXTRA4, 00119 CBC_PARAM_INT_DEPTHMINIBAB, 00120 CBC_PARAM_INT_CUTPASSINTREE, 00121 CBC_PARAM_INT_THREADS, 00122 CBC_PARAM_INT_CUTPASS, 00123 CBC_PARAM_INT_VUBTRY, 00124 CBC_PARAM_INT_DENSE, 00125 CBC_PARAM_INT_EXPERIMENT, 00126 CBC_PARAM_INT_DIVEOPT, 00127 CBC_PARAM_INT_STRATEGY, 00128 CBC_PARAM_INT_SMALLFACT, 00129 CBC_PARAM_INT_HOPTIONS, 00130 CBC_PARAM_INT_CUTLENGTH, 00131 CBC_PARAM_INT_FPUMPTUNE2, 00132 #ifdef COIN_HAS_CBC 00133 CLP_PARAM_INT_LOGLEVEL , 00134 #endif 00135 00136 CLP_PARAM_STR_DIRECTION = 201, 00137 CLP_PARAM_STR_DUALPIVOT, 00138 CLP_PARAM_STR_SCALING, 00139 CLP_PARAM_STR_ERRORSALLOWED, 00140 CLP_PARAM_STR_KEEPNAMES, 00141 CLP_PARAM_STR_SPARSEFACTOR, 00142 CLP_PARAM_STR_PRIMALPIVOT, 00143 CLP_PARAM_STR_PRESOLVE, 00144 CLP_PARAM_STR_CRASH, 00145 CLP_PARAM_STR_BIASLU, 00146 CLP_PARAM_STR_PERTURBATION, 00147 CLP_PARAM_STR_MESSAGES, 00148 CLP_PARAM_STR_AUTOSCALE, 00149 CLP_PARAM_STR_CHOLESKY, 00150 CLP_PARAM_STR_KKT, 00151 CLP_PARAM_STR_BARRIERSCALE, 00152 CLP_PARAM_STR_GAMMA, 00153 CLP_PARAM_STR_CROSSOVER, 00154 CLP_PARAM_STR_PFI, 00155 CLP_PARAM_STR_INTPRINT, 00156 CLP_PARAM_STR_VECTOR, 00157 CLP_PARAM_STR_FACTORIZATION, 00158 CLP_PARAM_STR_ALLCOMMANDS, 00159 CLP_PARAM_STR_TIME_MODE, 00160 00161 CBC_PARAM_STR_NODESTRATEGY = 251, 00162 CBC_PARAM_STR_BRANCHSTRATEGY, 00163 CBC_PARAM_STR_CUTSSTRATEGY, 00164 CBC_PARAM_STR_HEURISTICSTRATEGY, 00165 CBC_PARAM_STR_GOMORYCUTS, 00166 CBC_PARAM_STR_PROBINGCUTS, 00167 CBC_PARAM_STR_KNAPSACKCUTS, 00168 CBC_PARAM_STR_REDSPLITCUTS, 00169 CBC_PARAM_STR_ROUNDING, 00170 CBC_PARAM_STR_SOLVER, 00171 CBC_PARAM_STR_CLIQUECUTS, 00172 CBC_PARAM_STR_COSTSTRATEGY, 00173 CBC_PARAM_STR_FLOWCUTS, 00174 CBC_PARAM_STR_MIXEDCUTS, 00175 CBC_PARAM_STR_TWOMIRCUTS, 00176 CBC_PARAM_STR_PREPROCESS, 00177 CBC_PARAM_STR_FPUMP, 00178 CBC_PARAM_STR_GREEDY, 00179 CBC_PARAM_STR_COMBINE, 00180 CBC_PARAM_STR_LOCALTREE, 00181 CBC_PARAM_STR_SOS, 00182 CBC_PARAM_STR_LANDPCUTS, 00183 CBC_PARAM_STR_RINS, 00184 CBC_PARAM_STR_RESIDCUTS, 00185 CBC_PARAM_STR_RENS, 00186 CBC_PARAM_STR_DIVINGS, 00187 CBC_PARAM_STR_DIVINGC, 00188 CBC_PARAM_STR_DIVINGF, 00189 CBC_PARAM_STR_DIVINGG, 00190 CBC_PARAM_STR_DIVINGL, 00191 CBC_PARAM_STR_DIVINGP, 00192 CBC_PARAM_STR_DIVINGV, 00193 CBC_PARAM_STR_DINS, 00194 CBC_PARAM_STR_PIVOTANDFIX, 00195 CBC_PARAM_STR_RANDROUND, 00196 CBC_PARAM_STR_NAIVE, 00197 CBC_PARAM_STR_ZEROHALFCUTS, 00198 CBC_PARAM_STR_CPX, 00199 CBC_PARAM_STR_CROSSOVER2, 00200 CBC_PARAM_STR_PIVOTANDCOMPLEMENT, 00201 CBC_PARAM_STR_VND, 00202 00203 CLP_PARAM_ACTION_DIRECTORY = 301, 00204 CLP_PARAM_ACTION_DIRSAMPLE, 00205 CLP_PARAM_ACTION_DIRNETLIB, 00206 CBC_PARAM_ACTION_DIRMIPLIB, 00207 CLP_PARAM_ACTION_IMPORT, 00208 CLP_PARAM_ACTION_EXPORT, 00209 CLP_PARAM_ACTION_RESTORE, 00210 CLP_PARAM_ACTION_SAVE, 00211 CLP_PARAM_ACTION_DUALSIMPLEX, 00212 CLP_PARAM_ACTION_PRIMALSIMPLEX, 00213 CLP_PARAM_ACTION_EITHERSIMPLEX, 00214 CLP_PARAM_ACTION_MAXIMIZE, 00215 CLP_PARAM_ACTION_MINIMIZE, 00216 CLP_PARAM_ACTION_EXIT, 00217 CLP_PARAM_ACTION_STDIN, 00218 CLP_PARAM_ACTION_UNITTEST, 00219 CLP_PARAM_ACTION_NETLIB_EITHER, 00220 CLP_PARAM_ACTION_NETLIB_DUAL, 00221 CLP_PARAM_ACTION_NETLIB_PRIMAL, 00222 CLP_PARAM_ACTION_SOLUTION, 00223 CLP_PARAM_ACTION_SAVESOL, 00224 CLP_PARAM_ACTION_TIGHTEN, 00225 CLP_PARAM_ACTION_FAKEBOUND, 00226 CLP_PARAM_ACTION_HELP, 00227 CLP_PARAM_ACTION_PLUSMINUS, 00228 CLP_PARAM_ACTION_NETWORK, 00229 CLP_PARAM_ACTION_ALLSLACK, 00230 CLP_PARAM_ACTION_REVERSE, 00231 CLP_PARAM_ACTION_BARRIER, 00232 CLP_PARAM_ACTION_NETLIB_BARRIER, 00233 CLP_PARAM_ACTION_NETLIB_TUNE, 00234 CLP_PARAM_ACTION_REALLY_SCALE, 00235 CLP_PARAM_ACTION_BASISIN, 00236 CLP_PARAM_ACTION_BASISOUT, 00237 CLP_PARAM_ACTION_SOLVECONTINUOUS, 00238 CLP_PARAM_ACTION_CLEARCUTS, 00239 CLP_PARAM_ACTION_VERSION, 00240 CLP_PARAM_ACTION_STATISTICS, 00241 CLP_PARAM_ACTION_DEBUG, 00242 CLP_PARAM_ACTION_DUMMY, 00243 CLP_PARAM_ACTION_PRINTMASK, 00244 CLP_PARAM_ACTION_OUTDUPROWS, 00245 CLP_PARAM_ACTION_USERCLP, 00246 CLP_PARAM_ACTION_MODELIN, 00247 CLP_PARAM_ACTION_CSVSTATISTICS, 00248 CLP_PARAM_ACTION_STOREDFILE, 00249 CLP_PARAM_ACTION_ENVIRONMENT, 00250 CLP_PARAM_ACTION_PARAMETRICS, 00251 CLP_PARAM_ACTION_GMPL_SOLUTION, 00252 00253 CBC_PARAM_ACTION_BAB = 351, 00254 CBC_PARAM_ACTION_MIPLIB, 00255 CBC_PARAM_ACTION_STRENGTHEN, 00256 CBC_PARAM_ACTION_PRIORITYIN, 00257 CBC_PARAM_ACTION_USERCBC, 00258 CBC_PARAM_ACTION_DOHEURISTIC, 00259 00260 CBC_PARAM_NOTUSED_OSLSTUFF = 401, 00261 CBC_PARAM_NOTUSED_CBCSTUFF, 00262 00263 CBC_PARAM_NOTUSED_INVALID = 1000 00264 } ; 00265 #include <vector> 00266 #include <string> 00267 00269 00270 class CbcOrClpParam { 00271 public: 00274 00275 CbcOrClpParam ( ); 00276 CbcOrClpParam (std::string name, std::string help, 00277 double lower, double upper, CbcOrClpParameterType type, int display = 2); 00278 CbcOrClpParam (std::string name, std::string help, 00279 int lower, int upper, CbcOrClpParameterType type, int display = 2); 00280 // Other strings will be added by insert 00281 CbcOrClpParam (std::string name, std::string help, std::string firstValue, 00282 CbcOrClpParameterType type, int whereUsed = 7, int display = 2); 00283 // Action 00284 CbcOrClpParam (std::string name, std::string help, 00285 CbcOrClpParameterType type, int whereUsed = 7, int display = 2); 00287 CbcOrClpParam(const CbcOrClpParam &); 00289 CbcOrClpParam & operator=(const CbcOrClpParam & rhs); 00291 ~CbcOrClpParam ( ); 00293 00296 00297 void append(std::string keyWord); 00299 void addHelp(std::string keyWord); 00301 inline std::string name( ) const { 00302 return name_; 00303 } 00305 inline std::string shortHelp( ) const { 00306 return shortHelp_; 00307 } 00309 int setDoubleParameter(CbcModel & model, double value) ; 00311 const char * setDoubleParameterWithMessage ( CbcModel & model, double value , int & returnCode); 00313 double doubleParameter(CbcModel & model) const; 00315 int setIntParameter(CbcModel & model, int value) ; 00317 const char * setIntParameterWithMessage ( CbcModel & model, int value , int & returnCode); 00319 int intParameter(CbcModel & model) const; 00321 int setDoubleParameter(ClpSimplex * model, double value) ; 00323 double doubleParameter(ClpSimplex * model) const; 00325 const char * setDoubleParameterWithMessage ( ClpSimplex * model, double value , int & returnCode); 00327 int setIntParameter(ClpSimplex * model, int value) ; 00329 const char * setIntParameterWithMessage ( ClpSimplex * model, int value , int & returnCode); 00331 int intParameter(ClpSimplex * model) const; 00333 int setDoubleParameter(OsiSolverInterface * model, double value) ; 00335 const char * setDoubleParameterWithMessage ( OsiSolverInterface * model, double value , int & returnCode); 00337 double doubleParameter(OsiSolverInterface * model) const; 00339 int setIntParameter(OsiSolverInterface * model, int value) ; 00341 const char * setIntParameterWithMessage ( OsiSolverInterface * model, int value , int & returnCode); 00343 int intParameter(OsiSolverInterface * model) const; 00345 int checkDoubleParameter(double value) const; 00347 std::string matchName ( ) const; 00349 int lengthMatchName ( ) const; 00351 int parameterOption ( std::string check ) const; 00353 void printOptions ( ) const; 00355 inline std::string currentOption ( ) const { 00356 return definedKeyWords_[currentKeyWord_]; 00357 } 00359 void setCurrentOption ( int value , bool printIt = false); 00361 const char * setCurrentOptionWithMessage ( int value ); 00363 void setCurrentOption (const std::string value ); 00365 inline int currentOptionAsInteger ( ) const { 00366 return currentKeyWord_; 00367 } 00369 void setIntValue ( int value ); 00370 inline int intValue () const { 00371 return intValue_; 00372 } 00374 void setDoubleValue ( double value ); 00375 inline double doubleValue () const { 00376 return doubleValue_; 00377 } 00379 void setStringValue ( std::string value ); 00380 inline std::string stringValue () const { 00381 return stringValue_; 00382 } 00384 int matches (std::string input) const; 00386 inline CbcOrClpParameterType type() const { 00387 return type_; 00388 } 00390 inline int displayThis() const { 00391 return display_; 00392 } 00394 inline void setLonghelp(const std::string help) { 00395 longHelp_ = help; 00396 } 00398 void printLongHelp() const; 00400 void printString() const; 00406 inline int whereUsed() const { 00407 return whereUsed_; 00408 } 00409 00410 private: 00412 void gutsOfConstructor(); 00414 00415 private: 00416 00421 // Type see CbcOrClpParameterType 00422 CbcOrClpParameterType type_; 00424 double lowerDoubleValue_; 00425 double upperDoubleValue_; 00427 int lowerIntValue_; 00428 int upperIntValue_; 00429 // Length of name 00430 unsigned int lengthName_; 00431 // Minimum match 00432 unsigned int lengthMatch_; 00434 std::vector<std::string> definedKeyWords_; 00436 std::string name_; 00438 std::string shortHelp_; 00440 std::string longHelp_; 00442 CbcOrClpParameterType action_; 00444 int currentKeyWord_; 00446 int display_; 00448 int intValue_; 00450 double doubleValue_; 00452 std::string stringValue_; 00458 int whereUsed_; 00460 }; 00462 std::string CoinReadNextField(); 00463 00464 std::string CoinReadGetCommand(int argc, const char *argv[]); 00465 std::string CoinReadGetString(int argc, const char *argv[]); 00466 // valid 0 - okay, 1 bad, 2 not there 00467 int CoinReadGetIntField(int argc, const char *argv[], int * valid); 00468 double CoinReadGetDoubleField(int argc, const char *argv[], int * valid); 00469 void CoinReadPrintit(const char * input); 00470 void setCbcOrClpPrinting(bool yesNo); 00471 #define CBCMAXPARAMETERS 200 00472 /* 00473 Subroutine to establish the cbc parameter array. See the description of 00474 class CbcOrClpParam for details. Pulled from C..Main() for clarity. 00475 */ 00476 void establishParams (int &numberParameters, CbcOrClpParam *const parameters); 00477 // Given a parameter type - returns its number in list 00478 int whichParam (CbcOrClpParameterType name, 00479 int numberParameters, CbcOrClpParam *const parameters); 00480 // Dump a solution to file 00481 void saveSolution(const ClpSimplex * lpSolver, std::string fileName); 00482 #endif /* CbcOrClpParam_H */