00001
00002
00003
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
00165 CbcParam (std::string name, std::string help, std::string firstValue,
00166 CbcParameterType type, int defaultIndex = 0, bool display = true);
00167
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
00287 CbcParameterType type_;
00289 double lowerDoubleValue_;
00290 double upperDoubleValue_;
00292 int lowerIntValue_;
00293 int upperIntValue_;
00294
00295 unsigned int lengthName_;
00296
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
00323