From 8620cb29c2bf5a442ff820edaa5f95065b0b8c05 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 3 May 2018 12:14:04 +0200 Subject: [PATCH] Functional tests of 5 new minimizers added. --- Fit/NewKernel/Kernel.cpp | 5 +- Fit/NewKernel/Kernel.h | 3 +- Fit/NewKernel/Minimizer.cpp | 6 ++ Fit/NewKernel/Minimizer.h | 4 ++ .../Fit/Minimizer/MinimizerTest.cpp | 3 +- .../Fit/Minimizer/MinimizerTestCases.cpp | 36 ++++++++++- .../Fit/Minimizer/MinimizerTestCases.h | 60 +++++++++++++++++++ .../Fit/Minimizer/MinimizerTestFactory.cpp | 32 +++++++++- 8 files changed, 141 insertions(+), 8 deletions(-) diff --git a/Fit/NewKernel/Kernel.cpp b/Fit/NewKernel/Kernel.cpp index 1fafa52ac1b..cd8539f7d03 100644 --- a/Fit/NewKernel/Kernel.cpp +++ b/Fit/NewKernel/Kernel.cpp @@ -30,9 +30,10 @@ Kernel::Kernel() Kernel::~Kernel() = default; -void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName) +void Kernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName, + const std::string& options) { - m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName)); + m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName, options)); } MinimizerResult Kernel::minimize(fcn_scalar_t fcn, const Parameters& parameters) diff --git a/Fit/NewKernel/Kernel.h b/Fit/NewKernel/Kernel.h index d79df2b2c07..c2bc1c8419e 100644 --- a/Fit/NewKernel/Kernel.h +++ b/Fit/NewKernel/Kernel.h @@ -36,7 +36,8 @@ public: Kernel(); ~Kernel(); - void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = ""); + void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "", + const std::string& options = ""); MinimizerResult minimize(fcn_scalar_t fcn, const Parameters& parameters); diff --git a/Fit/NewKernel/Minimizer.cpp b/Fit/NewKernel/Minimizer.cpp index 6b2b915f7c9..38fa70e19db 100644 --- a/Fit/NewKernel/Minimizer.cpp +++ b/Fit/NewKernel/Minimizer.cpp @@ -23,6 +23,12 @@ Minimizer::Minimizer() } +void Minimizer::setMinimizer(const std::string& minimizerName, const std::string& algorithmName, + const std::string& options) +{ + m_kernel->setMinimizer(minimizerName, algorithmName, options); +} + Minimizer::~Minimizer() = default; MinimizerResult Minimizer::minimize(fcn_scalar_t fcn, diff --git a/Fit/NewKernel/Minimizer.h b/Fit/NewKernel/Minimizer.h index 86b2b0fe586..38cd64233f1 100644 --- a/Fit/NewKernel/Minimizer.h +++ b/Fit/NewKernel/Minimizer.h @@ -21,6 +21,7 @@ #include "MinimizerResult.h" #include <functional> #include <vector> +#include <string> #include <memory> namespace Fit { @@ -36,6 +37,9 @@ public: Minimizer(); ~Minimizer(); + void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "", + const std::string& options = ""); + MinimizerResult minimize(fcn_scalar_t fcn, const Parameters& parameters); private: diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp b/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp index de429293bbd..1afcffa91e1 100644 --- a/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp +++ b/Tests/Functional/Fit/Minimizer/MinimizerTest.cpp @@ -46,6 +46,7 @@ bool MinimizerTest::runTest() auto plan = plan_factory.create(m_fit_plan_name); Minimizer minimizer; + minimizer.setMinimizer(m_minimizer_name, m_algorithm_name); auto result = minimizer.minimize(plan->objectiveFunction(), plan->parameters()); std::cout << result.toString() << std::endl; @@ -60,7 +61,7 @@ namespace { bool checkResult(const Fit::MinimizerResult& result, const FunctionTestPlan& plan) { bool success(true); - std::cout << "MinimizerTest::checkResult()" << std::endl; + std::cout << "MinimizerTest::checkResult() -> " << plan.name() << std::endl; success &= plan.valuesAsExpected(result.parameters().values()); success &= plan.minimumAsExpected(result.minValue()); diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp index 4ff544fbcd5..66337bb0555 100644 --- a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp +++ b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.cpp @@ -14,6 +14,38 @@ #include "MinimizerTestCases.h" -MinuitTestV1::MinuitTestV1() : MinimizerTest("Minuit2", "Migrad", "RosenbrockPlan") {} +MinuitTestV1::MinuitTestV1() + : MinimizerTest("Minuit2", "Migrad", "RosenbrockPlan") {} -MinuitTestV2::MinuitTestV2() : MinimizerTest("Minuit2", "Migrad", "WoodFourPlan") {} +MinuitTestV2::MinuitTestV2() + : MinimizerTest("Minuit2", "Migrad", "WoodFourPlan") {} + +SteepestDescentTestV1::SteepestDescentTestV1() + : MinimizerTest("GSLMultiMin", "SteepestDescent", "RosenbrockPlan") {} + +SteepestDescentTestV2::SteepestDescentTestV2() + : MinimizerTest("GSLMultiMin", "SteepestDescent", "WoodFourPlan") {} + +ConjugateFRTestV1::ConjugateFRTestV1() + : MinimizerTest("GSLMultiMin", "ConjugateFR", "RosenbrockPlan") {} + +ConjugateFRTestV2::ConjugateFRTestV2() + : MinimizerTest("GSLMultiMin", "ConjugateFR", "WoodFourPlan") {} + +ConjugatePRTestV1::ConjugatePRTestV1() + : MinimizerTest("GSLMultiMin", "ConjugatePR", "RosenbrockPlan") {} + +ConjugatePRTestV2::ConjugatePRTestV2() + : MinimizerTest("GSLMultiMin", "ConjugatePR", "WoodFourPlan") {} + +BfgsTestV1::BfgsTestV1() + : MinimizerTest("GSLMultiMin", "BFGS", "RosenbrockPlan") {} + +BfgsTestV2::BfgsTestV2() + : MinimizerTest("GSLMultiMin", "BFGS", "WoodFourPlan") {} + +Bfgs2TestV1::Bfgs2TestV1() + : MinimizerTest("GSLMultiMin", "BFGS2", "RosenbrockPlan") {} + +Bfgs2TestV2::Bfgs2TestV2() + : MinimizerTest("GSLMultiMin", "BFGS2", "WoodFourPlan") {} diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h index 75c1c6648a3..c3f2af8a85a 100644 --- a/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h +++ b/Tests/Functional/Fit/Minimizer/MinimizerTestCases.h @@ -31,4 +31,64 @@ public: MinuitTestV2(); }; +class SteepestDescentTestV1 : public MinimizerTest +{ +public: + SteepestDescentTestV1(); +}; + +class SteepestDescentTestV2 : public MinimizerTest +{ +public: + SteepestDescentTestV2(); +}; + +class ConjugateFRTestV1 : public MinimizerTest +{ +public: + ConjugateFRTestV1(); +}; + +class ConjugateFRTestV2 : public MinimizerTest +{ +public: + ConjugateFRTestV2(); +}; + +class ConjugatePRTestV1 : public MinimizerTest +{ +public: + ConjugatePRTestV1(); +}; + +class ConjugatePRTestV2 : public MinimizerTest +{ +public: + ConjugatePRTestV2(); +}; + +class BfgsTestV1 : public MinimizerTest +{ +public: + BfgsTestV1(); +}; + +class BfgsTestV2 : public MinimizerTest +{ +public: + BfgsTestV2(); +}; + +class Bfgs2TestV1 : public MinimizerTest +{ +public: + Bfgs2TestV1(); +}; + +class Bfgs2TestV2 : public MinimizerTest +{ +public: + Bfgs2TestV2(); +}; + #endif // MINIMIZERTESTCASES_H diff --git a/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp b/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp index 61377e33af2..180374442dc 100644 --- a/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp +++ b/Tests/Functional/Fit/Minimizer/MinimizerTestFactory.cpp @@ -17,6 +17,34 @@ MinimizerTestFactory::MinimizerTestFactory() { - registerItem("MinuitTestV1", create_new<MinuitTestV1>, "Minuit + Migrad + Rosenbrock"); - registerItem("MinuitTestV2", create_new<MinuitTestV2>, "Minuit + Migrad + WoodFour"); + registerItem("MinuitTestV1", create_new<MinuitTestV1>, + "Minuit + Migrad + Rosenbrock"); + registerItem("MinuitTestV2", create_new<MinuitTestV2>, + "Minuit + Migrad + WoodFour"); + + registerItem("SteepestDescentTestV1", create_new<SteepestDescentTestV1>, + "GSLMultiMin + SteepestDescent + Rosenbrock"); + registerItem("SteepestDescentTestV2", create_new<SteepestDescentTestV2>, + "GSLMultiMin + SteepestDescent + WoodFour"); + + registerItem("ConjugateFRTestV1", create_new<ConjugateFRTestV1>, + "GSLMultiMin + ConjugateFR + Rosenbrock"); + registerItem("ConjugateFRTestV2", create_new<ConjugateFRTestV2>, + "GSLMultiMin + ConjugateFR + WoodFour"); + + registerItem("ConjugatePRTestV1", create_new<ConjugatePRTestV1>, + "GSLMultiMin + ConjugatePR + Rosenbrock"); + registerItem("ConjugatePRTestV2", create_new<ConjugatePRTestV2>, + "GSLMultiMin + ConjugatePR + WoodFour"); + + registerItem("BfgsTestV1", create_new<BfgsTestV1>, + "GSLMultiMin + BFGS + Rosenbrock"); + registerItem("BfgsTestV2", create_new<BfgsTestV2>, + "GSLMultiMin + BFGS + WoodFour"); + + registerItem("Bfgs2TestV1", create_new<Bfgs2TestV1>, + "GSLMultiMin + BFGS2 + Rosenbrock"); + registerItem("Bfgs2TestV2", create_new<Bfgs2TestV2>, + "GSLMultiMin + BFGS2 + WoodFour"); + } -- GitLab