示例#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()));
  }