public static void addCoreConstraints( ConstraintManager constraintManager, StateManager stateManager, final VehicleRoutingProblem vrp) { constraintManager.addTimeWindowConstraint(); constraintManager.addLoadConstraint(); constraintManager.addSkillsConstraint(); constraintManager.addConstraint(new SwitchNotFeasible(stateManager)); stateManager.updateLoadStates(); stateManager.updateTimeWindowStates(); UpdateVehicleDependentPracticalTimeWindows twUpdater = new UpdateVehicleDependentPracticalTimeWindows( stateManager, vrp.getTransportCosts(), vrp.getActivityCosts()); twUpdater.setVehiclesToUpdate( new UpdateVehicleDependentPracticalTimeWindows.VehiclesToUpdate() { Map<VehicleTypeKey, Vehicle> uniqueTypes = new HashMap<VehicleTypeKey, Vehicle>(); @Override public Collection<Vehicle> get(VehicleRoute vehicleRoute) { if (uniqueTypes.isEmpty()) { for (Vehicle v : vrp.getVehicles()) { if (!uniqueTypes.containsKey(v.getVehicleTypeIdentifier())) { uniqueTypes.put(v.getVehicleTypeIdentifier(), v); } } } Collection<Vehicle> vehicles = new ArrayList<Vehicle>(); vehicles.addAll(uniqueTypes.values()); return vehicles; } }); stateManager.addStateUpdater(new UpdateEndLocationIfRouteIsOpen()); stateManager.addStateUpdater(twUpdater); stateManager.updateSkillStates(); stateManager.addStateUpdater( new UpdateActivityTimes( vrp.getTransportCosts(), ActivityTimeTracker.ActivityPolicy.AS_SOON_AS_TIME_WINDOW_OPENS, vrp.getActivityCosts())); stateManager.addStateUpdater( new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); stateManager.addStateUpdater( new UpdateFutureWaitingTimes(stateManager, vrp.getTransportCosts())); }
private void initialise() { this.stateManager = new StateManager(vrp); this.stateManager.updateTimeWindowStates(); this.stateManager.updateLoadStates(); this.stateManager.updateSkillStates(); activityPolicy = ActivityTimeTracker.ActivityPolicy.AS_SOON_AS_TIME_WINDOW_OPENS; this.stateManager.addStateUpdater( new UpdateActivityTimes(vrp.getTransportCosts(), activityPolicy, vrp.getActivityCosts())); this.stateManager.addStateUpdater( new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); waiting_time_id = stateManager.createStateId("waiting-time"); transport_time_id = stateManager.createStateId("transport-time"); service_time_id = stateManager.createStateId("service-time"); distance_id = stateManager.createStateId("distance"); too_late_id = stateManager.createStateId("too-late"); shipment_id = stateManager.createStateId("shipment"); backhaul_id = stateManager.createStateId("backhaul"); skill_id = stateManager.createStateId("skills-violated"); last_transport_cost_id = stateManager.createStateId("last-transport-cost"); last_transport_distance_id = stateManager.createStateId("last-transport-distance"); last_transport_time_id = stateManager.createStateId("last-transport-time"); stateManager.addStateUpdater( new SumUpActivityTimes( waiting_time_id, transport_time_id, service_time_id, too_late_id, stateManager, activityPolicy, vrp.getActivityCosts())); stateManager.addStateUpdater( new DistanceUpdater(distance_id, stateManager, distanceCalculator)); stateManager.addStateUpdater( new BackhaulAndShipmentUpdater(backhaul_id, shipment_id, stateManager)); stateManager.addStateUpdater(new SkillUpdater(stateManager, skill_id)); stateManager.addStateUpdater(new LoadAndActivityCounter(stateManager)); stateManager.addStateUpdater( new LastTransportUpdater( stateManager, vrp.getTransportCosts(), distanceCalculator, last_transport_distance_id, last_transport_time_id, last_transport_cost_id)); }