/** * @return Constructs a new {@link ScenarioGenerator} instance based on this * builder. */ public ScenarioGenerator build() { return new ScenarioGenerator(new Builder(this)); } }
static ImmutableList<Double> measureLoad(Scenario s, int numVehicles) { final TravelTimes tt = ScenarioGenerator.createTravelTimes(s); final ImmutableList.Builder<LoadPart> loadParts = ImmutableList.builder(); for (final TimedEvent te : s.getEvents()) { if (te instanceof AddParcelEvent) { loadParts.addAll(measureLoad((AddParcelEvent) te, tt)); } } return sum(0, loadParts.build(), numVehicles); }
modelBuilders = ImmutableSet.copyOf(builder.modelSuppliers); final List<ModelBuilder<RoadModel, ?>> rmBuilders = findBuildersThatBuild( modelBuilders, RoadModel.class); checkArgument(rmBuilders.size() == 1, speedUnit = roadBuilder.getSpeedUnit(); final List<ModelBuilder<TimeModel, ?>> tmBuilders = findBuildersThatBuild( modelBuilders, TimeModel.class); checkArgument(tmBuilders.size() <= 1,
@Test public void createPlaneScenarioGeneratorTest() { final ModelBuilder<? extends RoadModel, ? extends RoadUser> roadModelBuilder = RoadModelBuilders .plane() .withSpeedUnit(NonSI.KILOMETERS_PER_HOUR) .withDistanceUnit(SI.METER); final ScenarioGenerator sg = ScenarioGenerator.builder().addModel( roadModelBuilder) .build(); assertEquals(SI.METER, sg.getDistanceUnit()); assertEquals(NonSI.KILOMETERS_PER_HOUR, sg.getSpeedUnit()); } }
b.addAll(vehicles); final TravelTimes tm = createTravelTimes(modelBuilders, getTimeUnit(), depots, vehicles);
static TravelTimes createTravelTimes( Iterable<? extends ModelBuilder<?, ?>> modelSuppliers, Unit<Duration> tu, Iterable<? extends AddDepotEvent> depots, Iterable<? extends AddVehicleEvent> vehicles) { final RoadModel rm = getRm(modelSuppliers); if (rm instanceof GraphRoadModel) { return new GraphTravelTimes<>((GraphRoadModel) rm, tu, depots, vehicles); } return new DefaultTravelTimes(rm, tu, depots, vehicles); }
@Test public void createGraphScenarioGeneratorTest() { final ModelBuilder<? extends RoadModel, ? extends RoadUser> roadModelBuilder = RoadModelBuilders .dynamicGraph(ListenableGraph.supplier(TableGraph.supplier())) .withSpeedUnit(NonSI.KILOMETERS_PER_HOUR) .withDistanceUnit(SI.METER); final ScenarioGenerator sg = ScenarioGenerator.builder().addModel( roadModelBuilder) .build(); assertEquals(SI.METER, sg.getDistanceUnit()); assertEquals(NonSI.KILOMETERS_PER_HOUR, sg.getSpeedUnit()); }
@Test public void createPDPScenarioGeneratorTest() { final ModelBuilder<? extends RoadModel, ? extends RoadUser> roadModelBuilder = RoadModelBuilders .dynamicGraph(ListenableGraph.supplier(TableGraph.supplier())) .withSpeedUnit(NonSI.KILOMETERS_PER_HOUR) .withDistanceUnit(SI.METER); final ScenarioGenerator sg = ScenarioGenerator.builder().addModel( PDPDynamicGraphRoadModel.builderForDynamicGraphRm( (ModelBuilder<? extends DynamicGraphRoadModel, ? extends RoadUser>) roadModelBuilder) .withAllowVehicleDiversion(true)) .build(); assertEquals(SI.METER, sg.getDistanceUnit()); assertEquals(NonSI.KILOMETERS_PER_HOUR, sg.getSpeedUnit()); }
/** * Checks the time window strictness of the specified {@link Scenario}. A time * window is strict if: * <ul> * <li><code>dtw.begin ≥ ptw.begin + pd + travelTime</code></li> * <li><code>ptw.end + pd + travelTime ≤ dtw.end</code></li> * </ul> * Where: * <ul> * <li><code>dtw</code> is {@link ParcelDTO#getDeliveryTimeWindow()}</li> * <li><code>ptw</code> is {@link ParcelDTO#getPickupTimeWindow()}</li> * <li><code>pd</code> is {@link ParcelDTO#getPickupDuration()}</li> * <li><code>travelTime</code> is the time to travel the shortest path from * {@link ParcelDTO#getPickupLocation()} to * {@link ParcelDTO#getDeliveryLocation()}</li> * </ul> * * @param s The scenario to check. */ public static void checkTimeWindowStrictness(Scenario s) { final TravelTimes tt = ScenarioGenerator.createTravelTimes(s); for (final TimedEvent te : s.getEvents()) { if (te instanceof AddParcelEvent) { checkParcelTWStrictness((AddParcelEvent) te, tt); } } }