OBOE 0.1
|
00001 // Copyright (c) 2004-2007 University of Geneva, HEC, Logilab 00002 // 00003 // OBOE is published under the Common Public License. 00004 // 00005 // Authors : 00006 // Nidhi Sawhney <nsawhney@yahoo.com> 00007 // The OBOE team 00008 // 00009 00010 #ifndef PARAMETERS_H 00011 #define PARAMETERS_H 00012 00013 #include <iostream> 00014 #include <string> 00015 #include <vector> 00016 #include <map> 00017 #include <functional> 00018 using std::string; 00019 using std::vector; 00020 using std::map; 00021 00022 #include "AccpmDefs.h" 00023 #include "AccpmVector.h" 00024 #include "AccpmGenMatrix.h" 00025 00035 namespace Accpm 00036 { 00037 class Oracle; 00038 enum OptType { OPT_MIN = 1, OPT_MAX = -1 }; 00046 class Parameters { 00047 00048 private: 00049 typedef bool (Parameters::*SetIntFunctor)(int); 00050 typedef map<const char *, SetIntFunctor, ltstr> SetIntFunctorMap; 00051 typedef int (Parameters::*GetIntFunctor)(void) const; 00052 typedef map<const char *, GetIntFunctor, ltstr> GetIntFunctorMap; 00053 00054 typedef bool (Parameters::*SetRealFunctor)(Real); 00055 typedef map<const char *, SetRealFunctor, ltstr> SetRealFunctorMap; 00056 typedef Real (Parameters::*GetRealFunctor)(void) const; 00057 typedef map<const char *, GetRealFunctor, ltstr> GetRealFunctorMap; 00058 00059 typedef bool (Parameters::*SetStringFunctor)(const string &); 00060 typedef map<const char *, SetStringFunctor, ltstr> SetStringFunctorMap; 00061 typedef const string &(Parameters::*GetStringFunctor)(void) const; 00062 typedef map<const char *, GetStringFunctor, ltstr> GetStringFunctorMap; 00063 00064 00065 string _problemName; 00066 string _problemAcronym; 00067 string _optimizationType; 00068 OptType _type; 00069 unsigned int _numVariables; 00070 unsigned int _numSubProblems; 00071 00072 Real _objLB; 00073 Real _objUB; 00074 00075 AccpmVector *_startingPoint; 00076 AccpmVector *_varLB; 00077 AccpmVector *_varUB; 00078 AccpmVector *_b; 00079 AccpmVector *_pi; 00080 Real _delta; 00081 Real _eta; 00082 Real _gamma; 00083 Real _epsilonReal; 00084 Real _epsilonTol; 00085 00086 string _methodName; 00087 int _maxOuterIterations; 00088 int _maxInnerIterations; 00089 int _verbosity; 00090 00091 Real _tolerance; 00092 bool _filter; 00093 00094 bool _convexityCheck; 00095 bool _convexityFix; 00096 bool _fixedProximalCenter; 00097 00098 bool _proximal; 00099 Real _rho; 00100 bool _dynamicRho; 00101 Real _rhoMin; 00102 Real _rhoMax; 00103 Real _weightEpigraphCutInit; 00104 Real _weightEpigraphCutInc; 00105 00106 bool _ball; 00107 Real _radiusBall; 00108 AccpmVector *_centerBall; 00109 00110 Oracle *_oracle; 00111 bool _diagHessian; 00112 00113 bool _computeLB; 00114 00119 bool _checkLocSet; 00124 string _lpSolverName; 00125 00126 StdIntSet *_avIndex; // Active Variable Index 00127 00128 AccpmGenMatrix *_D; // Equality Constraint 00129 AccpmVector *_d; // rhs of Equality Constrain 00130 00131 void init(); 00132 void setFunctionMaps(); 00133 00134 SetIntFunctorMap _sintFunctionMap; 00135 GetIntFunctorMap _gintFunctionMap; 00136 SetRealFunctorMap _srealFunctionMap; 00137 GetRealFunctorMap _grealFunctionMap; 00138 SetStringFunctorMap _sstringFunctionMap; 00139 GetStringFunctorMap _gstringFunctionMap; 00140 00141 // The int value access functions 00142 inline bool setNumVariables(int n) { _numVariables = n; return true; } 00143 inline int getNumVariables(void) const { return _numVariables; } 00144 inline bool setNumSubProblems(int n) { _numSubProblems = n; setPi(StdRealVector(n, 1)); return true; } 00145 inline int getNumSubProblems(void) const { return _numSubProblems; } 00146 inline bool setMaxOuterIterations(int n) { _maxOuterIterations = n; return true; } 00147 inline int getMaxOuterIterations() const { return _maxOuterIterations; } 00148 inline bool setMaxInnerIterations(int n) { _maxInnerIterations = n; return true; } 00149 inline int getMaxInnerIterations() const { return _maxInnerIterations; } 00150 inline bool setVerbosity(int n) { _verbosity = n; return true; } 00151 inline int getVerbosity() const { return _verbosity; } 00152 00153 // Bool functions 00154 inline bool setFilter(int n) { n == 1 ? _filter = true : _filter = false; 00155 return true; } 00156 inline int getFilter() const { return _filter; } 00157 00158 inline bool setConvexityCheck(int n) { n == 1 ? _convexityCheck = true 00159 : _convexityCheck = false; return true; } 00160 inline int getConvexityCheck() const { return _convexityCheck; } 00161 inline bool setConvexityFix(int n) { n == 1 ? _convexityFix = true 00162 : _convexityFix = false; return true; } 00163 inline int getConvexityFix() const { return _convexityFix; } 00164 inline bool setFixedProximalCenter(int n) { n == 1 ? _fixedProximalCenter = true 00165 : _fixedProximalCenter = false; return true; } 00166 inline int getFixedProximalCenter() const { return _fixedProximalCenter; } 00167 00168 bool setProximal(int n); 00169 int getProximal() const; 00170 00171 inline bool setDynamicRho(int n) { n == 1 ? _dynamicRho = true 00172 : _dynamicRho = false; return true; } 00173 inline int getDynamicRho() const { return _dynamicRho; } 00174 00175 bool setBall(int n); 00176 inline int getBall() const { return _ball; } 00177 00178 bool setBox(int n); 00179 inline int getBox() const { return _varLB || _varUB; } 00180 00181 bool setDiagHessian(int n); 00182 inline int getDiagHessian() const { return _diagHessian; } 00183 00184 inline bool setComputeLB(int n) { n == 1 ? _computeLB = true 00185 : _computeLB = false; return true; } 00186 inline int getComputeLB() const { return _computeLB; } 00187 00188 inline bool setCheckLocSetInterior(int n) { n == 1 ? _checkLocSet = true 00189 : _checkLocSet = false; return true; } 00190 inline int getCheckLocSetInterior() const { return _checkLocSet;} 00191 00192 // The real value access functions 00193 inline bool setObjLB(Real value) { _objLB = value; return true; } 00194 inline Real getObjLB(void) const { return _objLB; } 00195 inline bool setObjUB(Real value) { _objUB = value; return true;} 00196 inline Real getObjUB(void) const { return _objUB; } 00197 inline bool setDelta(Real value) { _delta = value; return true;} 00198 inline Real getDelta(void) const { return _delta; } 00199 inline bool setEta(Real value) { _eta = value; return true;} 00200 inline Real getEta(void) const { return _eta; } 00201 inline bool setGamma(Real value) { _gamma = value; return true;} 00202 inline Real getGamma(void) const { return _gamma; } 00203 inline bool setTolerance(Real value) { _tolerance = value;return true; } 00204 inline Real getTolerance(void) const { return _tolerance; } 00205 inline bool setRho(Real value) { _rho = value; return true; } 00206 inline Real getRho(void) const { return _rho; } 00207 inline bool setRhoMax(Real value) { _rhoMax = value; return true; } 00208 inline Real getRhoMax(void) const { return _rhoMax; } 00209 inline bool setRhoMin(Real value) { _rhoMin = value; return true; } 00210 inline Real getRhoMin(void) const { return _rhoMin; } 00211 inline bool setWeightEpigraphCutInit(Real value) { _weightEpigraphCutInit = value; return true; } 00212 inline Real getWeightEpigraphCutInit(void) const { return _weightEpigraphCutInit; } 00213 inline bool setRadiusBall(Real value) { _radiusBall = value; return true; } 00214 inline Real getRadiusBall(void) const { return _radiusBall; } 00215 inline bool setEpsilonReal(Real value) { _epsilonReal = value; return true;} 00216 inline Real getEpsilonReal(void) const { return _epsilonReal; } 00217 inline bool setEpsilonTol(Real value) { _epsilonTol = value; return true;} 00218 inline Real getEpsilonTol(void) const { return _epsilonTol; } 00219 inline bool setWeightEpigraphCutInc(Real n) { _weightEpigraphCutInc = n; return true; } 00220 inline Real getWeightEpigraphCutInc() const { return _weightEpigraphCutInc; } 00221 00222 inline bool setProblemName(const string &value) { _problemName = value; return true; } 00223 inline const string &getProblemName(void) const { return _problemName; } 00224 inline bool setProblemAcronym(const string &value) { _problemAcronym = value; return true; } 00225 inline const string &getProblemAcronym(void) const { return _problemAcronym; } 00226 bool setMethodName(const string &value); 00227 inline const string &getMethodName(void) const { return _methodName; } 00228 00229 bool setLPSolverName(const string &value); 00230 inline const string &getLPSolverName(void) const { return _lpSolverName; } 00231 00232 bool addParameter(const string ¶mName, const string ¶mType, const string ¶mValue); 00233 00234 public: 00235 00236 Parameters(); 00237 Parameters(const char *fileName); 00238 virtual ~Parameters(); 00239 00240 bool setIntParameter(const char *name, int value); 00241 int getIntParameter(const char *name) const; 00242 bool setRealParameter(const char *name, Real value); 00243 Real getRealParameter(const char *name) const; 00244 bool setStringParameter(const char *name, const string &value); 00245 const string getStringParameter(const char *name) const; 00246 00247 bool setOptimizationType(const string &value); 00248 const string &getOptimizationType(void) const; 00249 const OptType getOptType(void) const { return _type; } 00250 00264 bool setStartingPoint(const StdRealVector& v); 00265 00274 bool setVariableLB(const StdRealVector& v); 00275 00284 bool setVariableUB(const StdRealVector& v); 00285 00290 bool setPi(const StdRealVector& pi); 00291 00299 bool setB(const StdRealVector& v); 00300 00306 bool setB(const AccpmVector& v); 00307 00313 bool setCenterBall(const StdRealVector& v); 00314 00315 inline const AccpmVector *getStartingPoint() const { return _startingPoint; } 00316 inline const AccpmVector *getVariableLB() const { return _varLB; } 00317 inline const AccpmVector *getVariableUB() const { return _varUB; } 00318 inline const AccpmVector *getPi() const { return _pi; } 00319 inline const AccpmVector *getB() const { return _b; } 00320 inline const AccpmVector *getCenterBall() const { return _centerBall; } 00321 00322 bool setOracle(Oracle *oracle); 00323 const Oracle *getOracle(void) const; 00324 00330 bool setActiveVariableIndex(const StdIntSet &v); 00334 const StdIntSet *getActiveVariableIndex() const; 00340 bool hasVariableDimension() const; 00341 00349 void addEqualityConstraints(const AccpmGenMatrix &constraints, const AccpmVector &rhs); 00353 void removeEqualityConstraints(); 00357 bool hasEqualityConstraints() const; 00362 void getEqualityConstraints(AccpmGenMatrix *&constraints, AccpmVector *&rhs) const; 00363 00364 void output(std::ostream &os) const; 00365 //* I/O 00366 friend std::ostream& operator<<(std::ostream&, const Parameters &P); 00367 }; 00368 } 00369 00370 #endif