package vroom.optimization.online.jmsa.vrp;
import java.util.LinkedList;
import java.util.List;
import vroom.common.modeling.dataModel.IVRPInstance;
import vroom.common.utilities.Utilities;
import vroom.optimization.online.jmsa.IInstance;
import vroom.optimization.online.jmsa.ISampledRequest;
import vroom.optimization.online.jmsa.components.ComponentManager;
import vroom.optimization.online.jmsa.components.ScenarioGeneratorBase;
import vroom.optimization.online.jmsa.components.ScenarioGeneratorParam;
import vroom.optimization.online.jmsa.utils.MSALogging;
/**
* @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 #created 18-Feb-2010 10:51:12 a.m.
*/
public class VRPScenarioGeneratorBase<S extends VRPScenario> extends ScenarioGeneratorBase<S> {
private final MSAVRPSolutionFactory mScenarioFactory;
/**
* Getter for the scenario factory used to instantiate scenarios
*
* @return the {@link MSAVRPSolutionFactory} associated with this instance.
*/
public MSAVRPSolutionFactory getScenarioFactory() {
return mScenarioFactory;
}
/**
* @param componentManager
*/
public VRPScenarioGeneratorBase(ComponentManager<S, ?> componentManager) {
super(componentManager);
mScenarioFactory = getComponentManager().getParentMSAProxy().getParameters()
.newInstance(VRPParameterKeys.SCENARIO_FACTORY_CLASS);
}
@Override
public S generateScenario(ScenarioGeneratorParam params) {
MSALogging.getComponentsLogger().debug("Generating a new scenario (params:%s)", params);
// Generate the sampled requests
List<VRPSampledRequest> sampledRequests = new LinkedList<VRPSampledRequest>();
// Add only the requests of the good type
for (ISampledRequest r : getComponentManager().generateSampledRequest(
params.getSamplerParams())) {
if (r instanceof VRPSampledRequest) {
sampledRequests.add((VRPSampledRequest) r);
}
}
@SuppressWarnings("unchecked")
S scenario = (S) getScenarioFactory().newSolution(
(IVRPInstance) getComponentManager().getParentMSA().getInstance(),
Utilities.convertToList(((IInstance) getComponentManager().getParentMSA()
.getInstance()).getPendingRequests()), sampledRequests);
return scenario;
}
}// end VRPScenarioGeneratorBase