package vrp2013.algorithms;
import java.util.concurrent.Callable;
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 vroom.common.utilities.IDisposable;
import vrp2013.util.VRPSolution;
/**
* The interface <code>VRPOptimizationAlgorithm</code> defines a generic interface for the optimization algorithms used
* in the VRP 2013 examples
* <p>
* Creation date: 06/05/2013 - 2:59:58 PM
*
* @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 interface IVRPOptimizationAlgorithm extends Callable<VRPSolution>, IDisposable {
/**
* Returns the pool of routes generated during the iterations of the GRASP
*
* @return the pool containing the generated routes
*/
public abstract IRoutePool<INodeVisit> getRoutePool();
/**
* Returns the best solution found by this GRASP instance on the last run
*
* @return the best solution found by this GRASP instance on the last run
*/
public abstract VRPSolution getBestSolution();
/**
* Returns the instance that this algorithm is solving
*
* @return the instance that this algorithm is solving
*/
public IVRPInstance getInstance();
/**
* Returns the number of iterations allowed in this algorithm
*
* @return the number of iterations allowed in this algorithm
*/
public abstract int getIterations();
/**
* Returns the solution factory used to instantiate new solutions and routes
*
* @return the solution factory used to instantiate new solutions and routes
*/
public ISolutionFactory getSolutionFactory();
}