BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MinimizerInfo.cpp
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Fit/Minimizer/MinimizerInfo.cpp
6 //! @brief Implements class MinimizerInfo.
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 
16 #include <sstream>
17 #include <stdexcept>
18 
19 void MinimizerInfo::setAlgorithmName(const std::string& algorithmName)
20 {
21  for (const AlgorithmInfo& algo : m_algorithms) {
22  if (algo.name() == algorithmName) {
24  return;
25  }
26  }
27 
28  std::ostringstream msg;
29  msg << "MinimizerInfo::setAlgorithmName() -> Error. Algorithm name '" << algorithmName
30  << "' is not in the list of defined algorithms (";
31  for (const AlgorithmInfo& algo : m_algorithms)
32  msg << algo.name() << " ";
33  msg << ")";
34  throw std::runtime_error(msg.str());
35 }
36 
37 //! Return list of defined algorithm names.
38 
39 std::vector<std::string> MinimizerInfo::algorithmNames() const
40 {
41  std::vector<std::string> result;
42  for (const AlgorithmInfo& algo : m_algorithms)
43  result.push_back(algo.name());
44  return result;
45 }
46 
47 //! Returns list of string with description of all available algorithms.
48 
49 std::vector<std::string> MinimizerInfo::algorithmDescriptions() const
50 {
51  std::vector<std::string> result;
52  for (const AlgorithmInfo& algo : m_algorithms)
53  result.push_back(algo.description());
54  return result;
55 }
56 
57 //! Creates information for Minuit2Minimizer.
58 
59 MinimizerInfo MinimizerInfo::buildMinuit2Info(const std::string& defaultAlgo)
60 {
61  MinimizerInfo result("Minuit2", "Minuit2 minimizer from ROOT library");
62 
63  result.addAlgorithm(
64  "Migrad",
65  "Variable-metric method with inexact line search, best minimizer according to ROOT.");
66 
67  result.addAlgorithm("Simplex", "Simplex method of Nelder and Meadh, robust "
68  "against big fluctuations in objective function.");
69 
70  result.addAlgorithm("Combined", "Combination of Migrad and Simplex (if Migrad fails).");
71 
72  result.addAlgorithm("Scan", "Simple objective function scan, one parameter at a time.");
73 
74  result.addAlgorithm("Fumili", "Gradient descent minimizer similar to "
75  "Levenberg-Margquardt, sometimes can be better "
76  "than all others.");
77 
78  if (defaultAlgo.empty())
79  result.setAlgorithmName("Migrad");
80  else
81  result.setAlgorithmName(defaultAlgo);
82 
83  return result;
84 }
85 
86 //! Creates information for GSLMultiMinMinimizer.
87 
88 MinimizerInfo MinimizerInfo::buildGSLMultiMinInfo(const std::string& defaultAlgo)
89 {
90  MinimizerInfo result("GSLMultiMin", "MultiMin minimizer from GSL library");
91 
92  result.addAlgorithm("SteepestDescent", "Steepest descent");
93  result.addAlgorithm("ConjugateFR", "Fletcher-Reeves conjugate gradient");
94  result.addAlgorithm("ConjugatePR", "Polak-Ribiere conjugate gradient");
95  result.addAlgorithm("BFGS", "BFGS conjugate gradient");
96  result.addAlgorithm("BFGS2", "BFGS conjugate gradient (Version 2)");
97 
98  if (defaultAlgo.empty())
99  result.setAlgorithmName("ConjugateFR");
100  else
101  result.setAlgorithmName(defaultAlgo);
102 
103  return result;
104 }
105 
106 //! Creates information for GSL's Levenberg-Marquardt.
107 
109 {
110  MinimizerInfo result("GSLLMA", "Levenberg-Marquardt from GSL library");
111  result.addAlgorithm("Default", "Default algorithm");
112  return result;
113 }
114 
115 //! Creates information for GSL's simmulated annealing algorithm.
116 
118 {
119  MinimizerInfo result("GSLSimAn", "Simmulated annealing minimizer from GSL library");
120  result.addAlgorithm("Default", "Default algorithm");
121  return result;
122 }
123 
124 //! Creates information for TMVA genetic minimizer
125 
127 {
128  MinimizerInfo result("Genetic", "Genetic minimizer from TMVA library");
129  result.addAlgorithm("Default", "Default algorithm");
130  return result;
131 }
132 
133 //! Creates information for simple test minimizer
134 
136 {
137  MinimizerInfo result("Test", "One-shot minimizer to test whole chain");
138  result.addAlgorithm("Default", "Default algorithm");
139  return result;
140 }
141 
142 //! Adds minimizer algorithm to the list of defined algorithms.
143 
145 {
146  m_current_algorithm = algorithm.name();
147  m_algorithms.push_back(algorithm);
148 }
149 
150 void MinimizerInfo::addAlgorithm(const std::string& algorithmName,
151  const std::string& algorithmDescription)
152 {
153  addAlgorithm(AlgorithmInfo(algorithmName, algorithmDescription));
154 }
Declares class MinimizerInfo.
A name and a description.
Definition: MinimizerInfo.h:25
std::string name() const
Definition: MinimizerInfo.h:33
Info about a minimizer, including list of defined minimization algorithms.
Definition: MinimizerInfo.h:45
std::string m_current_algorithm
Definition: MinimizerInfo.h:78
static MinimizerInfo buildGeneticInfo()
Creates information for TMVA genetic minimizer.
static MinimizerInfo buildGSLSimAnInfo()
Creates information for GSL's simmulated annealing algorithm.
std::string algorithmName() const
Definition: MinimizerInfo.h:59
void setAlgorithmName(const std::string &algorithmName)
Sets currently active algorithm.
std::vector< std::string > algorithmDescriptions() const
Returns list of string with description of all available algorithms.
void addAlgorithm(const AlgorithmInfo &algorithm)
Adds minimizer algorithm to the list of defined algorithms.
std::vector< AlgorithmInfo > m_algorithms
Definition: MinimizerInfo.h:77
static MinimizerInfo buildGSLLMAInfo()
Creates information for GSL's Levenberg-Marquardt.
static MinimizerInfo buildGSLMultiMinInfo(const std::string &defaultAlgo="")
Creates information for GSLMultiMinMinimizer.
static MinimizerInfo buildTestMinimizerInfo()
Creates information for simple test minimizer.
std::vector< std::string > algorithmNames() const
Return list of defined algorithm names.
static MinimizerInfo buildMinuit2Info(const std::string &defaultAlgo="")
Creates information for Minuit2Minimizer.
Some additions to standard library algorithms.
Definition: Algorithms.h:27