BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
Minimizer.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
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 mumufit;
20 
22  : m_kernel(new Kernel)
23 {
24 }
25 
26 void Minimizer::setMinimizer(const std::string& minimizerName, const std::string& algorithmName,
27  const std::string& options)
28 {
29  m_kernel->setMinimizer(minimizerName, algorithmName, options);
30 }
31 
33 {
34  m_kernel->setMinimizer(minimizer);
35 }
36 
37 Minimizer::~Minimizer() = default;
38 
39 MinimizerResult Minimizer::minimize(const fcn_scalar_t fcn, const Parameters& parameters) const
40 {
41  return m_kernel->minimize(fcn, parameters);
42 }
43 
44 MinimizerResult Minimizer::minimize(const fcn_residual_t fcn, const Parameters& parameters) const
45 {
46  return m_kernel->minimize(fcn, parameters);
47 }
48 
49 MinimizerResult Minimizer::minimize(const PyCallback& callback, const Parameters& parameters) const
50 {
51  if (callback.callback_type() == PyCallback::SCALAR) {
52  fcn_scalar_t fcn = [&](const Parameters& pars) { return callback.call_scalar(pars); };
53  return minimize(fcn, parameters);
54  } else if (callback.callback_type() == PyCallback::RESIDUAL) {
55  fcn_residual_t fcn = [&](const Parameters& pars) { return callback.call_residuals(pars); };
56  return minimize(fcn, parameters);
57  }
58 
59  throw std::runtime_error("Minimizer::minimize() -> Error. Unexpected user function");
60 }
Defines class Minimizer.
Defines class Kernel.
std::function< double(const mumufit::Parameters &)> fcn_scalar_t
Definition: Types.h:40
std::function< std::vector< double >(const mumufit::Parameters &)> fcn_residual_t
Definition: Types.h:41
Defines class PyCallback.
Abstract base class for all kind minimizers.
Definition: IMinimizer.h:30
Base class to wrap Python callable and pass it to C++. Used in swig interface file,...
Definition: PyCallback.h:24
virtual std::vector< double > call_residuals(mumufit::Parameters pars) const
Call Python callable and returns its result. Intended to be overloaded in Python.
Definition: PyCallback.cpp:34
virtual double call_scalar(mumufit::Parameters pars) const
Call Python callable and returns its result. Intended to be overloaded in Python.
Definition: PyCallback.cpp:29
CallbackType callback_type() const
Definition: PyCallback.cpp:22
A main class to run fitting.
Definition: Kernel.h:34
Result of minimization round.
MinimizerResult minimize(fcn_scalar_t fcn, const Parameters &parameters) const
Definition: Minimizer.cpp:39
void setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
Definition: Minimizer.cpp:26
std::unique_ptr< Kernel > m_kernel
Definition: Minimizer.h:57
A collection of fit parameters.
Definition: Parameters.h:26
The multi-library, multi-algorithm fit wrapper library.