BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
GSLLevenbergMarquardtMinimizer Class Reference
Inheritance diagram for GSLLevenbergMarquardtMinimizer:
Collaboration diagram for GSLLevenbergMarquardtMinimizer:

Public Types

typedef ROOT::Math::Minimizer root_minimizer_t
 

Public Member Functions

 GSLLevenbergMarquardtMinimizer ()
 
 ~GSLLevenbergMarquardtMinimizer () override
 
void setTolerance (double value)
 
double tolerance () const
 
void setPrintLevel (int value)
 
int printLevel () const
 
void setMaxIterations (int value)
 
int maxIterations () const
 
std::string statusToString () const override
 
std::map< std::string, std::string > statusMap () const override
 
bool requiresResiduals () override
 
Fit::MinimizerResult minimize_scalar (fcn_scalar_t fcn, Fit::Parameters parameters) override
 
Fit::MinimizerResult minimize_residual (fcn_residual_t fcn, Fit::Parameters parameters) override
 
std::string minimizerName () const override final
 
std::string algorithmName () const override final
 
void setParameters (const Fit::Parameters &parameters)
 
double minValue () const override final
 
MinimizerOptionsoptions ()
 
const MinimizerOptionsoptions () const
 
bool providesError () const
 
void setOptions (const std::string &optionString) override final
 
virtual void clear ()
 

Protected Member Functions

void propagateOptions () override
 
const root_minimizer_trootMinimizer () const override
 
void setParameter (unsigned int index, const Fit::Parameter &par) override
 
Fit::MinimizerResult minimize (Fit::Parameters parameters)
 
void propagateResults (Fit::Parameters &parameters)
 
size_t fitDimension () const
 
std::vector< double > parValuesAtMinimum () const
 
std::vector< double > parErrorsAtMinimum () const
 
root_minimizer_trootMinimizer ()
 
template<class T >
OptionContainer::option_t addOption (const std::string &optionName, T value, const std::string &description="")
 
template<class T >
void setOptionValue (const std::string &optionName, T value)
 
template<class T >
optionValue (const std::string &optionName) const
 

Private Attributes

std::unique_ptr< ROOT::Math::GSLNLSMinimizer > m_gsl_minimizer
 
MinimizerOptions m_options
 
MinimizerInfo m_minimizerInfo
 
std::unique_ptr< Fit::ObjectiveFunctionAdapterm_adapter
 
bool m_status
 

Detailed Description

