package vroom.common.modeling.dataModel; import java.util.ArrayList; import java.util.List; import java.util.Observer; import vroom.common.modeling.dataModel.attributes.IReleaseDate; import vroom.common.modeling.dataModel.attributes.RequestAttributeKey; import vroom.common.modeling.util.CostCalculationDelegate; import vroom.common.utilities.Utilities; /** * <code>DynamicInstance</code> is an extension of {@link InstanceBase} that represents a dynamic instance of a VRP * problem. By dynamic we mean that data from such instance can be changed after its initialization, causing the * notification of the registered {@link Observer}s. * * @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 15-Feb-2010 11:29:50 a.m. */ public class DynamicInstance extends StaticInstance { /** * Creates a new <code>DynamicInstance</code> from a static instance. All references will be kept. * * @param instance */ public DynamicInstance(IVRPInstance instance) { super(instance.getName(), instance.getID(), instance.getFleet(), instance.getDepots(), instance.getRoutingProblem(), instance.getCostDelegate()); addRequests(instance.getRequests()); setSymmetric(instance.isSymmetric()); } /** * Returns a list containing the requests already released at the specified {@code time} * * @param time * @return a list containing the requests already released at the specified {@code time} */ public List<IVRPRequest> getReleasedRequests(double time) { ArrayList<IVRPRequest> requests = new ArrayList<IVRPRequest>(getRequestCount()); for (IVRPRequest r : getRequestsMap().values()) { IReleaseDate rd = r.getAttribute(RequestAttributeKey.RELEASE_DATE); if (rd == null || rd.doubleValue() <= time) { requests.add(r); } } return requests; } /** * Instantiates a new dynamic instance. * * @param name * the name * @param id * the id * @param fleet * the fleet * @param depots * the depots * @param routingProblem * the routing problem * @param costHelper * the cost helper * @see InstanceBase#InstanceBase(int, String, VehicleRoutingProblemDefinition, Fleet, List, IPlanningPeriod, * CostCalculationDelegate) */ public DynamicInstance(String name, int id, Fleet<?> fleet, List<Depot> depots, VehicleRoutingProblemDefinition routingProblem, CostCalculationDelegate costHelper) { super(name, id, fleet, depots, routingProblem, costHelper); } /** * Creates a new <code>DynamicInstance</code> * * @param name * @param id * @param vrpDef */ public DynamicInstance(String name, int id, VehicleRoutingProblemDefinition vrpDef) { super(name, id, vrpDef); } public boolean nodeVisited(INodeVisit node) { boolean b = node != null && Utilities.equal(getNodeVisitsMap().get(node.getID()), node); if (b) getNodeVisitsMap().remove(node.getID()); return b; } }// end DynamicInstance