/**
*
*/
package vroom.common.heuristics.vls;
import static vroom.common.heuristics.vls.VLSGlobalParameters.INITIALIZATION_CLASS;
import static vroom.common.heuristics.vls.VLSGlobalParameters.LOCAL_SEARCH_CLASS;
import static vroom.common.heuristics.vls.VLSGlobalParameters.OPTIMIZATION_DIRECTION;
import static vroom.common.heuristics.vls.VLSGlobalParameters.PARAM_INIT;
import static vroom.common.heuristics.vls.VLSGlobalParameters.PARAM_LOCALSEARCH;
import static vroom.common.heuristics.vls.VLSGlobalParameters.PARAM_PERTUBATION;
import static vroom.common.heuristics.vls.VLSGlobalParameters.PERTUBATION_CLASS;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import vroom.common.heuristics.cw.algorithms.BasicSavingsHeuristic;
import vroom.common.heuristics.vls.vrp.CWInitialization;
import vroom.common.heuristics.vls.vrp.PSwapPerturbation;
import vroom.common.heuristics.vns.VariableNeighborhoodSearch;
import vroom.common.heuristics.vns.VariableNeighborhoodSearch.VNSVariant;
import vroom.common.heuristics.vrp.SwapNeighborhood;
import vroom.common.heuristics.vrp.TwoOptNeighborhood;
import vroom.common.modeling.dataModel.IVRPInstance;
import vroom.common.modeling.dataModel.IVRPSolution;
import vroom.common.modeling.dataModel.Node;
import vroom.common.modeling.util.CircularInstanceGenerator;
import vroom.common.modeling.util.DefaultSolutionFactory;
import vroom.common.utilities.Stopwatch;
import vroom.common.utilities.logging.LoggerHelper;
import vroom.common.utilities.logging.Logging;
import vroom.common.utilities.optimization.ILocalSearch;
import vroom.common.utilities.optimization.INeighborhood;
import vroom.common.utilities.optimization.ISolution;
import vroom.common.utilities.optimization.OptimizationSense;
import vroom.common.utilities.optimization.SimpleParameters;
/**
* <code>VersatileLocalSearchTest</code> is a test class for {@link VersatileLocalSearch}
* <p>
* Creation date: Apr 28, 2010 - 3:44:38 PM
*
* @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 VersatileLocalSearchVRPTest {
private static final int NUM_NODES = 20;
private ILocalSearch<IVRPSolution<?>> mLS;
private List<INeighborhood<IVRPSolution<?>, ?>> mNeighborhoods;
private List<Node> mNodes;
private IVRPInstance mInstance;
private VLSGlobalParameters mParameters;
protected VersatileLocalSearch<ISolution> mVLS;
@SuppressWarnings({ "unchecked", "rawtypes" })
@Before
public void setUp() throws Exception {
mNodes = new ArrayList<Node>(NUM_NODES + 2);
mInstance = CircularInstanceGenerator.newCircularInstance(100, mNodes, 10);
mParameters = new VLSGlobalParameters();
mParameters.set(INITIALIZATION_CLASS, CWInitialization.class);
mParameters.set(LOCAL_SEARCH_CLASS, VariableNeighborhoodSearch.class);
mParameters.set(PERTUBATION_CLASS, PSwapPerturbation.class);
// mParameters.setParameter(STATE_CLASS, TestState.class);
mParameters.set(OPTIMIZATION_DIRECTION, -1);
mParameters.set(PARAM_INIT, SimpleParameters.BEST_IMPROVEMENT);
mParameters.set(PARAM_LOCALSEARCH, SimpleParameters.BEST_IMPROVEMENT);
mParameters.set(PARAM_PERTUBATION, SimpleParameters.PERTURBATION);
mNeighborhoods = new ArrayList<INeighborhood<IVRPSolution<?>, ?>>();
mNeighborhoods.add(new TwoOptNeighborhood<IVRPSolution<?>>());
mNeighborhoods.add(new SwapNeighborhood<IVRPSolution<?>>());
mLS = VariableNeighborhoodSearch.newVNS(VNSVariant.VND, OptimizationSense.MINIMIZATION, null, null,
mNeighborhoods);
mVLS = new VersatileLocalSearch(mParameters, new VLSParameters(mParameters, 4, 10, 10, 60000),
VLSStateBase.class, new SimpleAcceptanceCriterion(mParameters), new CWInitialization(
DefaultSolutionFactory.class, BasicSavingsHeuristic.class), mLS, new PSwapPerturbation(
mParameters, 5), null);
}
/**
* Test method for {@link vroom.common.heuristics.vls.VersatileLocalSearch#run()}.
*/
@Test
public void testRun() {
mVLS.setInstance(mInstance);
Stopwatch timer = new Stopwatch();
Logging.getBaseLogger().info("Starting the VLS procedure:");
timer.start();
mVLS.run();
timer.stop();
Logging.getBaseLogger().info("VLS procedure terminated after %sms", timer.readTimeMS());
Logging.getBaseLogger().info("Solution:");
Logging.getBaseLogger().info(mVLS.getBestSolution());
mVLS.stop();
}
public static void main(String[] args) {
Logging.setupRootLogger(LoggerHelper.LEVEL_DEBUG, LoggerHelper.LEVEL_DEBUG, true);
VersatileLocalSearchVRPTest test = new VersatileLocalSearchVRPTest();
try {
test.setUp();
} catch (Exception e) {
e.printStackTrace();
}
test.testRun();
}
}