00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #ifndef VrpParams_h
00016 #define VrpParams_h
00017 
00018 #include "AlpsKnowledge.h"
00019 #include "AlpsParameterBase.h"
00020 
00021 
00022 
00023 
00024 class VrpParams : public AlpsParameterSet {
00025  public:
00028   enum boolParams{
00029      doGreedy,
00030      doExtraInRoot,
00031      tspProb,
00032      endOfBoolParams
00033   };
00034   
00036   enum intParams{
00037      numRoutes,
00038      verbosity,
00039      greedyNumTrials,
00040      whichConnectedRoutine,
00041      maxNumCutsInShrink,
00042      whichTspCuts,
00043      endOfIntParams
00044   };
00045 
00047   enum dblParams{
00049       endOfDblParams
00050   };
00051 
00053   enum strParams{
00054       strDummy,
00055       
00056       endOfStrParams
00057   };
00058 
00060   enum strArrayParams{
00061       strArrayDummy,
00063       endOfStrArrayParams
00064   };
00065 
00066  public:
00072   VrpParams() :
00073     AlpsParameterSet(
00074                      static_cast<int>(endOfBoolParams),
00075                      static_cast<int>(endOfIntParams),
00076                      static_cast<int>(endOfDblParams),
00077                      static_cast<int>(endOfStrParams),
00078                      static_cast<int>(endOfStrArrayParams)
00079                      )
00080     {
00081       createKeywordList();
00082       setDefaultEntries();
00083     }
00088   virtual void createKeywordList();
00090   virtual void setDefaultEntries();
00094  public:
00095   
00103   
00104 
00105   
00114 
00115   inline bool entry(const boolParams key) const { return bpar_[key]; }
00117   inline int entry(const intParams key) const { return ipar_[key]; }
00119   inline double  entry(const dblParams key) const { return dpar_[key]; }
00121   inline const std::string&
00122     entry(const strParams key) const { return spar_[key]; }
00124   inline const std::vector<std::string>&
00125     entry(const strArrayParams key) const { return sapar_[key]; }
00128   
00130   void setEntry(const boolParams key, const char * val) {
00131           bpar_[key] = atoi(val) ? true : false; }
00133   void setEntry(const boolParams key, const char val) {
00134           bpar_[key] = val ? true : false; }
00136   void setEntry(const boolParams key, const bool val) {
00137     bpar_[key] = val; }
00139   void setEntry(const intParams key, const char * val) {
00140     ipar_[key] = atoi(val); }
00142   void setEntry(const intParams key, const int val) {
00143     ipar_[key] = val; }
00145   void setEntry(const dblParams key, const char * val) {
00146     dpar_[key] = atof(val); }
00148   void setEntry(const dblParams key, const double val) {
00149     dpar_[key] = val; }
00151   void setEntry(const strParams key, const char * val) {
00152     spar_[key] = val; }
00154   void setEntry(const strArrayParams key, const char *val) {
00155     sapar_[key].push_back(val); }
00156 
00157   
00158 
00163   void pack(AlpsEncoded& buf) {
00164     buf.writeRep(bpar_, endOfBoolParams)
00165       .writeRep(ipar_, endOfIntParams)
00166       .writeRep(dpar_, endOfDblParams);
00167     for (int i = 0; i < endOfStrParams; ++i)
00168       buf.writeRep(spar_[i]);
00169     for (int i = 0; i < endOfStrArrayParams; ++i) {
00170       buf.writeRep(sapar_[i].size());
00171       for (size_t j = 0; j < sapar_[i].size(); ++j)
00172         buf.writeRep(sapar_[i][j]);
00173     }
00174   }
00176   void unpack(AlpsEncoded& buf) {
00177     int dummy;
00178     
00179     dummy = static_cast<int>(endOfBoolParams);
00180     buf.readRep(bpar_, dummy, false);
00181     dummy = static_cast<int>(endOfIntParams);
00182     buf.readRep(ipar_, dummy, false);
00183     dummy = static_cast<int>(endOfDblParams);
00184     buf.readRep(dpar_, dummy, false);
00185     for (int i = 0; i < endOfStrParams; ++i)
00186       buf.readRep(spar_[i]);
00187     for (int i = 0; i < endOfStrArrayParams; ++i) {
00188       size_t str_size;
00189       buf.readRep(str_size);
00190       sapar_[i].reserve(str_size);
00191       for (size_t j = 0; j < str_size; ++j){
00192         
00193         sapar_[i].push_back(std::string());
00194         buf.readRep(sapar_[i].back());
00195       }
00196     }
00197   }
00200 };
00201 
00202 #endif