The OptimizationLogicWrapper trait specifies the requirements for the logic to be used in each step of a L-BFGS variable minimization done by the lbfgsMain method of the LBFGS_FFM object. The methods provided in this trait are called as a MethodHandle by the L-BFGS C library shared object, such that pointer arguments are declared with the MemorySegment type.
Classes extending this trait must implement two methods: evaluate and progress. The evaluate method is used to evaluate the gradients and objective function for a given state of the variables. The progress method is used to report on how the minimization process is progressing.
Evaluates the gradients and objective function according to the state of the variables during the minimization process.
Evaluates the gradients and objective function according to the state of the variables during the minimization process.
Value parameters
g
Return location for the gradient vector that will be calculated with the current variables (this parameter is used to RETURN values, NOT to RECEIVE them). Empty MemorySegment with capacity for n elements with the ValueLayout of JAVA_DOUBLE.
instance
User data provided by each call of the lbfgsMain method of the LBFGS_FFM object. Can have any MemoryLayout defined by the user as long as the same layout is utilized in the progress method implementation for the class extending this trait and on the corresponding lbfgsMain calls from the LBFGS_FFM object that relies on this OptimizationLogicWrapper.
n
The number of variables. Also, the number of elements in the MemorySegment parameters x and g.
step
Current step used by the line search routine.
x
Current values of the variables presented in a MemorySegment containing n elements with the ValueLayout of JAVA_DOUBLE.
Attributes
Returns
Double Value of the objective function computed with the given variables.
Receives the progress of each iteration of the optimization process. Can be used to display or record said progress and to determine if the optimization should continue or be cancelled.
Receives the progress of each iteration of the optimization process. Can be used to display or record said progress and to determine if the optimization should continue or be cancelled.
The default implementation of this method always returns 0 and prints the iteration, function value, the value of each variable, the euclidean norms of the variables and the gradient vector and the step used in the line search in this iteration.
Value parameters
fx
Current value of the objective function.
g
Current value of the gradient vector presented in a MemorySegment containing n elements with the ValueLayout of JAVA_DOUBLE.
gnorm
Euclidean norm of the gradient vector.
instance
User data provided by each call of the lbfgsMain method of the LBFGS_FFM object. Can have any MemoryLayout defined by the user as long as the same layout is utilized in the evaluate method implementation for the class extending this trait and on the corresponding lbfgsMain calls from the LBFGS_FFM object that relies on this OptimizationLogicWrapper.
k
Iteration count.
ls
The number of evaluations called for this iteration.
n
The number of variables. Also, the number of elements in the MemorySegment parameters x and g.
step
Step used by the line search routine in this iteration.
x
Current values of the variables presented in a MemorySegment containing n elements with the ValueLayout of JAVA_DOUBLE.
xnorm
Euclidean norm of the variables.
Attributes
Returns
int Determines if optimization should continue. Zero continues optimization. Non-zero values cancel the optimization.