It's a facade to ROOT::Math::GSLNLSMinimizer which, in turn, is a facade to the actual GSL's gsl_multifit_fdfsolver_type (http://www.gnu.org/software/gsl/manual/html_node/Nonlinear-Least_002dSquares-Fitting.html).

Definition at line 33 of file GSLLevenbergMarquardtMinimizer.h.

Member Typedef Documentation

◆ root_minimizer_t

typedef ROOT::Math::Minimizer RootMinimizerAdapter::root_minimizer_t
inherited

Definition at line 46 of file RootMinimizerAdapter.h.

Constructor & Destructor Documentation

◆ GSLLevenbergMarquardtMinimizer()

GSLLevenbergMarquardtMinimizer::GSLLevenbergMarquardtMinimizer ( )

Definition at line 47 of file GSLLevenbergMarquardtMinimizer.cpp.

49  m_gsl_minimizer(new ROOT::Math::GSLNLSMinimizer(2))
50 {
51  addOption("Tolerance", 0.01, "Tolerance on the function value at the minimum");
52  addOption("PrintLevel", 0, "Minimizer internal print level");
53  addOption("MaxIterations", 0, "Maximum number of iterations");
54 }
std::unique_ptr< ROOT::Math::GSLNLSMinimizer > m_gsl_minimizer
static MinimizerInfo buildGSLLMAInfo()
Creates information for GSL's Levenberg-Marquardt.
RootMinimizerAdapter(const MinimizerInfo &minimizerInfo)
OptionContainer::option_t addOption(const std::string &optionName, T value, const std::string &description="")

References RootMinimizerAdapter::addOption().

Here is the call graph for this function:

◆ ~GSLLevenbergMarquardtMinimizer()

GSLLevenbergMarquardtMinimizer::~GSLLevenbergMarquardtMinimizer ( )
overridedefault

Member Function Documentation

◆ setTolerance()

void GSLLevenbergMarquardtMinimizer::setTolerance ( double  value)

Sets tolerance on the function value at the minimum.

Definition at line 58 of file GSLLevenbergMarquardtMinimizer.cpp.

59 {
60  setOptionValue("Tolerance", value);
61 }
void setOptionValue(const std::string &optionName, T value)

References RootMinimizerAdapter::setOptionValue().

Here is the call graph for this function:

◆ tolerance()

double GSLLevenbergMarquardtMinimizer::tolerance ( ) const

Definition at line 63 of file GSLLevenbergMarquardtMinimizer.cpp.

64 {
65  return optionValue<double>("Tolerance");
66 }

Referenced by propagateOptions().

◆ setPrintLevel()

void GSLLevenbergMarquardtMinimizer::setPrintLevel ( int  value)

Sets minimizer internal print level.

Definition at line 68 of file GSLLevenbergMarquardtMinimizer.cpp.

69 {
70  setOptionValue("PrintLevel", value);
71 }

References RootMinimizerAdapter::setOptionValue().

Here is the call graph for this function:

◆ printLevel()

int GSLLevenbergMarquardtMinimizer::printLevel ( ) const

Definition at line 73 of file GSLLevenbergMarquardtMinimizer.cpp.

74 {
75  return optionValue<int>("PrintLevel");
76 }

Referenced by propagateOptions().

◆ setMaxIterations()

void GSLLevenbergMarquardtMinimizer::setMaxIterations ( int  value)

Sets maximum number of iterations.

This is an internal minimizer setting which has no direct relation to the number of objective function calls (e.g. numberOfIteraction=5 might correspond to ~100 objective function calls).

Definition at line 78 of file GSLLevenbergMarquardtMinimizer.cpp.

79 {
80  setOptionValue("MaxIterations", value);
81 }

References RootMinimizerAdapter::setOptionValue().

Here is the call graph for this function:

◆ maxIterations()

int GSLLevenbergMarquardtMinimizer::maxIterations ( ) const

Definition at line 83 of file GSLLevenbergMarquardtMinimizer.cpp.

84 {
85  return optionValue<int>("MaxIterations");
86 }

Referenced by propagateOptions().

◆ statusToString()

std::string GSLLevenbergMarquardtMinimizer::statusToString ( ) const
overridevirtual

Returns string representation of current minimizer status.

Reimplemented from RootMinimizerAdapter.

Definition at line 88 of file GSLLevenbergMarquardtMinimizer.cpp.

89 {
91 }
const root_minimizer_t * rootMinimizer() const override
std::string gslErrorDescription(int errorCode)

References MinimizerUtils::gslErrorDescription(), and rootMinimizer().

Here is the call graph for this function:

◆ statusMap()

std::map< std::string, std::string > GSLLevenbergMarquardtMinimizer::statusMap ( ) const
overridevirtual

Returns map of string representing different minimizer statuses.

Reimplemented from RootMinimizerAdapter.

Definition at line 93 of file GSLLevenbergMarquardtMinimizer.cpp.

94 {
95  auto result = RootMinimizerAdapter::statusMap();
96  result["Edm"] = StringUtils::scientific(rootMinimizer()->Edm());
97  result["CovMatrixStatus"] = covmatrixStatusDescription()[rootMinimizer()->CovMatrixStatus()];
98  result["functionCalls"] = std::to_string(rootMinimizer()->NCalls());
99  return result;
100 }
virtual std::map< std::string, std::string > statusMap() const
Returns map of string representing different minimizer statuses.
std::string scientific(const T value, int n=10)
Returns scientific string representing given value of any numeric type.
Definition: StringUtils.h:54

References anonymous_namespace{GSLLevenbergMarquardtMinimizer.cpp}::covmatrixStatusDescription(), rootMinimizer(), StringUtils::scientific(), and RootMinimizerAdapter::statusMap().

Here is the call graph for this function:

◆ requiresResiduals()

bool GSLLevenbergMarquardtMinimizer::requiresResiduals ( )
inlineoverridevirtual

Returns true if minimizer computations are residual-based, false otherwise.

Reimplemented from IMinimizer.

Definition at line 56 of file GSLLevenbergMarquardtMinimizer.h.

56 { return true; }

◆ propagateOptions()

void GSLLevenbergMarquardtMinimizer::propagateOptions ( )
overrideprotectedvirtual

Implements RootMinimizerAdapter.

Definition at line 102 of file GSLLevenbergMarquardtMinimizer.cpp.

103 {
104  m_gsl_minimizer->SetTolerance(tolerance());
105  m_gsl_minimizer->SetPrintLevel(printLevel());
106  m_gsl_minimizer->SetMaxIterations(static_cast<unsigned int>(maxIterations()));
107 }

References m_gsl_minimizer, maxIterations(), printLevel(), and tolerance().

Here is the call graph for this function:

◆ rootMinimizer() [1/2]

const RootMinimizerAdapter::root_minimizer_t * GSLLevenbergMarquardtMinimizer::rootMinimizer ( ) const
overrideprotectedvirtual

Implements RootMinimizerAdapter.

Definition at line 109 of file GSLLevenbergMarquardtMinimizer.cpp.

110 {
111  return m_gsl_minimizer.get();
112 }

References m_gsl_minimizer.

Referenced by statusMap(), and statusToString().

◆ setParameter()

void GSLLevenbergMarquardtMinimizer::setParameter ( unsigned int  index,
const Fit::Parameter par 
)
overrideprotectedvirtual

Reimplemented from RootMinimizerAdapter.

Definition at line 114 of file GSLLevenbergMarquardtMinimizer.cpp.

115 {
116  auto limits = par.limits();
117  if (!limits.isLimitless() && !limits.isFixed())
118  throw std::runtime_error("GSLLMA minimizer can't handle limited parameters."
119  "Please make them free");
121 }
AttLimits limits() const
Definition: Parameter.cpp:51
virtual void setParameter(unsigned int index, const Fit::Parameter &par)

References Fit::Parameter::limits(), and RootMinimizerAdapter::setParameter().

Here is the call graph for this function:

◆ minimize_scalar()

MinimizerResult RootMinimizerAdapter::minimize_scalar ( fcn_scalar_t  ,
Fit::Parameters   
)
overridevirtualinherited

run minimization

Reimplemented from IMinimizer.

Definition at line 32 of file RootMinimizerAdapter.cpp.

33 {
34  // Genetic minimizer requires SetFunction before setParameters, others don't care
35  rootMinimizer()->SetFunction(*m_adapter->rootObjectiveFunction(fcn, parameters));
36  return minimize(parameters);
37 }
std::unique_ptr< Fit::ObjectiveFunctionAdapter > m_adapter
Fit::MinimizerResult minimize(Fit::Parameters parameters)
virtual const root_minimizer_t * rootMinimizer() const =0

References RootMinimizerAdapter::m_adapter, RootMinimizerAdapter::minimize(), and RootMinimizerAdapter::rootMinimizer().

Here is the call graph for this function:

◆ minimize_residual()

MinimizerResult RootMinimizerAdapter::minimize_residual ( fcn_residual_t  fcn,
Fit::Parameters  parameters 
)
overridevirtualinherited

Reimplemented from IMinimizer.

Definition at line 39 of file RootMinimizerAdapter.cpp.

40 {
41  // Genetic minimizer requires SetFunction before setParameters, others don't care
42  rootMinimizer()->SetFunction(*m_adapter->rootResidualFunction(fcn, parameters));
43  return minimize(parameters);
44 }

References RootMinimizerAdapter::m_adapter, RootMinimizerAdapter::minimize(), and RootMinimizerAdapter::rootMinimizer().

Here is the call graph for this function:

◆ minimizerName()

std::string RootMinimizerAdapter::minimizerName ( ) const
finaloverridevirtualinherited

Returns name of the minimizer.

Implements IMinimizer.

Definition at line 64 of file RootMinimizerAdapter.cpp.

65 {
66  return m_minimizerInfo.name();
67 }
std::string name() const
Definition: MinimizerInfo.h:56

References RootMinimizerAdapter::m_minimizerInfo, and MinimizerInfo::name().

Referenced by anonymous_namespace{MinimizerResultUtils.cpp}::reportDescription().

Here is the call graph for this function:

◆ algorithmName()

std::string RootMinimizerAdapter::algorithmName ( ) const
finaloverridevirtualinherited

Returns name of the minimization algorithm.

Implements IMinimizer.

Definition at line 69 of file RootMinimizerAdapter.cpp.

70 {
72 }
std::string algorithmName() const
Definition: MinimizerInfo.h:59

References MinimizerInfo::algorithmName(), and RootMinimizerAdapter::m_minimizerInfo.

Referenced by anonymous_namespace{MinimizerResultUtils.cpp}::reportDescription(), and Minuit2Minimizer::requiresResiduals().

Here is the call graph for this function:

◆ setParameters()

void RootMinimizerAdapter::setParameters ( const Fit::Parameters parameters)
inherited

Definition at line 74 of file RootMinimizerAdapter.cpp.

75 {
76  unsigned int index(0);
77  for (const auto& par : parameters)
78  setParameter(index++, par);
79 }

References RootMinimizerAdapter::setParameter().

Referenced by RootMinimizerAdapter::minimize().

Here is the call graph for this function:

◆ minValue()

double RootMinimizerAdapter::minValue ( ) const
finaloverridevirtualinherited

Returns minimum function value.

Reimplemented from IMinimizer.

Definition at line 81 of file RootMinimizerAdapter.cpp.

82 {
83  return rootMinimizer()->MinValue();
84 }

References RootMinimizerAdapter::rootMinimizer().

Referenced by RootMinimizerAdapter::minimize(), and RootMinimizerAdapter::statusMap().

Here is the call graph for this function:

◆ options() [1/2]

MinimizerOptions& RootMinimizerAdapter::options ( )
inlineinherited

◆ options() [2/2]

const MinimizerOptions& RootMinimizerAdapter::options ( ) const
inlineinherited

Definition at line 64 of file RootMinimizerAdapter.h.

64 { return m_options; }

References RootMinimizerAdapter::m_options.

◆ providesError()

bool RootMinimizerAdapter::providesError ( ) const
inherited

Returns true if minimizer provides error and error matrix.

Definition at line 91 of file RootMinimizerAdapter.cpp.

92 {
93  return rootMinimizer()->ProvidesError();
94 }

References RootMinimizerAdapter::rootMinimizer().

Referenced by RootMinimizerAdapter::propagateResults(), and RootMinimizerAdapter::statusMap().

Here is the call graph for this function:

◆ setOptions()

void RootMinimizerAdapter::setOptions ( const std::string &  optionString)
finaloverridevirtualinherited

Sets option string to the minimizer.

Reimplemented from IMinimizer.

Definition at line 111 of file RootMinimizerAdapter.cpp.

112 {
113  options().setOptionString(optionString);
114 }
void setOptionString(const std::string &options)
Set options from their string representation.
MinimizerOptions & options()

References RootMinimizerAdapter::options(), and MinimizerOptions::setOptionString().

Here is the call graph for this function:

◆ minimize()

MinimizerResult RootMinimizerAdapter::minimize ( Fit::Parameters  parameters)
protectedinherited

Definition at line 46 of file RootMinimizerAdapter.cpp.

47 {
48  setParameters(parameters);
50 
51  m_status = rootMinimizer()->Minimize();
52  propagateResults(parameters);
53 
54  MinimizerResult result;
55  result.setParameters(parameters);
56  result.setMinValue(minValue());
58  result.setNumberOfCalls(m_adapter->numberOfCalls());
59  result.setNumberOfGradientCalls(m_adapter->numberOfGradientCalls());
60 
61  return result;
62 }
Result of minimization round.
void setReport(const std::string &value)
void setMinValue(double value)
void setNumberOfGradientCalls(int value)
void setNumberOfCalls(int value)
void setParameters(const Parameters &parameters)
double minValue() const override final
Returns minimum function value.
void propagateResults(Fit::Parameters &parameters)
Propagates results of minimization to fit parameter set.
virtual void propagateOptions()=0
void setParameters(const Fit::Parameters &parameters)
std::string reportToString(const RootMinimizerAdapter &minimizer)
Reports results of minimization in the form of multi-line string.

References RootMinimizerAdapter::m_adapter, RootMinimizerAdapter::m_status, RootMinimizerAdapter::minValue(), RootMinimizerAdapter::propagateOptions(), RootMinimizerAdapter::propagateResults(), MinimizerResultUtils::reportToString(), RootMinimizerAdapter::rootMinimizer(), Fit::MinimizerResult::setMinValue(), Fit::MinimizerResult::setNumberOfCalls(), Fit::MinimizerResult::setNumberOfGradientCalls(), RootMinimizerAdapter::setParameters(), Fit::MinimizerResult::setParameters(), and Fit::MinimizerResult::setReport().

Referenced by RootMinimizerAdapter::minimize_residual(), and RootMinimizerAdapter::minimize_scalar().

Here is the call graph for this function:

◆ propagateResults()

void RootMinimizerAdapter::propagateResults ( Fit::Parameters parameters)
protectedinherited

Propagates results of minimization to fit parameter set.

Definition at line 118 of file RootMinimizerAdapter.cpp.

119 {
120  parameters.setValues(parValuesAtMinimum());
121  parameters.setErrors(parErrorsAtMinimum());
122  // sets correlation matrix
123  if (providesError()) {
125  matrix.resize(fitDimension());
126 
127  for (size_t i = 0; i < fitDimension(); ++i) {
128  matrix[i].resize(fitDimension(), 0.0);
129  for (size_t j = 0; j < fitDimension(); ++j)
130  matrix[i][j] = rootMinimizer()->Correlation(static_cast<unsigned int>(i),
131  static_cast<unsigned int>(j));
132  }
133  parameters.setCorrelationMatrix(matrix);
134  }
135 }
void setValues(const std::vector< double > &values)
Definition: Parameters.cpp:64
void setCorrelationMatrix(const corr_matrix_t &matrix)
Definition: Parameters.cpp:122
void setErrors(const std::vector< double > &errors)
Definition: Parameters.cpp:90
std::vector< std::vector< double > > corr_matrix_t
Definition: Parameters.h:33
size_t fitDimension() const
Returns number of fit parameters defined (i.e. dimension of the function to be minimized).
std::vector< double > parErrorsAtMinimum() const
Returns errors of the variables at minimum.
std::vector< double > parValuesAtMinimum() const
Returns value of the variables at minimum.
bool providesError() const
Returns true if minimizer provides error and error matrix.

References RootMinimizerAdapter::fitDimension(), RootMinimizerAdapter::parErrorsAtMinimum(), RootMinimizerAdapter::parValuesAtMinimum(), RootMinimizerAdapter::providesError(), RootMinimizerAdapter::rootMinimizer(), Fit::Parameters::setCorrelationMatrix(), Fit::Parameters::setErrors(), and Fit::Parameters::setValues().

Referenced by RootMinimizerAdapter::minimize().

Here is the call graph for this function:

◆ fitDimension()

size_t RootMinimizerAdapter::fitDimension ( ) const
protectedinherited

Returns number of fit parameters defined (i.e. dimension of the function to be minimized).

Definition at line 179 of file RootMinimizerAdapter.cpp.

180 {
181  return rootMinimizer()->NDim();
182 }

References RootMinimizerAdapter::rootMinimizer().

Referenced by RootMinimizerAdapter::parErrorsAtMinimum(), RootMinimizerAdapter::parValuesAtMinimum(), and RootMinimizerAdapter::propagateResults().

Here is the call graph for this function:

◆ parValuesAtMinimum()

std::vector< double > RootMinimizerAdapter::parValuesAtMinimum ( ) const
protectedinherited

Returns value of the variables at minimum.

Definition at line 186 of file RootMinimizerAdapter.cpp.

187 {
188  std::vector<double> result;
189  result.resize(fitDimension(), 0.0);
190  std::copy(rootMinimizer()->X(), rootMinimizer()->X() + fitDimension(), result.begin());
191  return result;
192 }

References RootMinimizerAdapter::fitDimension(), and RootMinimizerAdapter::rootMinimizer().

Referenced by RootMinimizerAdapter::propagateResults().

Here is the call graph for this function:

◆ parErrorsAtMinimum()

std::vector< double > RootMinimizerAdapter::parErrorsAtMinimum ( ) const
protectedinherited

Returns errors of the variables at minimum.

Definition at line 196 of file RootMinimizerAdapter.cpp.

197 {
198  std::vector<double> result;
199  result.resize(fitDimension(), 0.0);
200  if (rootMinimizer()->Errors() != 0) {
201  std::copy(rootMinimizer()->Errors(), rootMinimizer()->Errors() + fitDimension(),
202  result.begin());
203  }
204  return result;
205 }

References RootMinimizerAdapter::fitDimension(), and RootMinimizerAdapter::rootMinimizer().

Referenced by RootMinimizerAdapter::propagateResults().

Here is the call graph for this function:

◆ rootMinimizer() [2/2]

RootMinimizerAdapter::root_minimizer_t * RootMinimizerAdapter::rootMinimizer ( )
protectedinherited

Definition at line 207 of file RootMinimizerAdapter.cpp.

208 {
209  return const_cast<root_minimizer_t*>(
210  static_cast<const RootMinimizerAdapter*>(this)->rootMinimizer());
211 }
Pure virtual interface that adapts the CERN ROOT minimizer to our IMinimizer.
ROOT::Math::Minimizer root_minimizer_t

References RootMinimizerAdapter::rootMinimizer().

Here is the call graph for this function:

◆ addOption()

template<class T >
OptionContainer::option_t RootMinimizerAdapter::addOption ( const std::string &  optionName,
value,
const std::string &  description = "" 
)
protectedinherited

Definition at line 110 of file RootMinimizerAdapter.h.

112 {
113  return m_options.addOption(optionName, value, description);
114 }
option_t addOption(const std::string &optionName, T value, const std::string &description="")

References OptionContainer::addOption(), and RootMinimizerAdapter::m_options.

Referenced by GeneticMinimizer::GeneticMinimizer(), GSLLevenbergMarquardtMinimizer(), GSLMultiMinimizer::GSLMultiMinimizer(), Minuit2Minimizer::Minuit2Minimizer(), and SimAnMinimizer::SimAnMinimizer().

Here is the call graph for this function:

◆ setOptionValue()

template<class T >
void RootMinimizerAdapter::setOptionValue ( const std::string &  optionName,
value 
)
protectedinherited

◆ optionValue()

template<class T >
T RootMinimizerAdapter::optionValue ( const std::string &  optionName) const
protectedinherited

Definition at line 121 of file RootMinimizerAdapter.h.

122 {
123  return m_options.optionValue<T>(optionName);
124 }
T optionValue(const std::string &optionName) const

References RootMinimizerAdapter::m_options, and OptionContainer::optionValue().

Here is the call graph for this function:

◆ clear()

virtual void IMinimizer::clear ( )
inlinevirtualinherited

clear resources (parameters) for consecutives minimizations

Definition at line 50 of file IMinimizer.h.

50 {}

Member Data Documentation

◆ m_gsl_minimizer

std::unique_ptr<ROOT::Math::GSLNLSMinimizer> GSLLevenbergMarquardtMinimizer::m_gsl_minimizer
private

Definition at line 64 of file GSLLevenbergMarquardtMinimizer.h.

Referenced by propagateOptions(), and rootMinimizer().

◆ m_options

◆ m_minimizerInfo

MinimizerInfo RootMinimizerAdapter::m_minimizerInfo
privateinherited

◆ m_adapter

std::unique_ptr<Fit::ObjectiveFunctionAdapter> RootMinimizerAdapter::m_adapter
privateinherited

◆ m_status

bool RootMinimizerAdapter::m_status
privateinherited

The documentation for this class was generated from the following files: