OBOE 0.1
Parameters.h
Go to the documentation of this file.
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 &paramName, const string &paramType, const string &paramValue);
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