Skip to content
Snippets Groups Projects
Commit a3f90b75 authored by Matthias Puchner's avatar Matthias Puchner
Browse files

add descriptors to minimizers

parent 086d1945
No related branches found
No related tags found
1 merge request!475Harmonized and less generic UI for minimizers
...@@ -68,6 +68,21 @@ MinimizerContainerItem::MinimizerContainerItem() : MinimizerItem(M_TYPE) ...@@ -68,6 +68,21 @@ MinimizerContainerItem::MinimizerContainerItem() : MinimizerItem(M_TYPE)
"experimental data."); "experimental data.");
} }
SelectionDescriptor<MinimizerItem*> MinimizerContainerItem::minimizers() const
{
return SelectionDescriptor<MinimizerItem*>(item<GroupItem>(P_MINIMIZERS));
}
SelectionDescriptor<QString> MinimizerContainerItem::normFunction() const
{
return SelectionDescriptor<QString>(getItem(P_NORM));
}
SelectionDescriptor<QString> MinimizerContainerItem::objectiveMetric() const
{
return SelectionDescriptor<QString>(getItem(P_METRIC));
}
std::unique_ptr<IMinimizer> MinimizerContainerItem::createMinimizer() const std::unique_ptr<IMinimizer> MinimizerContainerItem::createMinimizer() const
{ {
return groupItem<MinimizerItem>(P_MINIMIZERS).createMinimizer(); return groupItem<MinimizerItem>(P_MINIMIZERS).createMinimizer();
...@@ -116,6 +131,18 @@ std::unique_ptr<IMinimizer> MinuitMinimizerItem::createMinimizer() const ...@@ -116,6 +131,18 @@ std::unique_ptr<IMinimizer> MinuitMinimizerItem::createMinimizer() const
return std::unique_ptr<IMinimizer>(domainMinimizer); return std::unique_ptr<IMinimizer>(domainMinimizer);
} }
ValueDescriptors MinuitMinimizerItem::valueDescriptorsForUI() const
{
return {
SelectionDescriptor<QString>(getItem(P_ALGORITHMS)),
UIntDescriptor(getItem(P_STRATEGY), Unit::unitless),
DoubleDescriptor(getItem(P_ERRORDEF), Unit::unitless),
DoubleDescriptor(getItem(P_TOLERANCE), Unit::unitless),
DoubleDescriptor(getItem(P_PRECISION), Unit::unitless),
UIntDescriptor(getItem(P_MAXFUNCTIONCALLS), Unit::unitless),
};
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
GSLMultiMinimizerItem::GSLMultiMinimizerItem() : MinimizerItem(M_TYPE) GSLMultiMinimizerItem::GSLMultiMinimizerItem() : MinimizerItem(M_TYPE)
...@@ -133,6 +160,14 @@ std::unique_ptr<IMinimizer> GSLMultiMinimizerItem::createMinimizer() const ...@@ -133,6 +160,14 @@ std::unique_ptr<IMinimizer> GSLMultiMinimizerItem::createMinimizer() const
return std::unique_ptr<IMinimizer>(domainMinimizer); return std::unique_ptr<IMinimizer>(domainMinimizer);
} }
ValueDescriptors GSLMultiMinimizerItem::valueDescriptorsForUI() const
{
return {
SelectionDescriptor<QString>(getItem(P_ALGORITHMS)),
UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
};
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
GeneticMinimizerItem::GeneticMinimizerItem() : MinimizerItem(M_TYPE) GeneticMinimizerItem::GeneticMinimizerItem() : MinimizerItem(M_TYPE)
...@@ -153,6 +188,16 @@ std::unique_ptr<IMinimizer> GeneticMinimizerItem::createMinimizer() const ...@@ -153,6 +188,16 @@ std::unique_ptr<IMinimizer> GeneticMinimizerItem::createMinimizer() const
return std::unique_ptr<IMinimizer>(domainMinimizer); return std::unique_ptr<IMinimizer>(domainMinimizer);
} }
ValueDescriptors GeneticMinimizerItem::valueDescriptorsForUI() const
{
return {
DoubleDescriptor(getItem(P_TOLERANCE), Unit::unitless),
UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
UIntDescriptor(getItem(P_POPULATIONSIZE), Unit::unitless),
UIntDescriptor(getItem(P_RANDOMSEED), Unit::unitless),
};
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
SimAnMinimizerItem::SimAnMinimizerItem() : MinimizerItem(M_TYPE) SimAnMinimizerItem::SimAnMinimizerItem() : MinimizerItem(M_TYPE)
...@@ -179,6 +224,19 @@ std::unique_ptr<IMinimizer> SimAnMinimizerItem::createMinimizer() const ...@@ -179,6 +224,19 @@ std::unique_ptr<IMinimizer> SimAnMinimizerItem::createMinimizer() const
return std::unique_ptr<IMinimizer>(domainMinimizer); return std::unique_ptr<IMinimizer>(domainMinimizer);
} }
ValueDescriptors SimAnMinimizerItem::valueDescriptorsForUI() const
{
return {
UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
UIntDescriptor(getItem(P_ITERATIONSTEMP), Unit::unitless),
DoubleDescriptor(getItem(P_STEPSIZE), Unit::unitless),
DoubleDescriptor(getItem(P_BOLTZMANN_K), Unit::unitless),
DoubleDescriptor(getItem(P_BOLTZMANN_TINIT), Unit::unitless),
DoubleDescriptor(getItem(P_BOLTZMANN_MU), Unit::unitless),
DoubleDescriptor(getItem(P_BOLTZMANN_TMIN), Unit::unitless),
};
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
GSLLMAMinimizerItem::GSLLMAMinimizerItem() : MinimizerItem(M_TYPE) GSLLMAMinimizerItem::GSLLMAMinimizerItem() : MinimizerItem(M_TYPE)
...@@ -195,6 +253,14 @@ std::unique_ptr<IMinimizer> GSLLMAMinimizerItem::createMinimizer() const ...@@ -195,6 +253,14 @@ std::unique_ptr<IMinimizer> GSLLMAMinimizerItem::createMinimizer() const
return std::unique_ptr<IMinimizer>(domainMinimizer); return std::unique_ptr<IMinimizer>(domainMinimizer);
} }
ValueDescriptors GSLLMAMinimizerItem::valueDescriptorsForUI() const
{
return {
DoubleDescriptor(getItem(P_TOLERANCE), Unit::unitless),
UIntDescriptor(getItem(P_MAXITERATIONS), Unit::unitless),
};
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
TestMinimizerItem::TestMinimizerItem() : MinimizerItem(M_TYPE) {} TestMinimizerItem::TestMinimizerItem() : MinimizerItem(M_TYPE) {}
......
...@@ -15,17 +15,26 @@ ...@@ -15,17 +15,26 @@
#ifndef BORNAGAIN_GUI_MODEL_FIT_MINIMIZERITEM_H #ifndef BORNAGAIN_GUI_MODEL_FIT_MINIMIZERITEM_H
#define BORNAGAIN_GUI_MODEL_FIT_MINIMIZERITEM_H #define BORNAGAIN_GUI_MODEL_FIT_MINIMIZERITEM_H
#include "GUI/Model/Group/SelectionDescriptor.h"
#include "GUI/Model/Session/SessionItem.h" #include "GUI/Model/Session/SessionItem.h"
#include "GUI/Model/Types/DoubleDescriptor.h"
#include "GUI/Model/Types/UIntDescriptor.h"
#include <variant>
class IMinimizer; class IMinimizer;
class ObjectiveMetric; class ObjectiveMetric;
using ValueDescriptors =
QList<std::variant<DoubleDescriptor, UIntDescriptor, SelectionDescriptor<QString>>>;
//! The MinimizerItem class is the base item to hold minimizer settings. //! The MinimizerItem class is the base item to hold minimizer settings.
class BA_CORE_API_ MinimizerItem : public SessionItem { class BA_CORE_API_ MinimizerItem : public SessionItem {
public: public:
virtual std::unique_ptr<IMinimizer> createMinimizer() const = 0; virtual std::unique_ptr<IMinimizer> createMinimizer() const = 0;
virtual ValueDescriptors valueDescriptorsForUI() const { return {}; }
protected: protected:
explicit MinimizerItem(const QString& model_type); explicit MinimizerItem(const QString& model_type);
}; };
...@@ -43,6 +52,10 @@ public: ...@@ -43,6 +52,10 @@ public:
MinimizerContainerItem(); MinimizerContainerItem();
SelectionDescriptor<MinimizerItem*> minimizers() const;
SelectionDescriptor<QString> normFunction() const;
SelectionDescriptor<QString> objectiveMetric() const;
std::unique_ptr<IMinimizer> createMinimizer() const override; std::unique_ptr<IMinimizer> createMinimizer() const override;
std::unique_ptr<ObjectiveMetric> createMetric() const; std::unique_ptr<ObjectiveMetric> createMetric() const;
}; };
...@@ -63,6 +76,7 @@ public: ...@@ -63,6 +76,7 @@ public:
MinuitMinimizerItem(); MinuitMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override; std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
}; };
//! The GSLMinimizerItem class represents settings for GSL MultiMin minimizer family. //! The GSLMinimizerItem class represents settings for GSL MultiMin minimizer family.
...@@ -77,6 +91,7 @@ public: ...@@ -77,6 +91,7 @@ public:
GSLMultiMinimizerItem(); GSLMultiMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override; std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
}; };
//! The GeneticMinimizerItem class represents settings for TMVA/Genetic minimizer. //! The GeneticMinimizerItem class represents settings for TMVA/Genetic minimizer.
...@@ -93,6 +108,7 @@ public: ...@@ -93,6 +108,7 @@ public:
GeneticMinimizerItem(); GeneticMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override; std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
}; };
//! The SimAnMinimizerItem class represents settings for GSL's simulated annealing minimizer. //! The SimAnMinimizerItem class represents settings for GSL's simulated annealing minimizer.
...@@ -113,6 +129,7 @@ public: ...@@ -113,6 +129,7 @@ public:
SimAnMinimizerItem(); SimAnMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override; std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
}; };
//! The GSLLMAMinimizerItem class represents settings for GSL's version of Levenberg-Marquardt. //! The GSLLMAMinimizerItem class represents settings for GSL's version of Levenberg-Marquardt.
...@@ -127,6 +144,7 @@ public: ...@@ -127,6 +144,7 @@ public:
GSLLMAMinimizerItem(); GSLLMAMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override; std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
}; };
//! The TestMinimizerItem class represents domain's TestMinimizer to test whole chain //! The TestMinimizerItem class represents domain's TestMinimizer to test whole chain
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment