package vrp2013.algorithms;
import vroom.common.heuristics.ConstraintHandler;
import vroom.common.heuristics.cw.CWParameters;
import vroom.common.heuristics.cw.algorithms.RandomizedSavingsHeuristic;
import vroom.common.heuristics.cw.kernel.ClarkeAndWrightHeuristic;
import vroom.common.modeling.dataModel.INodeVisit;
import vroom.common.modeling.dataModel.IVRPInstance;
import vroom.common.modeling.util.IRoutePool;
import vroom.common.modeling.util.ISolutionFactory;
import vrp2013.util.VRPSolution;
/**
* The class <code>CW</code> is a convenience class that uses an instance of {@link ClarkeAndWrightHeuristic} to create
* initial solutions
* <p>
* Creation date: 09/05/2013 - 10:45:23 AM
*
* @author Victor Pillac, <a href="http://www.nicta.com.au">National ICT Australia</a>, <a
* href="http://www.victorpillac.com">www.victorpillac.com</a>
* @version 1.0
*/
public class CW implements IVRPOptimizationAlgorithm {
private VRPSolution mLastSolution;
private final IVRPInstance mInstance;
private final ISolutionFactory mSolutionFactory;
private final ClarkeAndWrightHeuristic<VRPSolution> mCWHeuristic;
/**
* Creates a new <code>CW</code>
*
* @param instance
* @param solFactory
* @param constraintHandler
*/
public CW(IVRPInstance instance, ISolutionFactory solFactory,
ConstraintHandler<VRPSolution> constraintHandler) {
mInstance = instance;
mSolutionFactory = solFactory;
CWParameters cwParams = new CWParameters();
cwParams.setDefaultValues();
cwParams.set(CWParameters.RANDOM_SEED, 50l);
mCWHeuristic = new ClarkeAndWrightHeuristic<>(cwParams, RandomizedSavingsHeuristic.class,
constraintHandler);
mCWHeuristic.setSolutionFactory(getSolutionFactory());
}
@Override
public VRPSolution call() {
mLastSolution = mCWHeuristic.newSolution(null, getInstance(), null);
return mLastSolution;
}
@Override
public void dispose() {
}
@Override
public IRoutePool<INodeVisit> getRoutePool() {
return null;
}
@Override
public VRPSolution getBestSolution() {
return mLastSolution;
}
@Override
public IVRPInstance getInstance() {
return mInstance;
}
@Override
public int getIterations() {
return 0;
}
@Override
public ISolutionFactory getSolutionFactory() {
return mSolutionFactory;
}
/**
* Update the random seed of the CW heuristic
*
* @param seed
*/
public void updateSeed(long seed) {
mCWHeuristic.updateSeed(seed);
}
/**
* Sets the solution factory used in the CW heuristic
*
* @param solFactory
*/
public void setSolutionFactory(ISolutionFactory solFactory) {
mCWHeuristic.setSolutionFactory(solFactory);
}
}