Пример #1
0
  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()));
  }
Пример #2
0
  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));
  }