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)
"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
{
return groupItem<MinimizerItem>(P_MINIMIZERS).createMinimizer();
......@@ -116,6 +131,18 @@ std::unique_ptr<IMinimizer> MinuitMinimizerItem::createMinimizer() const
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)
......@@ -133,6 +160,14 @@ std::unique_ptr<IMinimizer> GSLMultiMinimizerItem::createMinimizer() const
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)
......@@ -153,6 +188,16 @@ std::unique_ptr<IMinimizer> GeneticMinimizerItem::createMinimizer() const
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)
......@@ -179,6 +224,19 @@ std::unique_ptr<IMinimizer> SimAnMinimizerItem::createMinimizer() const
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)
......@@ -195,6 +253,14 @@ std::unique_ptr<IMinimizer> GSLLMAMinimizerItem::createMinimizer() const
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) {}
......
......@@ -15,17 +15,26 @@
#ifndef 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/Types/DoubleDescriptor.h"
#include "GUI/Model/Types/UIntDescriptor.h"
#include <variant>
class IMinimizer;
class ObjectiveMetric;
using ValueDescriptors =
QList<std::variant<DoubleDescriptor, UIntDescriptor, SelectionDescriptor<QString>>>;
//! The MinimizerItem class is the base item to hold minimizer settings.
class BA_CORE_API_ MinimizerItem : public SessionItem {
public:
virtual std::unique_ptr<IMinimizer> createMinimizer() const = 0;
virtual ValueDescriptors valueDescriptorsForUI() const { return {}; }
protected:
explicit MinimizerItem(const QString& model_type);
};
......@@ -43,6 +52,10 @@ public:
MinimizerContainerItem();
SelectionDescriptor<MinimizerItem*> minimizers() const;
SelectionDescriptor<QString> normFunction() const;
SelectionDescriptor<QString> objectiveMetric() const;
std::unique_ptr<IMinimizer> createMinimizer() const override;
std::unique_ptr<ObjectiveMetric> createMetric() const;
};
......@@ -63,6 +76,7 @@ public:
MinuitMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
};
//! The GSLMinimizerItem class represents settings for GSL MultiMin minimizer family.
......@@ -77,6 +91,7 @@ public:
GSLMultiMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
};
//! The GeneticMinimizerItem class represents settings for TMVA/Genetic minimizer.
......@@ -93,6 +108,7 @@ public:
GeneticMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
};
//! The SimAnMinimizerItem class represents settings for GSL's simulated annealing minimizer.
......@@ -113,6 +129,7 @@ public:
SimAnMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
};
//! The GSLLMAMinimizerItem class represents settings for GSL's version of Levenberg-Marquardt.
......@@ -127,6 +144,7 @@ public:
GSLLMAMinimizerItem();
std::unique_ptr<IMinimizer> createMinimizer() const override;
ValueDescriptors valueDescriptorsForUI() const override;
};
//! 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