OptimizationLogicFFM

scalation.optimization.quasi_newtonC.OptimizationLogicFFM

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.

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Known subtypes

Members list

Value members

Abstract methods

def evaluate(instance: MemorySegment, x: MemorySegment, g: MemorySegment, n: Int, step: Double): Double

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.

Concrete methods

def progress(instance: MemorySegment, x: MemorySegment, g: MemorySegment, fx: Double, xnorm: Double, gnorm: Double, step: Double, n: Int, k: Int, ls: Int): Int

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.