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 }