/*
*
*/
package vroom.common.modeling.util;
import vroom.common.modeling.dataModel.IRoute;
import vroom.common.modeling.dataModel.IVRPInstance;
import vroom.common.modeling.dataModel.IVRPSolution;
import vroom.common.modeling.dataModel.Vehicle;
import vroom.common.utilities.optimization.ISolution;
/**
* <code>ISolutionFactory</code> is an interface for factory classes responsible for the instantiation of new
* {@link IVRPSolution}
* <p>
* Creation date: Sep 7, 2010 - 10:22:02 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 interface ISolutionFactory {
/**
* A factory method to create a new solution
*
* @param instance
* the parent instance
* @param params
* optional parameters
* @return a new instance of {@link ISolution} associated with the given <code>instance</code>
*/
public IVRPSolution<?> newSolution(IVRPInstance instance, Object... params);
/**
* A factory method to create a new route
*
* @param solution
* the parent solution
* @param vehicle
* the route vehicle
* @param params
* optional parameters
* @return a new instance of {@link IRoute} associated with the given <code>solution</code> and <code>vehicle</code>
*/
public IRoute<?> newRoute(IVRPSolution<?> solution, Vehicle vehicle, Object... params);
}