package vroom.optimization.online.jmsa.benchmarking;
import gurobi.GRBException;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JFrame;
import vroom.common.heuristics.vns.VariableNeighborhoodSearch;
import vroom.common.modeling.dataModel.IRoute;
import vroom.common.modeling.dataModel.IVRPRequest;
import vroom.common.modeling.dataModel.IVRPSolution;
import vroom.common.modeling.dataModel.NodeVisit;
import vroom.common.modeling.io.NovoaPersistenceHelper.DemandDistribution;
import vroom.common.modeling.util.SolutionChecker;
import vroom.common.modeling.visualization.VRPVisualizationUtilities;
import vroom.common.utilities.Stopwatch;
import vroom.common.utilities.logging.LoggerHelper;
import vroom.optimization.online.jmsa.MSABase;
import vroom.optimization.online.jmsa.MSAGlobalParameters;
import vroom.optimization.online.jmsa.MSASequential;
import vroom.optimization.online.jmsa.components.ScenarioOptimizerParam;
import vroom.optimization.online.jmsa.vrp.MSAVRPInstance;
import vroom.optimization.online.jmsa.vrp.VRPActualRequest;
import vroom.optimization.online.jmsa.vrp.VRPSampledRequest;
import vroom.optimization.online.jmsa.vrp.VRPScenario;
import vroom.optimization.pl.gurobi.CVRPCuttingPlaneSolver;
/**
*
*/
/**
* <code>MSAOptTest</code>
* <p>
* Creation date: Sep 29, 2010 - 11:11:18 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 MSAOptTest {
public final static LoggerHelper LOGGER = LoggerHelper.getLogger("MSAOptTest");
private static DemandDistribution sDist = DemandDistribution.NORMAL;
@SuppressWarnings("unused")
public static void main(String[] args) {
NovoaRun.setupLoggers(LoggerHelper.LEVEL_WARN, LoggerHelper.LEVEL_WARN, false, true, false);
LOGGER.setLevel(LoggerHelper.LEVEL_INFO);
VariableNeighborhoodSearch.LOGGER.setLevel(LoggerHelper.LEVEL_DEBUG);
MSAGlobalParameters params = NovoaBenchmarking.getDefaultParameters();
PerfectInformationSolver solver = new PerfectInformationSolver();
CVRPCuttingPlaneSolver cpSolver = null;
try {
cpSolver = new CVRPCuttingPlaneSolver(false, true);
} catch (GRBException e) {
e.printStackTrace();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
MSABase msa = new MSASequential(null, params);
int run = 79;
int size = 20;
int num = 1;
int cap = 0;
int set = 1;
NovoaRun novoa = null;
try {
novoa = new NovoaRun(set, size, num, cap, run, params, sDist);
} catch (IOException e1) {
LOGGER.exception("MSAOptTest.main", e1);
return;
}
MSAVRPInstance instance = new MSAVRPInstance(novoa.getSimulationInstance(), params);
Stopwatch timer = new Stopwatch();
double initTime, optTime;
double initObj, optObj;
List<VRPActualRequest> act = new LinkedList<VRPActualRequest>();
for (IVRPRequest r : novoa.getSimulationInstance().getRequests()) {
VRPActualRequest req = new VRPActualRequest(NodeVisit.createNodeVisits(r)[0]);
act.add(req);
}
List<VRPSampledRequest> samp = new LinkedList<VRPSampledRequest>();
VRPScenario solution = new VRPScenario(instance, act, samp);
timer.start();
novoa.getMsa()
.getComponentManager()
.getScenarioOptimizer()
.initialize(solution,
new ScenarioOptimizerParam(Integer.MAX_VALUE, Integer.MAX_VALUE, false));
timer.stop();
SolutionChecker.checkSolution(solution, true, true, true);
initObj = solution.getCost();
initTime = timer.readTimeMS();
JFrame solInit = VRPVisualizationUtilities.showVisualizationFrame(solution);
solInit.setTitle(String.format("%s Init (%.2f %sms)", instance.getName(), initObj, initTime));
timer.restart();
novoa.getMsa()
.getComponentManager()
.getScenarioOptimizer()
.optimize(solution,
new ScenarioOptimizerParam(Integer.MAX_VALUE, Integer.MAX_VALUE, false));
timer.stop();
SolutionChecker.checkSolution(solution, true, true, true);
optObj = solution.getCost();
optTime = timer.readTimeMS();
JFrame solOpt = VRPVisualizationUtilities.showVisualizationFrame(solution);
solOpt.setTitle(String.format("%s Opt (%.2f %sms)", instance.getName(), optObj, optTime));
solOpt.setLocation((int) solInit.getLocation().getX() + solInit.getWidth() + 10,
(int) solInit.getLocation().getY());
try {
cpSolver.readInstance(instance);
cpSolver.solve();
IVRPSolution<? extends IRoute<?>> exactSol = cpSolver.getSolution();
JFrame optimal = VRPVisualizationUtilities.showVisualizationFrame(exactSol);
optimal.setTitle(String.format("%s Optimal (%.2f)", instance.getName(),
exactSol.getCost()));
optimal.setLocation((int) solOpt.getLocation().getX() + solOpt.getWidth() + 10,
(int) solInit.getLocation().getY());
} catch (GRBException e) {
e.printStackTrace();
}
double optimal = solver.solvePerfectInformation(run, size, num, cap, set,
Integer.MAX_VALUE, false, true, sDist);
}
}