package vroom.common.utilities.optimization;
import vroom.common.utilities.ILockable;
/**
* <code>ISolution</code> is an interface for classes representing a solution of a problem.
* <p>
* Creation date: 26-Abr-2010 10:11:55 a.m. * @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 ISolution extends ILockable, Cloneable {
/**
* Getter for the fitness value of this solution.
*
* @return the fitness value
*/
public Comparable<?> getObjective();
/**
* Getter for the objective value of this solution.
*
* @return a <code>double</code> representing the objective value of this solution
*/
public double getObjectiveValue();
/**
* Cloning of this solution
* <p/>
* The resulting clone should not share any reference with this instance.
*
* @return a hard copy of this instance
*/
public ISolution clone();
/**
* Hash this solution into an integer.
* <p>
* At the difference of {@link #hashCode()} this method should return a different int whenever this solution is
* modified
* </p>
*
* @return an hash for the current state of this solution
*/
public int hashSolution();
}