package vroom.common.heuristics.vls;
import vroom.common.utilities.optimization.IInstance;
import vroom.common.utilities.optimization.IParameters;
import vroom.common.utilities.optimization.ISolution;
/**
* <code>IPertubation</code> is the interface for all classes that will introduce some perturbation/variability/mutation
* in a mSolution.
* <p/>
* Implementations should declare a constructor taking an instance of {@link VLSGlobalParameters} as unique argument
* <p>
* Creation date: 26-Abr-2010 10:11:53 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 IVLSPertubation<S extends ISolution> {
/**
* Perturb a mSolution.
* <p/>
* This method should introduce some random changes in the given mSolution
*
* @param state
* the current state of the local search
* @param instance
* the current instance
* @param mSolution
* The mSolution to be pertubated
* @param params
* optional parameters
*/
public void pertub(IVLSState<S> state, IInstance instance, S solution, IParameters params);
}