16 #include <Math/GeneticMinimizer.h>
21 std::map<int, std::string> statusDescription()
23 std::map<int, std::string> result;
24 result[0] =
"OK, minimum found";
25 result[1] =
"Maximum number of iterations reached";
30 GeneticMinimizer::GeneticMinimizer()
34 addOption(
"Tolerance", 0.01,
"Tolerance on the function value at the minimum");
35 addOption(
"PrintLevel", 0,
"Minimizer internal print level");
36 addOption(
"MaxIterations", 3,
"Maximum number of iterations");
37 addOption(
"PopSize", 300,
"Population size");
38 addOption(
"RandomSeed", 0,
"Random seed");
51 GeneticMinimizer::~GeneticMinimizer() =
default;
55 setOptionValue(
"Tolerance", value);
58 double GeneticMinimizer::tolerance()
const
60 return optionValue<double>(
"Tolerance");
65 setOptionValue(
"PrintLevel", value);
68 int GeneticMinimizer::printLevel()
const
70 return optionValue<int>(
"PrintLevel");
75 setOptionValue(
"MaxIterations", value);
78 int GeneticMinimizer::maxIterations()
const
80 return optionValue<int>(
"MaxIterations");
85 setOptionValue(
"PopSize", value);
88 int GeneticMinimizer::populationSize()
const
90 return optionValue<int>(
"PopSize");
95 setOptionValue(
"RandomSeed", value);
98 int GeneticMinimizer::randomSeed()
const
100 return optionValue<int>(
"RandomSeed");
103 void GeneticMinimizer::setParameter(
unsigned int index,
const Fit::Parameter& par)
105 if (!par.limits().isFixed() && !par.limits().isLimited()) {
106 std::ostringstream ostr;
107 ostr <<
"GeneticMinimizer::setParameter() -> Error! "
108 <<
"Genetic minimizer requires either fixed or "
109 <<
"limited AttLimits::limited(left,right) parameter. "
110 <<
" Parameter name '" << par.name() <<
"', limits:" << par.limits().toString();
111 throw std::runtime_error(ostr.str());
113 RootMinimizerAdapter::setParameter(index, par);
118 return statusDescription()[rootMinimizer()->Status()];
124 result[
"functionCalls"] = std::to_string(rootMinimizer()->NCalls());
128 void GeneticMinimizer::propagateOptions()
130 ROOT::Math::GeneticMinimizerParameters pars;
131 pars.fPopSize = populationSize();
132 pars.fNsteps = maxIterations();
137 const double scale_as_in_root = 10.0;
138 pars.fConvCrit = scale_as_in_root * tolerance();
139 pars.fSeed = randomSeed();
140 m_genetic_minimizer->SetParameters(pars);
143 const RootMinimizerAdapter::root_minimizer_t* GeneticMinimizer::rootMinimizer()
const
145 return m_genetic_minimizer.get();
Declares class GeneticMinimizer.
A fittable parameter with value, error, step, and limits.
Wrapper for the CERN ROOT Genetic minimizer.
void setTolerance(double value)
Sets tolerance on the function value at the minimum.
void setPopulationSize(int value)
Sets population size.
std::map< std::string, std::string > statusMap() const override
Returns map of string representing different minimizer statuses.
std::string statusToString() const override
Returns string representation of current minimizer status.
void setPrintLevel(int value)
Sets minimizer internal print level.
void setRandomSeed(int value)
Sets random seed.
void setMaxIterations(int value)
Sets maximum number of iterations to try at each step.
Info about a minimizer, including list of defined minimization algorithms.
Pure virtual interface that adapts the CERN ROOT minimizer to our IMinimizer.
virtual std::map< std::string, std::string > statusMap() const
Returns map of string representing different minimizer statuses.