gov.sandia.cognition.learning.algorithm.minimization
Class FunctionMinimizerNelderMead

java.lang.Object
  extended by gov.sandia.cognition.util.AbstractCloneableSerializable
      extended by gov.sandia.cognition.algorithm.AbstractIterativeAlgorithm
          extended by gov.sandia.cognition.algorithm.AbstractAnytimeAlgorithm<ResultType>
              extended by gov.sandia.cognition.learning.algorithm.AbstractAnytimeBatchLearner<EvaluatorType,InputOutputPair<InputType,OutputType>>
                  extended by gov.sandia.cognition.learning.algorithm.minimization.AbstractAnytimeFunctionMinimizer<Vector,Double,Evaluator<? super Vector,Double>>
                      extended by gov.sandia.cognition.learning.algorithm.minimization.FunctionMinimizerNelderMead
All Implemented Interfaces:
AnytimeAlgorithm<InputOutputPair<Vector,Double>>, IterativeAlgorithm, StoppableAlgorithm, AnytimeBatchLearner<Evaluator<? super Vector,Double>,InputOutputPair<Vector,Double>>, BatchLearner<Evaluator<? super Vector,Double>,InputOutputPair<Vector,Double>>, FunctionMinimizer<Vector,Double,Evaluator<? super Vector,Double>>, CloneableSerializable, Serializable, Cloneable

@PublicationReferences(references={@PublicationReference(author={"William H. Press","Saul A. Teukolsky","William T. Vetterling","Brian P. Flannery"},title="Numerical Recipes in C, Second Edition",type=Book,year=1992,pages={411,412},notes="Section 10.5",url="http://www.nrbook.com/a/bookcpdf.php"),@PublicationReference(author="Wikipedia",title="Nelder-Mead method",type=WebPage,year=2008,url="http://en.wikipedia.org/wiki/Nelder-Mead_method")})
public class FunctionMinimizerNelderMead
extends AbstractAnytimeFunctionMinimizer<Vector,Double,Evaluator<? super Vector,Double>>

Implementation of the Downhill Simplex minimization algorithm, also known as the Nelder-Mead method. It finds the minimum of a nonlinear function without using derivative information. In my experience, this method "gives up" easily and the simplex breaks down and gets stuck on complicated nonlinear manifolds. I would recommend using Powell's method instead.

Since:
2.0
Author:
Kevin R. Dixon
See Also:
Serialized Form

Field Summary
static int DEFAULT_MAX_ITERATIONS
          Default max iterations, 4000
static double DEFAULT_TOLERANCE
          Default tolerance, 0.0010
 
Fields inherited from class gov.sandia.cognition.learning.algorithm.minimization.AbstractAnytimeFunctionMinimizer
initialGuess, result, tolerance
 
Fields inherited from class gov.sandia.cognition.learning.algorithm.AbstractAnytimeBatchLearner
data, keepGoing
 
Fields inherited from class gov.sandia.cognition.algorithm.AbstractAnytimeAlgorithm
maxIterations
 
Fields inherited from class gov.sandia.cognition.algorithm.AbstractIterativeAlgorithm
DEFAULT_ITERATION, iteration
 
Constructor Summary
FunctionMinimizerNelderMead()
          Creates a new instance of FunctionMinimizerNelderMead
 
Method Summary
protected  void cleanupAlgorithm()
          Called to clean up the learning algorithm's state after learning has finished.
protected  Vector computeSimplexInputSum()
          Computes the sum of input values in the simplex
protected  boolean initializeAlgorithm()
          Called to initialize the learning algorithm's state based on the data that is stored in the data field.
 ArrayList<DefaultInputOutputPair<Vector,Double>> initializeSimplex(InputOutputPair<Vector,Double> initialPoint, double offsetValue)
          Initializes the simplex about the initial point
protected  boolean step()
          Called to take a single step of the learning algorithm.
 
Methods inherited from class gov.sandia.cognition.learning.algorithm.minimization.AbstractAnytimeFunctionMinimizer
getInitialGuess, getResult, getTolerance, setInitialGuess, setResult, setTolerance
 
Methods inherited from class gov.sandia.cognition.learning.algorithm.AbstractAnytimeBatchLearner
clone, getData, getKeepGoing, learn, setData, setKeepGoing, stop
 
Methods inherited from class gov.sandia.cognition.algorithm.AbstractAnytimeAlgorithm
getMaxIterations, isResultValid, setMaxIterations
 
Methods inherited from class gov.sandia.cognition.algorithm.AbstractIterativeAlgorithm
addIterativeAlgorithmListener, fireAlgorithmEnded, fireAlgorithmStarted, fireStepEnded, fireStepStarted, getIteration, getListeners, removeIterativeAlgorithmListener, setIteration, setListeners
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface gov.sandia.cognition.learning.algorithm.minimization.FunctionMinimizer
learn
 
Methods inherited from interface gov.sandia.cognition.util.CloneableSerializable
clone
 
Methods inherited from interface gov.sandia.cognition.algorithm.AnytimeAlgorithm
getMaxIterations, setMaxIterations
 
Methods inherited from interface gov.sandia.cognition.algorithm.IterativeAlgorithm
addIterativeAlgorithmListener, getIteration, removeIterativeAlgorithmListener
 
Methods inherited from interface gov.sandia.cognition.algorithm.StoppableAlgorithm
isResultValid, stop
 

Field Detail

DEFAULT_TOLERANCE

public static final double DEFAULT_TOLERANCE
Default tolerance, 0.0010

See Also:
Constant Field Values

DEFAULT_MAX_ITERATIONS

public static final int DEFAULT_MAX_ITERATIONS
Default max iterations, 4000

See Also:
Constant Field Values
Constructor Detail

FunctionMinimizerNelderMead

public FunctionMinimizerNelderMead()
Creates a new instance of FunctionMinimizerNelderMead

Method Detail

initializeAlgorithm

protected boolean initializeAlgorithm()
Description copied from class: AbstractAnytimeBatchLearner
Called to initialize the learning algorithm's state based on the data that is stored in the data field. The return value indicates if the algorithm can be run or not based on the initialization.

Specified by:
initializeAlgorithm in class AbstractAnytimeBatchLearner<Evaluator<? super Vector,Double>,InputOutputPair<Vector,Double>>
Returns:
True if the learning algorithm can be run and false if it cannot.

initializeSimplex

public ArrayList<DefaultInputOutputPair<Vector,Double>> initializeSimplex(InputOutputPair<Vector,Double> initialPoint,
                                                                          double offsetValue)
Initializes the simplex about the initial point

Parameters:
initialPoint - Initial point about which to initialize the simplex
offsetValue - Value to use to spread out the vertices of the simplex
Returns:
Simplex

step

protected boolean step()
Description copied from class: AbstractAnytimeBatchLearner
Called to take a single step of the learning algorithm.

Specified by:
step in class AbstractAnytimeBatchLearner<Evaluator<? super Vector,Double>,InputOutputPair<Vector,Double>>
Returns:
True if another step can be taken and false it the algorithm should halt.

cleanupAlgorithm

protected void cleanupAlgorithm()
Description copied from class: AbstractAnytimeBatchLearner
Called to clean up the learning algorithm's state after learning has finished.

Specified by:
cleanupAlgorithm in class AbstractAnytimeBatchLearner<Evaluator<? super Vector,Double>,InputOutputPair<Vector,Double>>

computeSimplexInputSum

protected Vector computeSimplexInputSum()
Computes the sum of input values in the simplex

Returns:
Sum of input values in the simplex