BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
Minimizer.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Fit/Kernel/Minimizer.cpp
6 //! @brief Implements class Minimizer.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #include "Fit/Kernel/Minimizer.h"
16 #include "Fit/Kernel/Kernel.h"
17 #include "Fit/Kernel/PyCallback.h"
18 
19 using namespace Fit;
20 
21 Minimizer::Minimizer() : m_kernel(new Kernel) {}
22 
23 void Minimizer::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
24  const std::string& options)
25 {
26  m_kernel->setMinimizer(minimizerName, algorithmName, options);
27 }
28 
30 {
31  m_kernel->setMinimizer(minimizer);
32 }
33 
34 Minimizer::~Minimizer() = default;
35 
37 {
38  return m_kernel->minimize(fcn, parameters);
39 }
40 
42 {
43  return m_kernel->minimize(fcn, parameters);
44 }
45 
47 {
48  if (callback.callback_type() == PyCallback::SCALAR) {
49  fcn_scalar_t fcn = [&](const Parameters& pars) { return callback.call_scalar(pars); };
50  return minimize(fcn, parameters);
51 
52  } else if (callback.callback_type() == PyCallback::RESIDUAL) {
53  fcn_residual_t fcn = [&](const Parameters& pars) { return callback.call_residuals(pars); };
54  return minimize(fcn, parameters);
55  }
56 
57  throw std::runtime_error("Minimizer::minimize() -> Error. Unexpected user function");
58 }
std::function< std::vector< double >(const Fit::Parameters &)> fcn_residual_t
Definition: KernelTypes.h:38
std::function< double(const Fit::Parameters &)> fcn_scalar_t
Definition: KernelTypes.h:37
Defines class Kernel.
Defines class Minimizer.
Defines class PyCallback.
A main class to run fitting.
Definition: Kernel.h:34
Result of minimization round.
std::unique_ptr< Kernel > m_kernel
Definition: Minimizer.h:57
void setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
Definition: Minimizer.cpp:23
MinimizerResult minimize(PyCallback &callback, const Parameters &parameters)
Finds minimum of user objective function (to be called from Python).
Definition: Minimizer.cpp:46
MinimizerResult minimize(fcn_scalar_t fcn, const Parameters &parameters)
Definition: Minimizer.cpp:36
A collection of fit parameters.
Definition: Parameters.h:28
Pure virtual interface for all kind minimizers.
Definition: IMinimizer.h:31
Base class to wrap Python callable and pass it to C++.
Definition: PyCallback.h:25
virtual std::vector< double > call_residuals(Fit::Parameters pars)
Call Python callable and returns its result.
Definition: PyCallback.cpp:31
virtual double call_scalar(Fit::Parameters pars)
Call Python callable and returns its result.
Definition: PyCallback.cpp:26
CallbackType callback_type() const
Definition: PyCallback.cpp:19
Objective function types.