
/**
 * Annealable.java - necessary function for use with SimulatedAnnealer
 *
 * Created: Thu May 10 14:50:34 2001
 *
 * @author Todd W. Neller
 * @version 1.1
 */

public interface Annealable extends Cloneable { 
    
    /**
     * <code>next</code> - transitions state to the next state to
     * consider in simulated annealing.  Note: The next state may not
     * necessarily be retained.  If reject() is called, an Annealable object
     * should retain enough information to undo a single transition.  */
    void next();


    /**
     * <code>reject</code> - rejects the transition just made.  The
     * Annealable object retains enough information to undo a single
     * next() transition.  Each reject() call should have no less than
     * one intermediate next() call.
     * */
    void reject();

    /**
     * <code>e</code> - Energy level - the quantity being minimized.
     * This value should be approximately proportional to the utility
     * of a given configuration.
     *
     * @return a <code>double</code> value */
    double energy();

  Object clone();

}// Annealable


