diff --git a/contribs/drt/src/main/java/org/matsim/contrib/drt/estimator/DrtEstimatorModule.java b/contribs/drt/src/main/java/org/matsim/contrib/drt/estimator/DrtEstimatorModule.java index 4406c1d5321..ee6302313cc 100644 --- a/contribs/drt/src/main/java/org/matsim/contrib/drt/estimator/DrtEstimatorModule.java +++ b/contribs/drt/src/main/java/org/matsim/contrib/drt/estimator/DrtEstimatorModule.java @@ -1,16 +1,18 @@ package org.matsim.contrib.drt.estimator; import com.google.inject.Binder; +import com.google.inject.Key; import com.google.inject.Singleton; +import com.google.inject.binder.LinkedBindingBuilder; import com.google.inject.multibindings.MapBinder; import org.matsim.contrib.drt.analysis.DrtEventSequenceCollector; -import org.matsim.contrib.drt.estimator.impl.BasicDrtEstimator; -import org.matsim.contrib.drt.estimator.impl.PessimisticDrtEstimator; import org.matsim.contrib.drt.run.DrtConfigGroup; import org.matsim.contrib.dvrp.run.AbstractDvrpModeModule; import org.matsim.contrib.dvrp.run.DvrpMode; import org.matsim.contrib.dvrp.run.DvrpModes; -import org.matsim.core.modal.ModalProviders; +import org.matsim.core.modal.ModalAnnotationCreator; + +import java.lang.annotation.Annotation; /** * Main module that needs to be installed if any estimator is to be used. @@ -26,14 +28,17 @@ public DrtEstimatorModule(String mode, DrtConfigGroup drtCfg, DrtEstimatorParams this.params = params; } - public static Object bindEstimator(Binder binder, String mode){ - - // TODO create helper method for binding + /** + * Create binder for estimator to a specific mode. This is a helper method to use binding without creating + * a separate modal module. + */ + public static LinkedBindingBuilder bindEstimator(Binder binder, String mode) { + Key key = modalKey(DvrpModes::mode, mode); + return binder.bind(key); + } -// DvrpMode key = DvrpModes.mode(mode); -// binder.bind(key) -// ModalProviders.createProvider(mode, DvrpModes::mode); - return null; + private static Key modalKey(ModalAnnotationCreator f, String mode) { + return f.key(DrtEstimator.class, mode); } @Override diff --git a/contribs/drt/src/main/java/org/matsim/contrib/drt/run/DrtConfigGroup.java b/contribs/drt/src/main/java/org/matsim/contrib/drt/run/DrtConfigGroup.java index 9d133a32603..4d83fc47ab4 100644 --- a/contribs/drt/src/main/java/org/matsim/contrib/drt/run/DrtConfigGroup.java +++ b/contribs/drt/src/main/java/org/matsim/contrib/drt/run/DrtConfigGroup.java @@ -220,7 +220,7 @@ public enum OperationalScheme { public enum SimulationType { - fullSimulation, drtSpeedup, estimateAndTeleport + fullSimulation, estimateAndTeleport } @Parameter @@ -344,7 +344,10 @@ protected void checkConsistency(Config config) { DvrpModeRoutingNetworkModule.checkUseModeFilteredSubnetworkAllowed(config, mode); } - // TODO: check for new speed up params + if (simulationType == SimulationType.estimateAndTeleport) { + Verify.verify(drtSpeedUpParams == null, "Simulation type is estimateAndTeleport, but drtSpeedUpParams is set. " + + "Please remove drtSpeedUpParams from the config, as these two functionalities are not compatible."); + } } @Override diff --git a/contribs/drt/src/main/java/org/matsim/contrib/drt/speedup/DrtTeleportedRouteCalculator.java b/contribs/drt/src/main/java/org/matsim/contrib/drt/speedup/DrtTeleportedRouteCalculator.java index eca53f0c0d7..bd13a75d383 100644 --- a/contribs/drt/src/main/java/org/matsim/contrib/drt/speedup/DrtTeleportedRouteCalculator.java +++ b/contribs/drt/src/main/java/org/matsim/contrib/drt/speedup/DrtTeleportedRouteCalculator.java @@ -45,6 +45,7 @@ public class DrtTeleportedRouteCalculator implements TeleportedRouteCalculator { // it could be possible to integrate the drt estimators used by the informed mode-choice // this router should probably not use the beeline distance but the direct travel route // speed-up would still be significant (oct'23) + // estimator have been moved to drt contrib, one can now use estimateAndTeleport for new functionality (mar'24) @Override public Route calculateRoute(PassengerRequest request) { diff --git a/contribs/drt/src/test/java/org/matsim/contrib/drt/teleportation/DrtTeleportationTest.java b/contribs/drt/src/test/java/org/matsim/contrib/drt/teleportation/DrtTeleportationTest.java index 90aeea377e5..67a8bfc424c 100644 --- a/contribs/drt/src/test/java/org/matsim/contrib/drt/teleportation/DrtTeleportationTest.java +++ b/contribs/drt/src/test/java/org/matsim/contrib/drt/teleportation/DrtTeleportationTest.java @@ -3,16 +3,16 @@ import org.assertj.core.data.Offset; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; -import org.matsim.contrib.drt.estimator.DrtEstimator; +import org.matsim.contrib.drt.estimator.DrtEstimatorModule; import org.matsim.contrib.drt.estimator.impl.PessimisticDrtEstimator; import org.matsim.contrib.drt.fare.DrtFareParams; import org.matsim.contrib.drt.run.DrtConfigGroup; import org.matsim.contrib.drt.run.DrtControlerCreator; import org.matsim.contrib.drt.run.MultiModeDrtConfigGroup; -import org.matsim.contrib.dvrp.run.AbstractDvrpModeModule; import org.matsim.contrib.dvrp.run.DvrpConfigGroup; import org.matsim.core.config.Config; import org.matsim.core.config.ConfigUtils; +import org.matsim.core.controler.AbstractModule; import org.matsim.core.controler.Controler; import org.matsim.core.utils.io.IOUtils; import org.matsim.examples.ExamplesUtils; @@ -53,10 +53,12 @@ void testTeleportationEngine() throws IOException { // Setup to enable estimator and teleportation drtConfigGroup.simulationType = DrtConfigGroup.SimulationType.estimateAndTeleport; - controler.addOverridingModule(new AbstractDvrpModeModule(drtConfigGroup.mode) { + + // This uses the helper method to bind an estimator. Alternatively a separate modal module could also be created. + controler.addOverridingModule(new AbstractModule() { @Override public void install() { - bindModal(DrtEstimator.class).toInstance(new PessimisticDrtEstimator(drtConfigGroup)); + DrtEstimatorModule.bindEstimator(binder(), drtConfigGroup.mode).toInstance(new PessimisticDrtEstimator(drtConfigGroup)); } });