/**
*
*/
package vroom.common.heuristics.vls.vrp;
import vroom.common.heuristics.ConstraintHandler;
import vroom.common.heuristics.IInitialization;
import vroom.common.heuristics.cw.CWParameters;
import vroom.common.heuristics.cw.kernel.ClarkeAndWrightHeuristic;
import vroom.common.heuristics.cw.kernel.ISavingsAlgorithm;
import vroom.common.heuristics.vls.IVLSState;
import vroom.common.modeling.dataModel.IRoute;
import vroom.common.modeling.dataModel.IVRPInstance;
import vroom.common.modeling.dataModel.IVRPSolution;
import vroom.common.modeling.util.ISolutionFactory;
import vroom.common.utilities.optimization.IInstance;
import vroom.common.utilities.optimization.IParameters;
/**
* <code>CWInitialization</code> is an implementation of {@link IInitialization}
* relying on a {@link ClarkeAndWrightHeuristic} to build a routing plan.
* <p>
* Creation date: Apr 30, 2010 - 11:29:11 AM
*
* @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 CWInitialization<S extends IVRPSolution<?>> implements
IInitialization<S> {
/** The CW heuristic used in this instance */
private final ClarkeAndWrightHeuristic<S> mCW;
/**
* Getter for the CW heuristic
*
* @return the Clark and Wright heuristic used in this instance
*/
public ClarkeAndWrightHeuristic<S> getCW() {
return mCW;
}
/** The parameters for the CW heuristic */
private final CWParameters mParameters;
/**
* Creates a new <code>CWInitialization</code> from an existing CW heuristic
*
* @param cW
* @param parameters
*/
public CWInitialization(ClarkeAndWrightHeuristic<S> cW,
CWParameters parameters) {
mCW = cW;
mParameters = parameters;
}
/**
* Creates a new <code>CWInitialization</code> with a default configuration.
*
* @param routeClazz
* the implementation of {@link IRoute} to be used
* @param savingsAlgoClass
* the algorithm to be used in the CW procedure
*/
public CWInitialization(Class<? extends ISolutionFactory> solutionFactory,
Class<? extends ISavingsAlgorithm<S>> savingsAlgoClass) {
mParameters = new CWParameters();
mParameters.set(CWParameters.SOLUTION_FACTORY_CLASS, solutionFactory);
mCW = new ClarkeAndWrightHeuristic<S>(mParameters, savingsAlgoClass,
new ConstraintHandler<S>());
}
/*
* (non-Javadoc)
*
* @see
* vroom.common.heuristics.vls.IInitialization#newSolution(vroom.common.
* heuristics.vls.IVLSState, vroom.common.heuristics.IInstance)
*/
@Override
public S newSolution(IVLSState<S> state, IInstance instance,
IParameters params) {
getCW().initialize((IVRPInstance) instance);
getCW().run();
return getCW().getSolution();
}
@Override
public String toString() {
return String.format("%s (%s)", this.getClass().getSimpleName(),
getCW());
}
}