package vroom.common.heuristics.vls;
import vroom.common.heuristics.IInitialization;
import vroom.common.utilities.optimization.IInstance;
import vroom.common.utilities.optimization.IParameters;
import vroom.common.utilities.optimization.ISolution;
/**
* <code>DummyInitialization</code> is an implementation of {@link IInitialization} that only generate a new initial
* mSolution when certain conditions are met, and otherwise return the current best GRASP mSolution.
* <p/>
* In particular, it can be used to generate a new mSolution only if a given number of non-improving optimization has
* occurred.
* <p/>
* This class can be useful to use the VLS framework as a pure ILS or ELS procedure, given that an initial mSolution is
* provided
* <p/>
* Note that this implementation will <b>always</b> return a clone of the current best GRASP mSolution Creation date:
* May 3, 2010 - 11:54:17 AM<br/>
*
* @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 class DummyInitialization<S extends ISolution> implements IInitialization<S> {
protected final IInitialization<S> mInitialization;
/**
* Creates a new <code>DummyInitialization</code>
*
* @param initialization
* the actual {@link IInitialization} instance to which initialization should be delegated.
*/
public DummyInitialization(IInitialization<S> initialization) {
mInitialization = initialization;
}
/**
* Creates a new <code>DummyInitialization</code> with no initialization delegate
*/
public DummyInitialization() {
this(null);
}
@SuppressWarnings("unchecked")
@Override
public S newSolution(IVLSState<S> state, IInstance instance, IParameters params) {
return (S) state.getBestSolution(VLSPhase.GRASP).clone();
}
}