package vroom.common.utilities.optimization;
import vroom.common.utilities.Constants;
/**
* <code>IMove</code> is a general description for <em>moves</em> as used in neighborhood exploration.
* <p>
* It extends {@link Comparable} and implementations should ensure that {@link #compareTo(IMove)} returns a positive
* value if this move will generate a greater improvement.
* </p>
* <p>
* Creation date: Jun 18, 2010 - 1:28:36 PM
*
* @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a
* href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a
* href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a>
* @version 1.0
*/
public interface IMove extends Comparable<IMove> {
/**
* Getter for the objective function delta.
* <p>
* Positive values represent improvements, negative values deterioration
* </p>
*
* @return the variation in the objective function resulting from this move
* @see #isImproving()
*/
public double getImprovement();
/**
* Setter for the objective function delta.
* <p>
* Positive values represent improvements, negative values deterioration
* </p>
*
* @return the variation in the objective function resulting from this move
* @see #isImproving()
*/
public void setImprovement(double imp);
/**
* Test if this move is improving
*
* @return <code>true</code> if the improvement resulting from this move is higher that the zero tolerance defined
* in {@link Constants#getZeroTolerance()}
*/
public boolean isImproving();
/**
* Move description
*
* @return a name for this move
*/
public String getMoveName();
}