Mantid
|
Trust Region minimizer class using the DTRS method of GALAHAD. More...
#include <TrustRegionMinimizer.h>
Public Member Functions | |
double | costFunctionVal () override |
Return current value of the cost function. More... | |
void | initialize (API::ICostFunction_sptr costFunction, size_t maxIterations=0) override |
Initialize minimizer, i.e. pass a function to minimize. More... | |
bool | iterate (size_t) override |
Do one iteration. More... | |
std::string | name () const override |
Name of the minimizer. More... | |
TrustRegionMinimizer () | |
constructor and destructor More... | |
Public Member Functions inherited from Mantid::API::IFuncMinimizer | |
virtual double | costFunctionVal ()=0 |
Get value of cost function. More... | |
virtual void | finalize () |
Finalize minimization, eg store additional outputs. More... | |
virtual std::string | getError () const |
Get the error string. More... | |
virtual void | initialize (API::ICostFunction_sptr function, size_t maxIterations=1000)=0 |
Initialize minimizer. More... | |
virtual bool | iterate (size_t iteration)=0 |
Do one iteration. More... | |
virtual bool | minimize (size_t maxIterations=1000) |
Perform iteration with minimizer and return true if successful. More... | |
virtual std::string | name () const =0 |
Get name of minimizer. More... | |
Public Member Functions inherited from Mantid::Kernel::PropertyManager | |
::Json::Value | asJson (bool withDefaultValues=false) const override |
Return the property manager serialized as a json object. More... | |
std::string | asString (bool withDefaultValues=false) const override |
Return the property manager serialized as a string. More... | |
void | clear () override |
Clears the whole property map. More... | |
void | declareOrReplaceProperty (std::unique_ptr< Property > p, const std::string &doc="") override |
Add or replace a property in the list of managed properties. More... | |
void | declareProperty (const std::string &name, const char *value, const std::string &doc, IValidator_sptr validator=std::make_shared< NullValidator >(), const unsigned int direction=Direction::Input) |
Specialised version of declareProperty template method to prevent the creation of a PropertyWithValue of type const char* if an argument in quotes is passed (it will be converted to a string). More... | |
void | declareProperty (const std::string &name, const char *value, const unsigned int direction) |
Add a property of string type to the list of managed properties. More... | |
void | declareProperty (const std::string &name, const char *value, IValidator_sptr validator=std::make_shared< NullValidator >(), const std::string &doc=std::string(), const unsigned int direction=Direction::Input) |
Specialised version of declareProperty template method to prevent the creation of a PropertyWithValue of type const char* if an argument in quotes is passed (it will be converted to a string). More... | |
template<typename T > | |
void | declareProperty (const std::string &name, T value, const std::string &doc, const unsigned int direction=Direction::Input) |
Add a property to the list of managed properties with no validator. More... | |
template<typename T > | |
void | declareProperty (const std::string &name, T value, const unsigned int direction) |
Add a property of the template type to the list of managed properties. More... | |
template<typename T > | |
void | declareProperty (const std::string &name, T value, IValidator_sptr validator=std::make_shared< NullValidator >(), const std::string &doc="", const unsigned int direction=Direction::Input) |
Add a property of the template type to the list of managed properties. More... | |
void | declareProperty (std::unique_ptr< Property > p, const std::string &doc="") override |
Add a property to the list of managed properties. More... | |
virtual void | declareProperty (std::unique_ptr< Property > p, const std::string &doc="")=0 |
Function to declare properties (i.e. store them) More... | |
bool | existsProperty (const std::string &name) const override |
Checks whether the named property is already in the list of managed property. More... | |
void | filterByProperty (const TimeSeriesProperty< bool > &filter, const std::vector< std::string > &excludedFromFiltering=std::vector< std::string >()) override |
Filter the managed properties by the given boolean property mask. More... | |
void | filterByTime (const Types::Core::DateAndTime &start, const Types::Core::DateAndTime &stop) override |
Filter out a run by time. More... | |
std::vector< std::string > | getDeclaredPropertyNames () const noexcept override |
Return the list of declared property names. More... | |
Property * | getPointerToProperty (const std::string &name) const override |
Get a property by name. More... | |
const std::vector< Property * > & | getProperties () const override |
Get the list of managed properties. More... | |
TypedValue | getProperty (const std::string &name) const override |
Get the value of a property. More... | |
std::string | getPropertyValue (const std::string &name) const override |
Get the value of a property as a string. More... | |
bool | operator!= (const PropertyManager &other) const |
PropertyManager & | operator+= (const PropertyManager &rhs) |
Addition operator. More... | |
PropertyManager & | operator= (const PropertyManager &) |
Assignment operator - performs a deep copy. More... | |
bool | operator== (const PropertyManager &other) const |
size_t | propertyCount () const override |
Count the number of properties under management. More... | |
PropertyManager () | |
Default constructor. More... | |
PropertyManager (const PropertyManager &) | |
copy constructor More... | |
void | removeProperty (const std::string &name, const bool delproperty=true) override |
removes the property from properties map More... | |
void | resetProperties () override |
Reset property values back to initial values (blank or default values) More... | |
void | setProperties (const ::Json::Value &jsonValue, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >(), bool createMissing=false) override |
Set the ordered list of properties by a json value collection. More... | |
void | setProperties (const ::Json::Value &jsonValue, IPropertyManager *targetPropertyManager, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >(), bool createMissing=false) |
Set the ordered list of properties by a json value collection. More... | |
void | setProperties (const std::string &propertiesJson, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >(), bool createMissing=false) override |
Set the ordered list of properties by one string of values, separated by semicolons. More... | |
void | setProperties (const std::string &propertiesJson, IPropertyManager *targetPropertyManager, const std::unordered_set< std::string > &ignoreProperties, bool createMissing=false) |
Set the ordered list of properties by one string of values, separated by semicolons. More... | |
void | setPropertiesWithString (const std::string &propertiesString, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >()) override |
Sets all the declared properties from a string. More... | |
void | setPropertyOrdinal (const int &index, const std::string &value) override |
Set the value of a property by an index N.B. More... | |
void | setPropertyValue (const std::string &name, const std::string &value) override |
Set the value of a property by string N.B. More... | |
void | setPropertyValueFromJson (const std::string &name, const Json::Value &value) override |
Set the value of a property by Json::Value. More... | |
void | splitByTime (std::vector< SplittingInterval > &splitter, std::vector< PropertyManager * > outputs) const override |
Split a run by time (splits the TimeSeriesProperties contained). More... | |
std::unique_ptr< Property > | takeProperty (const size_t index) override |
removes the property from the properties map and returns a pointer to it More... | |
bool | validateProperties () const override |
Validates all the properties in the collection. More... | |
virtual | ~PropertyManager () override |
Virtual destructor. More... | |
Public Member Functions inherited from Mantid::Kernel::IPropertyManager | |
virtual ::Json::Value | asJson (bool withDefaultValues=false) const =0 |
Return the property manager serialized as a json object. More... | |
virtual std::string | asString (bool withDefaultValues=false) const =0 |
Return the property manager serialized as a string. More... | |
virtual void | declareOrReplaceProperty (std::unique_ptr< Property > p, const std::string &doc="")=0 |
Function to declare properties (i.e. store them) More... | |
void | declareProperty (const std::string &name, const char *value, const std::string &doc, IValidator_sptr validator=std::make_shared< NullValidator >(), const unsigned int direction=Direction::Input) |
Specialised version of declareProperty template method to prevent the creation of a PropertyWithValue of type const char* if an argument in quotes is passed (it will be converted to a string). More... | |
void | declareProperty (const std::string &name, const char *value, const unsigned int direction) |
Add a property of string type to the list of managed properties. More... | |
void | declareProperty (const std::string &name, const char *value, IValidator_sptr validator=std::make_shared< NullValidator >(), const std::string &doc=std::string(), const unsigned int direction=Direction::Input) |
Specialised version of declareProperty template method to prevent the creation of a PropertyWithValue of type const char* if an argument in quotes is passed (it will be converted to a string). More... | |
template<typename T > | |
void | declareProperty (const std::string &name, T value, const std::string &doc, const unsigned int direction=Direction::Input) |
Add a property to the list of managed properties with no validator. More... | |
template<typename T > | |
void | declareProperty (const std::string &name, T value, const unsigned int direction) |
Add a property of the template type to the list of managed properties. More... | |
template<typename T > | |
void | declareProperty (const std::string &name, T value, IValidator_sptr validator=std::make_shared< NullValidator >(), const std::string &doc="", const unsigned int direction=Direction::Input) |
Add a property of the template type to the list of managed properties. More... | |
virtual void | declareProperty (std::unique_ptr< Property > p, const std::string &doc="")=0 |
Function to declare properties (i.e. store them) More... | |
virtual bool | existsProperty (const std::string &name) const =0 |
Checks whether the named property is already in the list of managed property. More... | |
virtual void | filterByProperty (const TimeSeriesProperty< bool > &, const std::vector< std::string > &)=0 |
virtual void | filterByTime (const Types::Core::DateAndTime &, const Types::Core::DateAndTime &)=0 |
virtual std::vector< std::string > | getDeclaredPropertyNames () const noexcept=0 |
Get the list of managed property names. More... | |
virtual Property * | getPointerToProperty (const std::string &name) const =0 |
Get a pointer to property by name. More... | |
virtual const std::vector< Property * > & | getProperties () const =0 |
Get the list of managed properties. More... | |
std::vector< Property * > | getPropertiesInGroup (const std::string &group) const |
Get the list of managed properties in a given group. More... | |
virtual TypedValue | getProperty (const std::string &name) const =0 |
Get the value of a property. More... | |
virtual std::string | getPropertyValue (const std::string &name) const =0 |
Get the value of a property as a string. More... | |
virtual size_t | propertyCount () const =0 |
Returns the number of properties under management. More... | |
virtual void | removeProperty (const std::string &name, const bool delproperty=true)=0 |
Removes the property from management. More... | |
virtual void | resetProperties ()=0 |
virtual void | setProperties (const ::Json::Value &jsonValue, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >(), bool createMissing=false)=0 |
Sets all the properties from a json object. More... | |
virtual void | setProperties (const std::string &propertiesJson, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >(), bool createMissing=false)=0 |
Sets all properties from a string. More... | |
virtual void | setPropertiesWithString (const std::string &propertiesString, const std::unordered_set< std::string > &ignoreProperties=std::unordered_set< std::string >())=0 |
Sets all the declared properties from a string. More... | |
IPropertyManager * | setProperty (const std::string &name, const char *value) |
Specialised version of setProperty template method to handle const char *. More... | |
IPropertyManager * | setProperty (const std::string &name, const std::string &value) |
Specialised version of setProperty template method to handle std::string. More... | |
template<typename T > | |
IPropertyManager * | setProperty (const std::string &name, const T &value) |
Templated method to set the value of a PropertyWithValue. More... | |
template<typename T > | |
IPropertyManager * | setProperty (const std::string &name, std::unique_ptr< T > value) |
Templated method to set the value of a PropertyWithValue from a std::unique_ptr. More... | |
void | setPropertyGroup (const std::string &name, const std::string &group) |
Set the group for a given property. More... | |
virtual void | setPropertyOrdinal (const int &index, const std::string &value)=0 |
Set the value of a property by an index. More... | |
void | setPropertySettings (const std::string &name, std::unique_ptr< IPropertySettings > settings) |
virtual void | setPropertyValue (const std::string &name, const std::string &value)=0 |
Sets property value from a string. More... | |
virtual void | setPropertyValueFromJson (const std::string &name, const Json::Value &value)=0 |
Sets property value from a Json::Value. More... | |
virtual void | splitByTime (std::vector< SplittingInterval > &, std::vector< PropertyManager * >) const =0 |
virtual std::unique_ptr< Property > | takeProperty (const size_t index)=0 |
Removes the property from management and returns a pointer to it. More... | |
void | updatePropertyValues (const IPropertyManager &other) |
Update values of the existing properties. More... | |
virtual bool | validateProperties () const =0 |
Validates all the properties in the collection. More... | |
virtual | ~IPropertyManager ()=default |
Private Member Functions | |
void | calculateStep (const DoubleFortranMatrix &J, const DoubleFortranVector &f, const DoubleFortranMatrix &hf, double Delta, DoubleFortranVector &d, double &normd, const NLLS::nlls_options &options) |
Find a correction vector to the parameters. More... | |
void | evalF (const DoubleFortranVector &x, DoubleFortranVector &f) const |
Evaluate the fitting function and calculate the residuals. More... | |
void | evalHF (const DoubleFortranVector &x, const DoubleFortranVector &f, DoubleFortranMatrix &h) const |
Evaluate the Hessian. More... | |
void | evalJ (const DoubleFortranVector &x, DoubleFortranMatrix &J) const |
Evaluate the Jacobian. More... | |
Private Attributes | |
DoubleFortranMatrix | m_A |
NLLS::all_eig_symm_work | m_all_eig_symm_ws |
DoubleFortranVector | m_d_trans |
DoubleFortranMatrix | m_ev |
DoubleFortranVector | m_ew |
API::IFunction_sptr | m_function |
Stored to access IFunction interface in iterate() More... | |
NLLS::nlls_inform | m_inform |
Information about the fitting. More... | |
JacobianImpl1< DoubleFortranMatrix > | m_J |
The Jacobian. More... | |
std::shared_ptr< CostFunctions::CostFuncLeastSquares > | m_leastSquares |
Stored cost function. More... | |
NLLS::nlls_options | m_options |
Options. More... | |
DoubleFortranVector | m_scale |
DoubleFortranVector | m_v |
DoubleFortranVector | m_v_trans |
DoubleFortranVector | m_weights |
Fitting data weights. More... | |
NLLS::NLLS_workspace | m_workspace |
Temporary and helper objects. More... | |
DoubleFortranVector | m_x |
Fitting parameters. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from Mantid::Kernel::PropertyManager | |
static std::string | getInvalidValuesFilterLogName (const std::string &logName) |
Gets the correct log name for the matching invalid values log for a given log name. More... | |
static std::string | getLogNameFromInvalidValuesFilter (const std::string &logName) |
static bool | isAnInvalidValuesFilterLog (const std::string &logName) |
Static Public Attributes inherited from Mantid::Kernel::PropertyManager | |
static const std::string | INVALID_VALUES_SUFFIX = "_invalid_values" |
Protected Member Functions inherited from Mantid::Kernel::PropertyManager | |
Property * | getPointerToPropertyOrdinal (const int &index) const override |
Get a property by an index. More... | |
Property * | getPointerToPropertyOrNull (const std::string &name) const |
Get a property by name. More... | |
Protected Member Functions inherited from Mantid::Kernel::IPropertyManager | |
virtual void | afterPropertySet (const std::string &) |
Override this method to perform a custom action right after a property was set. More... | |
virtual void | clear ()=0 |
Clears all properties under management. More... | |
virtual Property * | getPointerToPropertyOrdinal (const int &index) const =0 |
Get a property by an index. More... | |
template<typename T > | |
T | getValue (const std::string &name) const |
Templated method to get the value of a property. More... | |
template<> | |
MANTID_KERNEL_DLL PropertyManager_sptr | getValue (const std::string &name) const |
template<> | |
MANTID_KERNEL_DLL PropertyManager_const_sptr | getValue (const std::string &name) const |
Protected Attributes inherited from Mantid::API::IFuncMinimizer | |
std::string | m_errorString |
Error string. More... | |
Trust Region minimizer class using the DTRS method of GALAHAD.
Definition at line 24 of file TrustRegionMinimizer.h.
Mantid::CurveFitting::FuncMinimisers::TrustRegionMinimizer::TrustRegionMinimizer | ( | ) |
constructor and destructor
Definition at line 31 of file TrustRegionMinimizer.cpp.
|
private |
Find a correction vector to the parameters.
Solve the trust-region subproblem using the DTRS method from Galahad.
This method needs H to be diagonal, so we need to pre-process
main output d, the soln to the TR subproblem
J | :: The Jacobian. |
f | :: The residuals. |
hf | :: The Hessian (sort of). |
Delta | :: The raduis of the trust region. |
d | :: The output vector of corrections to the parameters giving the solution to the TR subproblem. |
normd | :: The 2-norm of d. |
options | :: The options. |
Definition at line 1271 of file TrustRegionMinimizer.cpp.
References Mantid::CurveFitting::NLLS::allEigSymm(), Mantid::CurveFitting::FortranVector< VectorClass >::allocate(), Mantid::Geometry::d, fabs, Mantid::CurveFitting::FortranVector< VectorClass >::len(), Mantid::CurveFitting::FortranMatrix< MatrixClass >::len2(), m_A, m_d_trans, m_ev, m_ew, m_scale, m_v, m_v_trans, Mantid::CurveFitting::NLLS::matmultInner(), Mantid::CurveFitting::NLLS::multJ(), Mantid::CurveFitting::NLLS::multJt(), n, Mantid::CurveFitting::NLLS::norm2(), and Mantid::CurveFitting::NLLS::nlls_options::scale.
Referenced by iterate().
|
overridevirtual |
Return current value of the cost function.
Return the current value of the cost function.
Implements Mantid::API::IFuncMinimizer.
Definition at line 1353 of file TrustRegionMinimizer.cpp.
References m_leastSquares.
|
private |
Evaluate the fitting function and calculate the residuals.
x | :: The fitting parameters as a fortran 1d array. |
f | :: The output fortran vector with the weighted residuals. |
Definition at line 78 of file TrustRegionMinimizer.cpp.
References Mantid::CurveFitting::FortranVector< VectorClass >::allocate(), Mantid::CurveFitting::FortranVector< VectorClass >::len(), Mantid::Geometry::m, m_function, m_leastSquares, Mantid::CurveFitting::EigenVector::set(), and Mantid::Geometry::x.
Referenced by iterate().
|
private |
Evaluate the Hessian.
x | :: The fitting parameters as a fortran 1d array. |
f | :: The fortran vector with the weighted residuals. |
h | :: The fortran matrix with the Hessian. |
Definition at line 122 of file TrustRegionMinimizer.cpp.
References Mantid::CurveFitting::FortranMatrix< MatrixClass >::allocate(), Mantid::CurveFitting::FortranMatrix< MatrixClass >::len1(), Mantid::CurveFitting::FortranMatrix< MatrixClass >::len2(), m_leastSquares, n, UNUSED_ARG, Mantid::Geometry::x, and Mantid::CurveFitting::EigenMatrix::zero().
Referenced by iterate().
|
private |
Evaluate the Jacobian.
x | :: The fitting parameters as a fortran 1d array. |
J | :: The output fortran matrix with the weighted Jacobian. |
Definition at line 96 of file TrustRegionMinimizer.cpp.
References Mantid::CurveFitting::FortranMatrix< MatrixClass >::allocate(), Mantid::CurveFitting::FortranMatrix< MatrixClass >::len1(), Mantid::CurveFitting::FortranMatrix< MatrixClass >::len2(), Mantid::Geometry::m, m_function, m_J, m_leastSquares, n, and Mantid::Geometry::x.
Referenced by iterate().
|
overridevirtual |
Initialize minimizer, i.e. pass a function to minimize.
Initialise the minimizer.
costFunction | :: The cost function to minimize. Must be the least squares. |
maxIterations | :: Maximum number of iterations that the minimiser will do. |
Implements Mantid::API::IFuncMinimizer.
Definition at line 45 of file TrustRegionMinimizer.cpp.
References Mantid::CurveFitting::FortranVector< VectorClass >::allocate(), Mantid::Kernel::PropertyManager::getProperty(), Mantid::CurveFitting::NLLS::nlls_options::initial_radius, Mantid::CurveFitting::NLLS::NLLS_workspace::initialize(), Mantid::Geometry::m, m_function, m_J, m_leastSquares, m_options, m_workspace, m_x, Mantid::CurveFitting::NLLS::nlls_options::maxit, and n.
|
overridevirtual |
Do one iteration.
Perform a single iteration.
Implements Mantid::API::IFuncMinimizer.
Definition at line 137 of file TrustRegionMinimizer.cpp.
References calculateStep(), evalF(), evalHF(), evalJ(), Mantid::CurveFitting::NLLS::getSvdJ(), Mantid::CurveFitting::FortranVector< VectorClass >::len(), Mantid::Geometry::m, Mantid::API::IFuncMinimizer::m_errorString, m_inform, m_leastSquares, m_options, m_workspace, m_x, Mantid::CurveFitting::NLLS::multJt(), n, Mantid::CurveFitting::NLLS::norm2(), rho, and Mantid::Geometry::X.
|
overridevirtual |
Name of the minimizer.
Implements Mantid::API::IFuncMinimizer.
Definition at line 37 of file TrustRegionMinimizer.cpp.
|
private |
Definition at line 66 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Definition at line 68 of file TrustRegionMinimizer.h.
|
private |
Definition at line 67 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Definition at line 66 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Definition at line 67 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Stored to access IFunction interface in iterate()
Definition at line 51 of file TrustRegionMinimizer.h.
Referenced by evalF(), evalJ(), and initialize().
|
private |
Information about the fitting.
Definition at line 61 of file TrustRegionMinimizer.h.
Referenced by iterate().
|
mutableprivate |
The Jacobian.
Definition at line 57 of file TrustRegionMinimizer.h.
Referenced by evalJ(), and initialize().
|
private |
Stored cost function.
Definition at line 49 of file TrustRegionMinimizer.h.
Referenced by costFunctionVal(), evalF(), evalHF(), evalJ(), initialize(), and iterate().
|
private |
Options.
Definition at line 59 of file TrustRegionMinimizer.h.
Referenced by initialize(), and iterate().
|
private |
Definition at line 69 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Definition at line 67 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Definition at line 67 of file TrustRegionMinimizer.h.
Referenced by calculateStep().
|
private |
Fitting data weights.
Definition at line 53 of file TrustRegionMinimizer.h.
|
private |
Temporary and helper objects.
Definition at line 63 of file TrustRegionMinimizer.h.
Referenced by initialize(), and iterate().
|
private |
Fitting parameters.
Definition at line 55 of file TrustRegionMinimizer.h.
Referenced by initialize(), and iterate().