/**
*
* User level interface to the optimizer.
*
* @author Tony Johnson, Victor Serbo, Max Turri
*
*/
package hep.aida.ext;
import hep.aida.IFunction;
public interface IOptimizer {
/**
* Set the IFunction to be optimized.
* When setting a function the current
* configuration is reset.
* @param function The IFunction to be optimized.
* @return <code>true</code> if the IFunction is set succesfully,
* <code>false</code> otherwise.
*
*/
public void setFunction( IFunction function ) throws IllegalArgumentException;
/**
* Set the domain of constraints for the IOptimizer.
* If a domain of constraints already exists it will be overwritten.
* @param domainConstraint The domain of constraints.
* @return <code>true</code> if the IDomainConstraint is set succesfully,
* <code>false</code> otherwise.
*
*/
public void setConstraints( IDomainConstraint domainConstraint ) throws IllegalArgumentException;
/**
* Perform the optimization.
* @return <code>true</code> if the optimization was
* successfull, <code>false</code> otherwise.
*
*/
public void optimize();
/**
* Get the optimization results.
* @return The result.
*
*/
public IOptimizerResult result();
/**
* Reset the function, the domain of constraints and the internal configuration.
*
*/
public void reset();
/**
* Get the IOptimizer configuration
* @return The configuration.
*
*/
public IOptimizerConfiguration configuration();
/**
* Set the internal configuration of the Optimizer.
* @param config The configuration.
*
*/
public void setConfiguration( IOptimizerConfiguration config ) throws IllegalArgumentException;
/**
* Get the IVariableSettings corresponding to a give variable.
* If the IVariableSettings does not exist, a new one is created.
* @param name The variable's name.
* @return The corresponging IVariableSettings
*
*/
public IVariableSettings variableSettings(String name);
/**
* Get the list of the names of the IVariableSettings defined.
* @return The list of the names.
*
*/
public String[] listVariableSettings();
/**
* Reset all variable settings.
*
*/
public void resetVariableSettings();
/**
* Check if this IOptimizer accept constraints.
* @return <code>true</code> if the IOptimizer accepts contraints.
* <code>false</code> otherwise.
*
*/
public boolean acceptsConstraints();
/**
* Check if this IOptimizer can calculate contours.
* @return <code>true</code> if the IOptimizer can calculate contours.
* <code>false</code> otherwise.
*
*/
public boolean canCalculateContours();
/**
* Calculate the contour for two given parameters. The number of points and the number of sigmas
* can also be specified.
* @param par1 The name of the first parameter.
* @param par2 The name of the second parameter.
* @param npts The number of points on the contour.
* @param nSigmas The number of sigmas for this contour.
* @return A double array of dimension [2][npts]. For each point on the contour the value of (par1,par2) is returned.
*
*/
public double[][] calculateContour(String par1, String par2, int npts, double nSigmas);
}