PlayaOptBuilder.cpp

00001 #include "PlayaOptBuilder.hpp"
00002 #include "Teuchos_ParameterList.hpp"
00003 #include "PlayaTabs.hpp"
00004 #include "PlayaOut.hpp"
00005 #include "PlayaSteepestDescent.hpp"
00006 #include "PlayaBasicLMBFGS.hpp"
00007 #include "Teuchos_XMLParameterListReader.hpp"
00008 #include "Teuchos_ParameterXMLFileReader.hpp"
00009 
00010 namespace Playa
00011 {
00012 
00013 RCP<UnconstrainedOptimizerBase> 
00014 OptBuilder::createOptimizer(const string& filename,
00015   int verb)
00016 {
00017   ParameterXMLFileReader reader(filename);
00018   ParameterList params = reader.getParameters();
00019   return createOptimizer(params);
00020 }
00021 
00022 RCP<UnconstrainedOptimizerBase> 
00023 OptBuilder::createOptimizer(const ParameterList& params,
00024   int verb)
00025 {
00026   Tabs tab(0);
00027   PLAYA_MSG1(verb, tab << "OptBuilder::createOptimizer()");
00028   Tabs tab1;
00029   PLAYA_MSG2(verb, tab1 << "params=" << params);
00030   
00031   TEUCHOS_TEST_FOR_EXCEPTION(params.name() != "Optimizer",
00032     std::runtime_error, 
00033     "Optimizer::getOptimizer() expected parameter list named "
00034     "\"Optimizer\", got name [" << params.name() << "]");
00035 
00036   const std::string& optType = getParameter<string>(params, "Type");
00037 
00038   RCP<UnconstrainedOptimizerBase> opt;
00039 
00040   if (optType=="Steepest Descent")
00041   {
00042     PLAYA_MSG2(verb, tab1 << "found SteepestDescent");
00043     opt = rcp(new SteepestDescent(params));
00044   }
00045   else if (optType=="Basic LMBFGS")
00046   {
00047     PLAYA_MSG2(verb, tab1 << "found Basic LMBFGS");
00048     opt = rcp(new BasicLMBFGS(params));
00049   }
00050 
00051   TEUCHOS_TEST_FOR_EXCEPTION(opt.get()==0, 
00052     std::runtime_error, 
00053     "OptBuilder::createOptimizer() could not construct a valid "
00054     "optimizer object from parameter list " << params);
00055     
00056   return opt;
00057 }
00058 
00059 }

doxygen