Changeset 7433


Ignore:
Timestamp:
04/24/12 11:17:26 (2 years ago)
Author:
jdsiiro
Message:

Checkpointing the TGPO optimizer: basic interface to LHS for calculating
initial points.

Location:
scolib/trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • scolib/trunk/src/libs/TGPO.cpp

    r7297 r7433  
    8181 
    8282TGPO::TGPO() 
    83 {} 
     83   : LHS_sample_size(utilib::Property::Bind<int>(0)) 
     84{ 
     85   properties.declare 
     86      ("LHS_sample_size", 
     87       "The number of points to use for the initial LHS sample " 
     88       "(default: 0 [number of variables])", 
     89       LHS_sample_size); 
     90} 
    8491 
    8592void TGPO::optimize() 
     
    100107   Reval(install("library"), install("tgp")); 
    101108 
    102    // Run LHS and print out the points 
     109   int num_var = problem->num_real_vars; 
     110   int partitions = LHS_sample_size; 
     111   if ( partitions <= 0 ) 
     112      partitions = num_var; 
     113 
     114   // Run LHS to generate initial samples 
    103115   SEXP lhs_points; 
    104116   PROTECT( lhs_points =  
    105             Reval( install("improvedLHS"), ScalarInteger(4),  
    106                    ScalarInteger(2), make_pair("dup",ScalarInteger(1)) ) ); 
    107    for (size_t i = 0; i < 8; ++i) 
    108       std::cerr << " -> " << i << " = " << REAL(lhs_points)[i] << std::endl; 
     117            Reval( install("improvedLHS"),  
     118                   ScalarInteger(partitions),  
     119                   ScalarInteger(num_var),  
     120                   make_pair("dup",ScalarInteger(1)) ) ); 
     121   // NB: improvedLHS returns N samples (partitions) of K variables in 
     122   // an N x K matrix (row-major, K rows, N columns) 
     123   std::vector<std::vector<double> > domain_pts(num_var); 
     124   std::vector<double> response_pts(partitions); 
     125   for (size_t i = 0; i < partitions; ++i) 
     126   { 
     127      domain_pts[i].resize(num_var); 
     128      for (size_t j = 0; j < num_var; ++j) 
     129         domain_pts[i][j] = REAL(lhs_points)[i+j*partitions]; 
     130      problem->AsyncEvalF(eval_mngr(), domain_pts[i], response_pts[i]); 
     131   } 
    109132   UNPROTECT(1); 
    110133    
     134   // Wait for LHS sample evaluations 
     135   eval_mngr().synchronize(); 
     136 
    111137   Rf_endEmbeddedR(0); 
    112138} 
     
    118144} // namespace scolib 
    119145 
    120 #else // if ACRO_HAVE_R 
     146 
     147#else // (not) if ACRO_HAVE_R 
     148// 
     149// Stub in a non-functional (and non-registered) TGPO class. 
     150// 
    121151 
    122152namespace scolib { 
     
    133163} // namespace scolib 
    134164 
    135 #endif // else ACRO_HAVE_R 
     165#endif // if ACRO_HAVE_R 
  • scolib/trunk/src/scolib/TGPO.h

    r7296 r7433  
    3333   void optimize(); 
    3434 
     35   /// The number of points to use for the initial LHS sample 
     36   utilib::Property LHS_sample_size; 
     37 
    3538protected: 
    3639   std::string define_solver_type() const 
Note: See TracChangeset for help on using the changeset viewer.