/* * AbstractOptimizer.java * * Created on May 22, 2002, 9:58 PM */ package hep.aida.ref.optimizer; import hep.aida.IFunction; import hep.aida.ext.IDomainConstraint; import hep.aida.ext.IOptimizerConfiguration; import hep.aida.ext.IOptimizerResult; import hep.aida.ext.IVariableSettings; import java.util.Enumeration; import java.util.Hashtable; /** * * Abstract implementation of IOptimizer * * @author Tony Johnson, Victor Serbo, Max Turri * */ public abstract class AbstractOptimizer implements hep.aida.ext.IOptimizer { protected IFunction function = null; protected OptimizerResult result; protected IOptimizerConfiguration configuration; protected IDomainConstraint domainConstraint; private Hashtable varSetHash = new Hashtable(); /** * Creates a new instance of AbstractOptimizer * */ public AbstractOptimizer() { } /** * Get the IOptimizer configuration * @return The configuration. * */ public IOptimizerConfiguration configuration() { return configuration; } /** * Perform the optimization. * @return <code>true</code> if the optimization was * successfull, <code>false</code> otherwise. * */ public abstract void optimize(); /** * Reset the function, the domain of constraints and the internal configuration. * */ public void reset() { function = null; } /** * Get the optimization results. * @return The result. * */ public IOptimizerResult result() { return (IOptimizerResult)result; } /** * Set the internal configuration of the Optimizer. * @param configuration The configuration. * @return <code>true</code> if the configuration was set succesfully, * <code>false</code> otherwise. * */ public void setConfiguration(IOptimizerConfiguration configuration) { this.configuration = configuration; } /** * Set the domain of constraints for the IOptimizer. * If a domain of constraints already exists it will be overwritten. * @param iDomainConstraint The domain of constraints. * @return <code>true</code> if the IDomainConstraint is set succesfully, * <code>false</code> otherwise. * */ public void setConstraints(hep.aida.ext.IDomainConstraint iDomainConstraint) { domainConstraint = iDomainConstraint; } /** * Set the IFunction to be optimized. * When setting a function the current * configuration is reset. * @param iFunction The IFunction to be optimized. * @return <code>true</code> if the IFunction is set succesfully, * <code>false</code> otherwise. * */ public void setFunction(hep.aida.IFunction iFunction) { function = iFunction; String[] varNames = function.variableNames(); for ( int i = 0; i < varNames.length; i++ ) variableSettings(varNames[i]); } public String[] listVariableSettings() { int size = varSetHash.size(); String[] varNames = new String[size]; Enumeration e = varSetHash.keys(); for (int i = 0; e.hasMoreElements(); i++) varNames[i] = (String) e.nextElement(); return varNames; } public void resetVariableSettings() { varSetHash.clear(); } public IVariableSettings variableSettings(String name) { if ( varSetHash.containsKey(name) ) return (IVariableSettings) varSetHash.get(name); IVariableSettings varSet = new VariableSettings(name); varSetHash.put(name,varSet); return varSet; } public boolean acceptsConstraints() { return false; } public boolean canCalculateContours() { return false; } public double[][] calculateContour(String par1, String par2, int npts, double nSigmas) { throw new UnsupportedOperationException(); } }