edu.jhu.bme.smile.commons.optimize
Class LevenbergMarquardt

java.lang.Object
  extended by edu.jhu.bme.smile.commons.optimize.LevenbergMarquardt
All Implemented Interfaces:
OptimizerNDContinuousDifferentiable

public class LevenbergMarquardt
extends java.lang.Object
implements OptimizerNDContinuousDifferentiable

This optimizer uses the Levenberg Marquardt method in order to find the minimum of a function. You can choose an initial starting point to start the optimization from. Code adapted from http://www.mathworks.com/matlabcentral/fx_files/22778/1/content/optimization/seeMe.htm

Author:
Hanlin Wan, Yufeng Guo

Constructor Summary
LevenbergMarquardt()
          Default constructor for LM.
LevenbergMarquardt(int maxIter)
          Constructor to let you set the maximum number of iterations.
 
Method Summary
 double[] getExtrema()
          Gets the extrema that was found.
 int getIterations()
          Gets the number of iterations done.
 java.util.ArrayList<double[][]> getLog()
          Gets the logged data
 void initialize(OptimizableNDContinuousDifferentiable function)
          Initializes the optimizer with a differentiable ND function.
 void initialize(OptimizableNDContinuousDifferentiable function, double[] init)
          Initializes the optimizer with a differentiable ND function.
 void logData(boolean turnOn, int maxSteps)
          Turns on logging for each iteration of the optimization.
 boolean optimize(boolean findMinima)
          Optimizes the function.
 void setGamma(double lamInit, double lamMax)
          Sets the initial and maximum lambda values.
 java.lang.String statusMessage()
          Gets the status message.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LevenbergMarquardt

public LevenbergMarquardt()
Default constructor for LM. Maximum iterations set to 1000.


LevenbergMarquardt

public LevenbergMarquardt(int maxIter)
Constructor to let you set the maximum number of iterations.

Parameters:
maxIter - maximum number of iterations
Method Detail

logData

public void logData(boolean turnOn,
                    int maxSteps)
Turns on logging for each iteration of the optimization.

Parameters:
turnOn - true if logging, false if not
maxSteps - maximum number of steps to log

getLog

public java.util.ArrayList<double[][]> getLog()
Gets the logged data

Returns:
array of logged data

getExtrema

public double[] getExtrema()
Gets the extrema that was found.

Specified by:
getExtrema in interface OptimizerNDContinuousDifferentiable
Returns:
the extrema array of where the extrema is

getIterations

public int getIterations()
Gets the number of iterations done.

Specified by:
getIterations in interface OptimizerNDContinuousDifferentiable
Returns:
number of iterations

setGamma

public void setGamma(double lamInit,
                     double lamMax)
Sets the initial and maximum lambda values. Default values are: initial lambda=0.001; maximum lambda=1000.

Parameters:
lamInit - initial lambda value
lamMax - maximum lambda value

initialize

public void initialize(OptimizableNDContinuousDifferentiable function,
                       double[] init)
Initializes the optimizer with a differentiable ND function. You can specify the starting point.

Parameters:
function - function to minimize
init - starting point

initialize

public void initialize(OptimizableNDContinuousDifferentiable function)
Initializes the optimizer with a differentiable ND function. The starting point is set to halfway between the minimum and maximum domain points in each direction.

Specified by:
initialize in interface OptimizerNDContinuousDifferentiable
Parameters:
function - function to optimize

optimize

public boolean optimize(boolean findMinima)
Optimizes the function.

Specified by:
optimize in interface OptimizerNDContinuousDifferentiable
Parameters:
findMinima - true if minimizing, false if maximizing
Returns:
whether the function was successfully optimized

statusMessage

public java.lang.String statusMessage()
Gets the status message.

Specified by:
statusMessage in interface OptimizerNDContinuousDifferentiable
Returns:
status message