package edu.stanford.nlp.optimization;
/**
* The interface for unconstrained function minimizers.
* <p/>
* Implementations may also vary in their requirements for the
* arguments. For example, implementations may or may not care if the
* <code>initial</code> feasible vector turns out to be non-feasible
* (or null!). Similarly, some methods may insist that objectives
* and/or constraint <code>Function</code> objects actually be
* <code>DiffFunction</code> objects.
*
* @author <a href="mailto:klein@cs.stanford.edu">Dan Klein</a>
* @version 1.0
* @since 1.0
*/
public interface Minimizer<T extends Function> {
/**
* Attempts to find an unconstrained minimum of the objective
* <code>function</code> starting at <code>initial</code>, within
* <code>functionTolerance</code>.
*
* @param function the objective function
* @param functionTolerance a <code>double</code> value
* @param initial a initial feasible point
* @return Unconstrained minimum of function
*/
double[] minimize(T function, double functionTolerance, double[] initial);
double[] minimize(T function, double functionTolerance, double[] initial, int maxIterations);
}