18#ifndef itkLBFGS2Optimizerv4_h
19#define itkLBFGS2Optimizerv4_h
22#include "ITKOptimizersv4Export.h"
88extern ITKOptimizersv4_EXPORT std::ostream &
143template <
typename TInternalComputationValueType>
151#if !defined(ITK_LEGACY_REMOVE)
153 static constexpr LineSearchMethodEnum LINESEARCH_DEFAULT = LineSearchMethodEnum::LINESEARCH_DEFAULT;
154 static constexpr LineSearchMethodEnum LINESEARCH_MORETHUENTE = LineSearchMethodEnum::LINESEARCH_MORETHUENTE;
156 LineSearchMethodEnum::LINESEARCH_BACKTRACKING_ARMIJO;
157 static constexpr LineSearchMethodEnum LINESEARCH_BACKTRACKING = LineSearchMethodEnum::LINESEARCH_BACKTRACKING;
159 LineSearchMethodEnum::LINESEARCH_BACKTRACKING_WOLFE;
161 LineSearchMethodEnum::LINESEARCH_BACKTRACKING_STRONG_WOLFE;
170 static_assert(std::is_same<TInternalComputationValueType, double>::value,
171 "LBFGS2Optimizerv4Template only supports double precision");
464 itkSetMacro(EstimateScalesAtEachIteration,
bool);
465 itkGetConstReferenceMacro(EstimateScalesAtEachIteration,
bool);
466 itkBooleanMacro(EstimateScalesAtEachIteration);
513 class PrivateImplementationHolder;
530 itkWarningMacro(
"Not supported. Please use LBFGS specific convergence methods.");
535 itkWarningMacro(
"Not supported. Please use LBFGS specific convergence methods.");
537 const PrecisionType &
540 itkWarningMacro(
"Not supported. Please use LBFGS specific convergence methods.");
548 itkWarningMacro(
"LBFGS2Optimizerv4Template does not implement single step advance");
558#ifndef ITK_MANUAL_INSTANTIATION
559# include "itkLBFGS2Optimizerv4.hxx"
std::string StopConditionReturnStringType
OptimizerParameters< TInternalComputationValueType > ParametersType
OptimizerParameters< TInternalComputationValueType > ScalesType
GradientDescentOptimizerv4Template()
Control indentation during Print() invocation.
@ LINESEARCH_BACKTRACKING_STRONG_WOLFE
@ LINESEARCH_BACKTRACKING
@ LINESEARCH_BACKTRACKING_ARMIJO
@ LINESEARCH_BACKTRACKING_WOLFE
Wrap of the libLBFGS algorithm for use in ITKv4 registration framework. LibLBFGS is a translation of ...
int GetHessianApproximationAccuracy() const
int GetDeltaConvergenceDistance() const
void SetMachinePrecisionTolerance(PrecisionType xtol)
void SetMaximumLineSearchStep(PrecisionType step)
PrecisionType GetWolfeCoefficient() const
double m_CurrentGradientNorm
~LBFGS2Optimizerv4Template() override
void SetDeltaConvergenceTolerance(PrecisionType tol)
int GetMaximumIterations() const
PrecisionType GetDeltaConvergenceTolerance() const
LBFGS2Optimizerv4Template Self
int GetOrthantwiseEnd() const
void StartOptimization(bool doOnlyInitialization=false) override
PrecisionType GetMaximumLineSearchStep() const
bool m_EstimateScalesAtEachIteration
PrecisionType GetMachinePrecisionTolerance() const
SmartPointer< Self > Pointer
StopConditionReturnStringType GetStopConditionDescription() const override
void SetOrthantwiseStart(int start)
LineSearchMethodEnum GetLineSearch() const
PrecisionType GetMinimumLineSearchStep() const
int GetOrthantwiseStart() const
SizeValueType GetNumberOfIterations() const override
void SetHessianApproximationAccuracy(int m)
void SetLineSearchAccuracy(PrecisionType ftol)
void SetDeltaConvergenceDistance(int nPast)
lbfgs_parameter_t m_Parameters
void ResumeOptimization() override
LBFGS2Optimizerv4Enums::LineSearchMethod LineSearchMethodEnum
typename Superclass::ParametersType ParametersType
PrecisionType GetLineSearchGradientAccuracy() const
void SetMinimumConvergenceValue(PrecisionType) override
void SetConvergenceWindowSize(SizeValueType) override
typename Superclass::MetricType MetricType
int GetMaximumLineSearchEvaluations() const
PrecisionType GetLineSearchAccuracy() const
void SetLineSearchGradientAccuracy(PrecisionType gtol)
void SetNumberOfIterations(const SizeValueType _arg) override
void AdvanceOneStep() override
typename Superclass::ScalesType ScalesType
const PrecisionType & GetConvergenceValue() const override
LBFGS2Optimizerv4Template()
void SetOrthantwiseEnd(int end)
PrecisionType GetSolutionAccuracy() const
void PrintSelf(std::ostream &os, Indent indent) const override
SmartPointer< const Self > ConstPointer
PrecisionType GetOrthantwiseCoefficient() const
double m_CurrentParameterNorm
static int UpdateProgressCallback(void *instance, const PrecisionType *x, const PrecisionType *g, const PrecisionType fx, const PrecisionType xnorm, const PrecisionType gnorm, const PrecisionType step, int n, int k, int ls)
void SetLineSearch(const LineSearchMethodEnum &linesearch)
void SetMaximumIterations(int maxIterations)
int m_CurrentNumberOfEvaluations
void SetSolutionAccuracy(PrecisionType epsilon)
void SetOrthantwiseCoefficient(PrecisionType orthant_c)
GradientDescentOptimizerv4Template< TInternalComputationValueType > Superclass
void SetMinimumLineSearchStep(PrecisionType step)
void SetWolfeCoefficient(PrecisionType wc)
PrecisionType EvaluateCost(const PrecisionType *x, PrecisionType *g, const int n, const PrecisionType step)
int UpdateProgress(const PrecisionType *x, const PrecisionType *g, const PrecisionType fx, const PrecisionType xnorm, const PrecisionType gnorm, const PrecisionType step, int n, int k, int ls)
void SetMaximumLineSearchEvaluations(int n)
static PrecisionType EvaluateCostCallback(void *instance, const PrecisionType *x, PrecisionType *g, const int n, const PrecisionType step)
ObjectToObjectMetricBaseTemplate< TInternalComputationValueType > MetricType
std::string StopConditionReturnStringType
Implements transparent reference counting.
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
unsigned long SizeValueType
ITKCommon_EXPORT std::ostream & operator<<(std::ostream &out, typename AnatomicalOrientation::CoordinateEnum value)
LBFGS2Optimizerv4Template< double > LBFGS2Optimizerv4