diff --git a/src/main/java/org/matsim/drtFare/KelheimDrtFareHandler.java b/src/main/java/org/matsim/drt/KelheimDrtFareHandler.java similarity index 99% rename from src/main/java/org/matsim/drtFare/KelheimDrtFareHandler.java rename to src/main/java/org/matsim/drt/KelheimDrtFareHandler.java index 0074f755..7a097724 100644 --- a/src/main/java/org/matsim/drtFare/KelheimDrtFareHandler.java +++ b/src/main/java/org/matsim/drt/KelheimDrtFareHandler.java @@ -1,4 +1,4 @@ -package org.matsim.drtFare; +package org.matsim.drt; import com.google.inject.Inject; import org.apache.logging.log4j.LogManager; diff --git a/src/main/java/org/matsim/drtFare/KelheimDrtFareModule.java b/src/main/java/org/matsim/drt/KelheimDrtFareModule.java similarity index 97% rename from src/main/java/org/matsim/drtFare/KelheimDrtFareModule.java rename to src/main/java/org/matsim/drt/KelheimDrtFareModule.java index 4b7b4e16..b0f7fe47 100644 --- a/src/main/java/org/matsim/drtFare/KelheimDrtFareModule.java +++ b/src/main/java/org/matsim/drt/KelheimDrtFareModule.java @@ -1,4 +1,4 @@ -package org.matsim.drtFare; +package org.matsim.drt; import org.matsim.api.core.v01.network.Network; import org.matsim.contrib.drt.run.DrtConfigGroup; diff --git a/src/main/java/org/matsim/drtFare/KelheimDrtFareParams.java b/src/main/java/org/matsim/drt/KelheimDrtFareParams.java similarity index 99% rename from src/main/java/org/matsim/drtFare/KelheimDrtFareParams.java rename to src/main/java/org/matsim/drt/KelheimDrtFareParams.java index 2ca96349..be00ee8c 100644 --- a/src/main/java/org/matsim/drtFare/KelheimDrtFareParams.java +++ b/src/main/java/org/matsim/drt/KelheimDrtFareParams.java @@ -1,4 +1,4 @@ -package org.matsim.drtFare; +package org.matsim.drt; import jakarta.validation.constraints.PositiveOrZero; import org.matsim.core.config.ReflectiveConfigGroup; diff --git a/src/main/java/org/matsim/drt/StartLinkAsDepot.java b/src/main/java/org/matsim/drt/StartLinkAsDepot.java new file mode 100644 index 00000000..61aa3ab3 --- /dev/null +++ b/src/main/java/org/matsim/drt/StartLinkAsDepot.java @@ -0,0 +1,46 @@ +/* *********************************************************************** * + * project: org.matsim.* + * Controler.java + * * + * *********************************************************************** * + * * + * copyright : (C) 2007 by the members listed in the COPYING, * + * LICENSE and WARRANTY file. * + * email : info at matsim dot org * + * * + * *********************************************************************** * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * See also COPYING, LICENSE and WARRANTY file * + * * + * *********************************************************************** */ + +package org.matsim.drt; + +import org.matsim.api.core.v01.network.Link; +import org.matsim.contrib.drt.optimizer.depot.DepotFinder; +import org.matsim.contrib.dvrp.fleet.DvrpVehicle; +import org.matsim.contrib.dvrp.fleet.Fleet; + +import java.util.Map; +import java.util.stream.Collectors; + +public class StartLinkAsDepot implements DepotFinder { + + private Map vehicleToStartLink; + + public StartLinkAsDepot(Fleet fleet) { + this.vehicleToStartLink = fleet.getVehicles() + .values() + .stream() + .collect(Collectors.toUnmodifiableMap(v -> v, DvrpVehicle::getStartLink)); + } + @Override + public Link findDepot(DvrpVehicle vehicle) { + return vehicleToStartLink.get(vehicle); + } + +} diff --git a/src/main/java/org/matsim/run/RunKelheimRealDrtDemands.java b/src/main/java/org/matsim/run/RunKelheimRealDrtDemands.java index 74b805d4..1faa3017 100644 --- a/src/main/java/org/matsim/run/RunKelheimRealDrtDemands.java +++ b/src/main/java/org/matsim/run/RunKelheimRealDrtDemands.java @@ -19,7 +19,7 @@ import org.matsim.core.controler.Controler; import org.matsim.core.controler.OutputDirectoryHierarchy; import org.matsim.core.scenario.ScenarioUtils; -import org.matsim.drtFare.KelheimDrtFareModule; +import org.matsim.drt.KelheimDrtFareModule; import picocli.CommandLine; import java.nio.file.Path; diff --git a/src/main/java/org/matsim/run/RunKelheimScenario.java b/src/main/java/org/matsim/run/RunKelheimScenario.java index 6a8d4dcd..9479da3f 100644 --- a/src/main/java/org/matsim/run/RunKelheimScenario.java +++ b/src/main/java/org/matsim/run/RunKelheimScenario.java @@ -30,12 +30,15 @@ import org.matsim.contrib.drt.extension.DrtWithExtensionsConfigGroup; import org.matsim.contrib.drt.extension.companions.DrtCompanionParams; import org.matsim.contrib.drt.extension.companions.MultiModeDrtCompanionModule; +import org.matsim.contrib.drt.optimizer.depot.DepotFinder; import org.matsim.contrib.drt.routing.DrtRoute; import org.matsim.contrib.drt.routing.DrtRouteFactory; import org.matsim.contrib.drt.run.DrtConfigGroup; import org.matsim.contrib.drt.run.DrtConfigs; import org.matsim.contrib.drt.run.MultiModeDrtConfigGroup; import org.matsim.contrib.drt.run.MultiModeDrtModule; +import org.matsim.contrib.dvrp.fleet.Fleet; +import org.matsim.contrib.dvrp.run.AbstractDvrpModeQSimModule; import org.matsim.contrib.dvrp.run.DvrpConfigGroup; import org.matsim.contrib.dvrp.run.DvrpModule; import org.matsim.contrib.dvrp.run.DvrpQSimComponents; @@ -50,7 +53,8 @@ import org.matsim.core.controler.Controler; import org.matsim.core.router.AnalysisMainModeIdentifier; import org.matsim.core.scoring.functions.ScoringParametersForPerson; -import org.matsim.drtFare.KelheimDrtFareModule; +import org.matsim.drt.KelheimDrtFareModule; +import org.matsim.drt.StartLinkAsDepot; import org.matsim.extensions.pt.routing.ptRoutingModes.PtIntermodalRoutingModesConfigGroup; import org.matsim.run.prepare.PrepareNetwork; import org.matsim.run.prepare.PreparePopulation; @@ -338,6 +342,16 @@ public void handleEvent(PersonDepartureEvent event) { for (DrtConfigGroup drtCfg : multiModeDrtConfig.getModalElements()) { controler.addOverridingModule(new KelheimDrtFareModule(drtCfg, network, avFare)); + if (drtCfg.mode.equals("av")) { + //we want to override the DepotFinder - but only for AV + controler.addOverridingQSimModule(new AbstractDvrpModeQSimModule(drtCfg.mode) { + @Override + protected void configureQSim() { + bindModal(DepotFinder.class).toProvider( + modalProvider(getter -> new StartLinkAsDepot(getter.getModal(Fleet.class)))).asEagerSingleton(); + } + }); + } } //controler.addOverridingModule(new DrtEstimatorModule());