finMath lib documentation
net.finmath.optimizer

• All Implemented Interfaces:
Serializable, Cloneable, StochasticOptimizerInterface

public abstract class StochasticLevenbergMarquardtAD
extends StochasticLevenbergMarquardt
This class implements a stochastic Levenberg Marquardt non-linear least-squares fit algorithm.

The design avoids the need to define the objective function as a separate class. The objective function is defined by overriding a class method, see the sample code below.

The Levenberg-Marquardt solver is implemented in using multi-threading. The calculation of the derivatives (in case a specific implementation of setDerivatives(RandomVariableInterface[] parameters, RandomVariableInterface[][] derivatives) is not provided) may be performed in parallel by setting the parameter numberOfThreads.

To use the solver inherit from it and implement the objective function as setValues(RandomVariableInterface[] parameters, RandomVariableInterface[] values) where values has to be set to the value of the objective functions for the given parameters.
You may also provide an a derivative for your objective function by additionally overriding the function setDerivatives(RandomVariableInterface[] parameters, RandomVariableInterface[][] derivatives), otherwise the solver will calculate the derivative via finite differences.

To reject a point, it is allowed to set an element of values to Double.NaN in the implementation of setValues(RandomVariableInterface[] parameters, RandomVariableInterface[] values). Put differently: The solver handles NaN values in values as an error larger than the current one (regardless of the current error) and rejects the point.
Note, however, that is is an error if the initial parameter guess results in an NaN value. That is, the solver should be initialized with an initial parameter in an admissible region.

The following simple example finds a solution for the equation
 0.0 * x1 + 1.0 * x2 = 5.0 2.0 * x1 + 1.0 * x2 = 10.0
 
LevenbergMarquardt optimizer = new LevenbergMarquardt() {
// Override your objective function here
public void setValues(RandomVariableInterface[] parameters, RandomVariableInterface[] values) {
values[0] = parameters[0] * 0.0 + parameters[1];
values[1] = parameters[0] * 2.0 + parameters[1];
}
};

// Set solver parameters
optimizer.setInitialParameters(new RandomVariableInterface[] { 0, 0 });
optimizer.setWeights(new RandomVariableInterface[] { 1, 1 });
optimizer.setMaxIteration(100);
optimizer.setTargetValues(new RandomVariableInterface[] { 5, 10 });

optimizer.run();

RandomVariableInterface[] bestParameters = optimizer.getBestFitParameters();


See the example in the main method below.

The class can be initialized to use a multi-threaded valuation. If initialized this way the implementation of setValues must be thread-safe. The solver will evaluate the gradient of the value vector in parallel, i.e., use as many threads as the number of parameters.

Note: Iteration steps will be logged (java.util.logging) with LogLevel.FINE
Version:
1.6
Author:
Christian Fries
Serialized Form

• ### Nested classes/interfaces inherited from class net.finmath.optimizer.StochasticLevenbergMarquardt

StochasticLevenbergMarquardt.RegularizationMethod
• ### Nested classes/interfaces inherited from interface net.finmath.optimizer.StochasticOptimizerInterface

StochasticOptimizerInterface.ObjectiveFunction
• ### Constructor Summary

Constructors
Constructor and Description
StochasticLevenbergMarquardtAD(StochasticLevenbergMarquardt.RegularizationMethod regularizationMethod, RandomVariableInterface[] initialParameters, RandomVariableInterface[] targetValues, RandomVariableInterface[] parameterSteps, int maxIteration, double errorTolerance, ExecutorService executorService)
StochasticLevenbergMarquardtAD(StochasticLevenbergMarquardt.RegularizationMethod regularizationMethod, RandomVariableInterface[] initialParameters, RandomVariableInterface[] targetValues, RandomVariableInterface[] parameterSteps, int maxIteration, double errorTolerance, ExecutorService executorService, boolean isGradientValuationParallel)
• ### Method Summary

All Methods
Modifier and Type Method and Description
protected void prepareAndSetDerivatives(RandomVariableInterface[] parameters, RandomVariableInterface[] values, RandomVariableInterface[][] derivatives)
protected void prepareAndSetValues(RandomVariableInterface[] parameters, RandomVariableInterface[] values)
• ### Methods inherited from class net.finmath.optimizer.StochasticLevenbergMarquardt

clone, getBestFitParameters, getCloneWithModifiedTargetValues, getCloneWithModifiedTargetValues, getIterations, getLambda, getLambdaDivisor, getLambdaMultiplicator, getMeanSquaredError, getRootMeanSquaredError, main, run, setDerivatives, setErrorMeanSquaredCurrent, setLambda, setLambdaDivisor, setLambdaMultiplicator, setValues
• ### Methods inherited from class java.lang.Object

equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
• ### Constructor Detail

public StochasticLevenbergMarquardtAD(StochasticLevenbergMarquardt.RegularizationMethod regularizationMethod,
RandomVariableInterface[] initialParameters,
RandomVariableInterface[] targetValues,
RandomVariableInterface[] parameterSteps,
int maxIteration,
double errorTolerance,
ExecutorService executorService,
boolean isGradientValuationParallel)

public StochasticLevenbergMarquardtAD(StochasticLevenbergMarquardt.RegularizationMethod regularizationMethod,
RandomVariableInterface[] initialParameters,
RandomVariableInterface[] targetValues,
RandomVariableInterface[] parameterSteps,
int maxIteration,
double errorTolerance,
ExecutorService executorService)
• ### Method Detail

• #### prepareAndSetValues

protected void prepareAndSetValues(RandomVariableInterface[] parameters,
RandomVariableInterface[] values)
throws SolverException
Overrides:
prepareAndSetValues in class StochasticLevenbergMarquardt
Throws:
SolverException
• #### prepareAndSetDerivatives

protected void prepareAndSetDerivatives(RandomVariableInterface[] parameters,
RandomVariableInterface[] values,
RandomVariableInterface[][] derivatives)
throws SolverException
Overrides:
prepareAndSetDerivatives in class StochasticLevenbergMarquardt
Throws:
SolverException