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 }