Example usage for com.google.common.collect ImmutableRangeMap get

List of usage examples for com.google.common.collect ImmutableRangeMap get

Introduction

In this page you can find the example usage for com.google.common.collect ImmutableRangeMap get.

Prototype

@Override
    @Nullable
    public V get(K key) 

Source Link

Usage

From source file:com.github.rinde.datgen.pdptw.DatasetGenerator.java

static ScenarioGenerator createGenerator(final long officeHours, long urgency, double scale,
        TimeSeriesGenerator tsg, final ImmutableRangeMap<Double, Double> dynamismRangeCenters,
        LocationGenerator lg, Builder b, int numOrdersPerScale) {
    final ScenarioGenerator.Builder builder = ScenarioGenerator.builder();

    ModelBuilder<? extends RoadModel, ? extends RoadUser> roadModelBuilder;
    DepotGenerator depotBuilder;/*  w w w.  j av a2s .c  o m*/
    VehicleGenerator vehicleBuilder;
    final List<DynamicSpeeds.Builder> dynamicSpeedsBuilders = new ArrayList<>();
    for (int i = 0; i < b.numberOfShockwaves.size(); i++) {
        dynamicSpeedsBuilders.add(DynamicSpeeds.builder());
    }

    if (!b.graphSup.isPresent()) {
        roadModelBuilder = RoadModelBuilders.plane().withMaxSpeed(VEHICLE_SPEED_KMH)
                .withSpeedUnit(NonSI.KILOMETERS_PER_HOUR).withDistanceUnit(SI.KILOMETER);
        depotBuilder = Depots.singleCenteredDepot();
        vehicleBuilder = Vehicles.builder().capacities(constant(1)).centeredStartPositions()
                .creationTimes(constant(-1L))
                .numberOfVehicles(
                        constant(DoubleMath.roundToInt(VEHICLES_PER_SCALE * scale, RoundingMode.UNNECESSARY)))
                .speeds(constant(VEHICLE_SPEED_KMH)).timeWindowsAsScenario().build();
    } else {
        final Point startingLocation = getCenterMostPoint(b.graphSup.get().get());
        if (b.cacheSup.isPresent() || b.cachePath.isPresent()) {
            roadModelBuilder = CachedDynamicGraphRoadModel
                    .builder(
                            ListenableGraph
                                    .supplier((Supplier<? extends Graph<MultiAttributeData>>) b.graphSup.get()),
                            null, b.cachePath.get())
                    .withSpeedUnit(NonSI.KILOMETERS_PER_HOUR).withDistanceUnit(SI.KILOMETER)
                    .withModificationCheck(false);
        } else {
            roadModelBuilder = RoadModelBuilders
                    .dynamicGraph(ListenableGraph
                            .supplier((Supplier<? extends Graph<MultiAttributeData>>) b.graphSup.get()))
                    .withSpeedUnit(NonSI.KILOMETERS_PER_HOUR).withDistanceUnit(SI.KILOMETER)
                    .withModificationCheck(false);
        }

        depotBuilder = Depots.builder().positions(StochasticSuppliers.constant(startingLocation)).build();
        vehicleBuilder = Vehicles.builder().capacities(constant(1))
                .startPositions(StochasticSuppliers.constant(startingLocation)).creationTimes(constant(-1L))
                .numberOfVehicles(
                        constant(DoubleMath.roundToInt(VEHICLES_PER_SCALE * scale, RoundingMode.UNNECESSARY)))
                .speeds(constant(VEHICLE_SPEED_KMH)).timeWindowsAsScenario().build();

        // dynamic speed events
        for (int i = 0; i < dynamicSpeedsBuilders.size(); i++) {
            final DynamicSpeeds.Builder dynamicSpeedsBuilder = dynamicSpeedsBuilders.get(i);

            dynamicSpeedsBuilder.withGraph((Graph<MultiAttributeData>) b.graphSup.get().get())
                    .creationTimes(constant(-1L)).randomStartConnections()
                    .shockwaveWaitForRecedeDurations(constant(b.scenarioLengthMs / 2))
                    .numberOfShockwaves(StochasticSuppliers.constant(b.numberOfShockwaves.get(i)));
            if (b.shockwaveDurations.isPresent()) {
                dynamicSpeedsBuilder.shockwaveWaitForRecedeDurations(b.shockwaveDurations.get().get(i));
            }
            if (b.shockwaveBehaviours.isPresent()) {
                dynamicSpeedsBuilder.shockwaveBehaviour(b.shockwaveBehaviours.get().get(i));
            }
            if (b.shockwaveExpandingSpeeds.isPresent()) {
                dynamicSpeedsBuilder.shockwaveExpandingSpeed(b.shockwaveExpandingSpeeds.get().get(i));
            }
            if (b.shockwaveRecedingSpeeds.isPresent()) {
                dynamicSpeedsBuilder.shockwaveRecedingSpeed(b.shockwaveRecedingSpeeds.get().get(i));
            }
            if (b.shockwaveCreationTimes.isPresent()) {
                dynamicSpeedsBuilder.creationTimes(b.shockwaveCreationTimes.get().get(i));
            }
        }

        ImmutableList<DynamicSpeedGenerator> dsg;
        if (b.numberOfShockwaves.isEmpty()) {
            dsg = (ImmutableList<DynamicSpeedGenerator>) DynamicSpeeds.zeroEvents();
        } else {
            final List<DynamicSpeedGenerator> dsgList = new ArrayList<>();
            for (final DynamicSpeeds.Builder dsb : dynamicSpeedsBuilders) {
                dsgList.add(dsb.build());
            }
            dsg = ImmutableList.copyOf(dsgList);
        }
        builder.dynamicSpeedGenerators(dsg);
    }

    builder
            // global
            .addModel(TimeModel.builder().withRealTime().withStartInClockMode(ClockMode.SIMULATED)
                    .withTickLength(TICK_SIZE).withTimeUnit(SI.MILLI(SI.SECOND)))
            .scenarioLength(b.scenarioLengthMs)
            .setStopCondition(StopConditions.and(StatsStopConditions.vehiclesDoneAndBackAtDepot(),
                    StatsStopConditions.timeOutEvent()))
            // parcels
            .parcels(
                    Parcels.builder()
                            .announceTimes(TimeSeries.filter(
                                    TimeSeries.filter(tsg,
                                            TimeSeries.numEventsPredicate(DoubleMath.roundToInt(
                                                    numOrdersPerScale * scale, RoundingMode.UNNECESSARY))),
                                    new Predicate<List<Double>>() {
                                        @Override
                                        public boolean apply(@Nullable List<Double> input) {
                                            final double dynamism = Metrics
                                                    .measureDynamism(verifyNotNull(input), officeHours);
                                            final boolean isInBin = dynamismRangeCenters.get(dynamism) != null;
                                            if (isInBin) {
                                                System.out.println("Dynamism " + dynamism + " is in bin!");
                                            }
                                            return isInBin;
                                        }
                                    }))
                            .pickupDurations(constant(PICKUP_DURATION))
                            .deliveryDurations(constant(DELIVERY_DURATION)).neededCapacities(constant(0))
                            .locations(lg).withGraph(b.graphSup)
                            .timeWindows(new CustomTimeWindowGenerator(urgency)).build())

            // vehicles
            .vehicles(vehicleBuilder)

            // depots
            .depots(depotBuilder);

    // models
    builder.addModel(PDPDynamicGraphRoadModel
            .builderForDynamicGraphRm(
                    (ModelBuilder<? extends DynamicGraphRoadModel, ? extends RoadUser>) roadModelBuilder)
            .withAllowVehicleDiversion(true));
    builder.addModel(DefaultPDPModel.builder().withTimeWindowPolicy(TimeWindowPolicies.TARDY_ALLOWED));

    return builder.build();
}