Skip to content

Commit 160f080

Browse files
committedMar 2, 2018
extract TaxiDvrpModules from TaxiModule, include TaxiOutputModule into TaxiModule
1 parent f6cf550 commit 160f080

File tree

10 files changed

+151
-149
lines changed

10 files changed

+151
-149
lines changed
 

‎contribs/av/src/main/java/org/matsim/contrib/av/intermodal/RunTaxiPTIntermodalExample.java

+15-13
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,21 @@
2424

2525
import org.matsim.api.core.v01.Scenario;
2626
import org.matsim.contrib.av.intermodal.router.VariableAccessTransitRouterModule;
27-
import org.matsim.contrib.av.intermodal.router.config.*;
27+
import org.matsim.contrib.av.intermodal.router.config.VariableAccessConfigGroup;
28+
import org.matsim.contrib.av.intermodal.router.config.VariableAccessModeConfigGroup;
2829
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
2930
import org.matsim.contrib.otfvis.OTFVisLiveModule;
30-
import org.matsim.contrib.taxi.run.*;
31-
import org.matsim.core.config.*;
31+
import org.matsim.contrib.taxi.run.TaxiConfigConsistencyChecker;
32+
import org.matsim.contrib.taxi.run.TaxiConfigGroup;
33+
import org.matsim.contrib.taxi.run.TaxiModule;
34+
import org.matsim.contrib.taxi.run.examples.TaxiDvrpModules;
35+
import org.matsim.core.config.Config;
36+
import org.matsim.core.config.ConfigUtils;
3237
import org.matsim.core.controler.Controler;
3338
import org.matsim.core.controler.OutputDirectoryHierarchy.OverwriteFileSetting;
3439
import org.matsim.core.scenario.ScenarioUtils;
3540
import org.matsim.vis.otfvis.OTFVisConfigGroup;
3641

37-
3842
/**
3943
* @author jbischoff
4044
*
@@ -48,14 +52,12 @@ public static void main(String[] args) {
4852
}
4953

5054
public void run(boolean OTFVis) {
51-
Config config = ConfigUtils.loadConfig(
52-
"intermodal/config.xml",
53-
new TaxiConfigGroup(), new DvrpConfigGroup());
55+
Config config = ConfigUtils.loadConfig("intermodal/config.xml", new TaxiConfigGroup(), new DvrpConfigGroup());
5456

5557
config.controler().setOverwriteFileSetting(OverwriteFileSetting.deleteDirectoryIfExists);
5658

57-
// yyyy Could you please javadoc the following? EmissionsConfigGroup has an example how the explanatory strings
58-
// can be kept consistent between config file dump and javadoc. Thx. kai, jan'17
59+
// yyyy Could you please javadoc the following? EmissionsConfigGroup has an example how the explanatory strings
60+
// can be kept consistent between config file dump and javadoc. Thx. kai, jan'17
5961
VariableAccessConfigGroup vacfg = new VariableAccessConfigGroup();
6062
{
6163
VariableAccessModeConfigGroup taxi = new VariableAccessModeConfigGroup();
@@ -84,13 +86,13 @@ public void run(boolean OTFVis) {
8486
config.checkConsistency();
8587
// ---
8688
Scenario scenario = ScenarioUtils.loadScenario(config);
87-
89+
8890
Controler controler = new Controler(scenario);
8991

90-
controler.addOverridingModule(new TaxiOutputModule());
92+
controler.addOverridingModule(TaxiDvrpModules.create());
93+
94+
controler.addOverridingModule(new TaxiModule());
9195

92-
controler.addOverridingModule(new TaxiModule());
93-
9496
controler.addOverridingModule(new VariableAccessTransitRouterModule());
9597
if (OTFVis) {
9698
controler.addOverridingModule(new OTFVisLiveModule());

‎contribs/av/src/main/java/org/matsim/contrib/av/robotaxi/run/RunRobotaxiExample.java

+17-13
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,28 @@
2020
package org.matsim.contrib.av.robotaxi.run;
2121

2222
import org.matsim.api.core.v01.Scenario;
23-
import org.matsim.contrib.av.robotaxi.scoring.*;
23+
import org.matsim.contrib.av.robotaxi.scoring.TaxiFareConfigGroup;
24+
import org.matsim.contrib.av.robotaxi.scoring.TaxiFareHandler;
2425
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
2526
import org.matsim.contrib.otfvis.OTFVisLiveModule;
26-
import org.matsim.contrib.taxi.run.*;
27-
import org.matsim.core.config.*;
28-
import org.matsim.core.controler.*;
27+
import org.matsim.contrib.taxi.run.TaxiConfigConsistencyChecker;
28+
import org.matsim.contrib.taxi.run.TaxiConfigGroup;
29+
import org.matsim.contrib.taxi.run.TaxiModule;
30+
import org.matsim.contrib.taxi.run.examples.TaxiDvrpModules;
31+
import org.matsim.core.config.Config;
32+
import org.matsim.core.config.ConfigUtils;
33+
import org.matsim.core.controler.AbstractModule;
34+
import org.matsim.core.controler.Controler;
2935
import org.matsim.core.scenario.ScenarioUtils;
3036
import org.matsim.vis.otfvis.OTFVisConfigGroup;
3137

3238
/**
33-
* This class runs an example robotaxi scenario including scoring. The
34-
* simulation runs for 10 iterations, this takes quite a bit time (25 minutes or
35-
* so). You may switch on OTFVis visualisation in the main method below.
36-
* The scenario should run out of the box without any additional files.
37-
* If required, you may find all input files in the resource path
38-
* or in the jar maven has downloaded).
39-
* There are two vehicle files: 2000 vehicles and 5000, which may be set in the config.
40-
* Different fleet sizes can be created using {@link org.matsim.contrib.robotaxi.vehicles.CreateTaxiVehicles}
39+
* This class runs an example robotaxi scenario including scoring. The simulation runs for 10 iterations, this takes
40+
* quite a bit time (25 minutes or so). You may switch on OTFVis visualisation in the main method below. The scenario
41+
* should run out of the box without any additional files. If required, you may find all input files in the resource
42+
* path or in the jar maven has downloaded). There are two vehicle files: 2000 vehicles and 5000, which may be set in
43+
* the config. Different fleet sizes can be created using
44+
* {@link org.matsim.contrib.robotaxi.vehicles.CreateTaxiVehicles}
4145
*
4246
*
4347
*/
@@ -67,7 +71,7 @@ public void install() {
6771
addEventHandlerBinding().to(TaxiFareHandler.class).asEagerSingleton();
6872
}
6973
});
70-
controler.addOverridingModule(new TaxiOutputModule());
74+
controler.addOverridingModule(TaxiDvrpModules.create());
7175
controler.addOverridingModule(new TaxiModule());
7276

7377
if (otfvis) {

‎contribs/drt/src/main/java/org/matsim/contrib/drt/run/DrtControlerCreator.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,17 @@ public final class DrtControlerCreator {
6767
public static Controler createControler(Config config, boolean otfvis) {
6868
adjustConfig(config);
6969
Scenario scenario = ScenarioUtils.loadScenario(config);
70-
return adjustControler(otfvis, scenario);
70+
return createControlerImpl(otfvis, scenario);
7171
}
7272

7373
public static Controler createControler(Scenario scenario, boolean otfvis) {
7474
// yy I know that this one breaks the sequential loading of the building blocks, but I would like to be able
7575
// to modify the scenario before I pass it to the controler. kai, oct'17
7676
adjustConfig(scenario.getConfig());
77-
return adjustControler(otfvis, scenario);
77+
return createControlerImpl(otfvis, scenario);
7878
}
7979

80-
private static Controler adjustControler(boolean otfvis, Scenario scenario) {
80+
private static Controler createControlerImpl(boolean otfvis, Scenario scenario) {
8181
Controler controler = new Controler(scenario);
8282
controler.addOverridingModule(new DvrpModule(DrtControlerCreator::createModuleForQSimPlugin, DrtOptimizer.class,
8383
DefaultUnplannedRequestInserter.class, ParallelPathDataProvider.class));

‎contribs/taxi/src/main/java/org/matsim/contrib/taxi/benchmark/RunTaxiBenchmark.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
2525
import org.matsim.contrib.taxi.run.TaxiConfigGroup;
2626
import org.matsim.contrib.taxi.run.TaxiModule;
27-
import org.matsim.contrib.taxi.run.TaxiOutputModule;
27+
import org.matsim.contrib.taxi.run.examples.TaxiDvrpModules;
2828
import org.matsim.core.config.Config;
2929
import org.matsim.core.config.ConfigUtils;
3030
import org.matsim.core.controler.AbstractModule;
@@ -59,7 +59,7 @@ public static Controler createControler(Config config, int runs) {
5959

6060
Controler controler = new Controler(scenario);
6161
controler.setModules(new DvrpBenchmarkControlerModule());
62-
controler.addOverridingModule(new TaxiOutputModule());
62+
controler.addOverridingModule(TaxiDvrpModules.create());
6363

6464
controler.addOverridingModule(new TaxiModule());
6565
controler.addOverridingModule(new AbstractModule() {

‎contribs/taxi/src/main/java/org/matsim/contrib/taxi/run/RunTaxiScenario.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
import org.matsim.api.core.v01.Scenario;
2323
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
2424
import org.matsim.contrib.otfvis.OTFVisLiveModule;
25-
import org.matsim.core.config.*;
25+
import org.matsim.contrib.taxi.run.examples.TaxiDvrpModules;
26+
import org.matsim.core.config.Config;
27+
import org.matsim.core.config.ConfigUtils;
2628
import org.matsim.core.controler.Controler;
2729
import org.matsim.core.scenario.ScenarioUtils;
2830
import org.matsim.vis.otfvis.OTFVisConfigGroup;
@@ -41,7 +43,7 @@ public static Controler createControler(Config config, boolean otfvis) {
4143
Scenario scenario = ScenarioUtils.loadScenario(config);
4244

4345
Controler controler = new Controler(scenario);
44-
controler.addOverridingModule(new TaxiOutputModule());
46+
controler.addOverridingModule(TaxiDvrpModules.create());
4547
controler.addOverridingModule(new TaxiModule());
4648

4749
if (otfvis) {

‎contribs/taxi/src/main/java/org/matsim/contrib/taxi/run/TaxiConfigGroup.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@
2626
import javax.validation.constraints.NotNull;
2727
import javax.validation.constraints.PositiveOrZero;
2828

29-
import org.matsim.core.config.*;
29+
import org.matsim.core.config.Config;
30+
import org.matsim.core.config.ConfigGroup;
31+
import org.matsim.core.config.ReflectiveConfigGroup;
3032

3133
public class TaxiConfigGroup extends ReflectiveConfigGroup {
3234
public static final String GROUP_NAME = "taxi";

‎contribs/taxi/src/main/java/org/matsim/contrib/taxi/run/TaxiModule.java

+14-65
Original file line numberDiff line numberDiff line change
@@ -21,29 +21,15 @@
2121

2222
import org.matsim.contrib.dvrp.data.Fleet;
2323
import org.matsim.contrib.dvrp.data.file.FleetProvider;
24-
import org.matsim.contrib.dvrp.optimizer.VrpOptimizer;
25-
import org.matsim.contrib.dvrp.passenger.PassengerRequestCreator;
2624
import org.matsim.contrib.dvrp.router.TimeAsTravelDisutility;
27-
import org.matsim.contrib.dvrp.run.DvrpModule;
28-
import org.matsim.contrib.dvrp.trafficmonitoring.DvrpTravelTimeModule;
29-
import org.matsim.contrib.dvrp.vrpagent.VrpAgentLogic.DynActionCreator;
3025
import org.matsim.contrib.taxi.optimizer.DefaultTaxiOptimizerProvider;
31-
import org.matsim.contrib.taxi.optimizer.TaxiOptimizer;
32-
import org.matsim.contrib.taxi.passenger.TaxiRequestCreator;
33-
import org.matsim.contrib.taxi.scheduler.TaxiScheduler;
34-
import org.matsim.contrib.taxi.vrpagent.TaxiActionCreator;
26+
import org.matsim.contrib.taxi.passenger.SubmittedTaxiRequestsCollector;
27+
import org.matsim.contrib.taxi.util.TaxiSimulationConsistencyChecker;
28+
import org.matsim.contrib.taxi.util.stats.TaxiStatsDumper;
29+
import org.matsim.contrib.taxi.util.stats.TaxiStatusTimeProfileCollectorProvider;
3530
import org.matsim.core.controler.AbstractModule;
36-
import org.matsim.core.mobsim.framework.MobsimTimer;
37-
import org.matsim.core.mobsim.qsim.QSim;
3831
import org.matsim.core.router.costcalculators.TravelDisutilityFactory;
39-
import org.matsim.core.router.util.TravelDisutility;
40-
import org.matsim.core.router.util.TravelTime;
4132

42-
import com.google.inject.Module;
43-
import com.google.inject.Provider;
44-
import com.google.inject.Provides;
45-
import com.google.inject.Singleton;
46-
import com.google.inject.name.Named;
4733
import com.google.inject.name.Names;
4834

4935
/**
@@ -52,60 +38,23 @@
5238
public final class TaxiModule extends AbstractModule {
5339
public static final String TAXI_MODE = "taxi";
5440

55-
private final DvrpModule dvrpModule;
56-
57-
public TaxiModule() {
58-
this(DefaultTaxiOptimizerProvider.class);
59-
}
60-
61-
public TaxiModule(Class<? extends Provider<? extends TaxiOptimizer>> providerClass) {
62-
this(new com.google.inject.AbstractModule() {
63-
@Override
64-
protected void configure() {
65-
bind(TaxiOptimizer.class).toProvider(providerClass).asEagerSingleton();
66-
}
67-
});
68-
}
69-
70-
public TaxiModule(Module taxiOptimizerModule) {
71-
dvrpModule = new DvrpModule(createModuleForQSimPlugin(taxiOptimizerModule), TaxiOptimizer.class);
72-
}
73-
74-
public static Module createModuleForQSimPlugin(Module taxiOptimizerModule) {
75-
return new com.google.inject.AbstractModule() {
76-
@Override
77-
protected void configure() {
78-
bind(VrpOptimizer.class).to(TaxiOptimizer.class);
79-
bind(TaxiScheduler.class).asEagerSingleton();
80-
bind(DynActionCreator.class).to(TaxiActionCreator.class).asEagerSingleton();
81-
bind(PassengerRequestCreator.class).to(TaxiRequestCreator.class).asEagerSingleton();
82-
install(taxiOptimizerModule);
83-
}
84-
85-
@Provides
86-
@Singleton
87-
private MobsimTimer provideTimer(QSim qSim) {
88-
return qSim.getSimTimer();
89-
}
90-
91-
@Provides
92-
@Named(DefaultTaxiOptimizerProvider.TAXI_OPTIMIZER)
93-
private TravelDisutility provideTravelDisutility(
94-
@Named(DvrpTravelTimeModule.DVRP_ESTIMATED) TravelTime travelTime,
95-
@Named(DefaultTaxiOptimizerProvider.TAXI_OPTIMIZER) TravelDisutilityFactory travelDisutilityFactory) {
96-
return travelDisutilityFactory.createTravelDisutility(travelTime);
97-
}
98-
};
99-
}
100-
10141
@Override
10242
public void install() {
10343
TaxiConfigGroup taxiCfg = TaxiConfigGroup.get(getConfig());
10444
bind(Fleet.class).toProvider(new FleetProvider(taxiCfg.getTaxisFileUrl(getConfig().getContext())))
10545
.asEagerSingleton();
10646
bind(TravelDisutilityFactory.class).annotatedWith(Names.named(DefaultTaxiOptimizerProvider.TAXI_OPTIMIZER))
10747
.toInstance(travelTime -> new TimeAsTravelDisutility(travelTime));
48+
49+
bind(SubmittedTaxiRequestsCollector.class).toInstance(new SubmittedTaxiRequestsCollector());
50+
addControlerListenerBinding().to(SubmittedTaxiRequestsCollector.class);
51+
52+
addControlerListenerBinding().to(TaxiSimulationConsistencyChecker.class);
53+
addControlerListenerBinding().to(TaxiStatsDumper.class);
10854

109-
install(dvrpModule);
55+
if (taxiCfg.getTimeProfiles()) {
56+
addMobsimListenerBinding().toProvider(TaxiStatusTimeProfileCollectorProvider.class);
57+
// add more time profiles if necessary
58+
}
11059
}
11160
}

‎contribs/taxi/src/main/java/org/matsim/contrib/taxi/run/TaxiOutputModule.java

-47
This file was deleted.

‎contribs/taxi/src/main/java/org/matsim/contrib/taxi/run/examples/RunTaxiExample.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ public static void run(boolean otfvis, int lastIteration) {
5454

5555
final boolean ownTaxiOptimizer = false;
5656
if (!ownTaxiOptimizer) {
57-
controler.addOverridingModule(new TaxiModule());
57+
controler.addOverridingModule(TaxiDvrpModules.create());
5858
// (default taxi optimizer)
5959
} else {
60-
controler.addOverridingModule(new TaxiModule(MyTaxiOptimizerProvider.class));
60+
controler.addOverridingModule(TaxiDvrpModules.create(MyTaxiOptimizerProvider.class));
6161
// (implement your own taxi optimizer)
6262
}
6363

64-
controler.addOverridingModule(new TaxiOutputModule()); // taxi output (can be commented out)
64+
controler.addOverridingModule(new TaxiModule()); // taxi output (can be commented out)
6565

6666
if (otfvis) {
6767
controler.addOverridingModule(new OTFVisLiveModule()); // OTFVis visualisation
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/* *********************************************************************** *
2+
* project: org.matsim.*
3+
* *********************************************************************** *
4+
* *
5+
* copyright : (C) 2018 by the members listed in the COPYING, *
6+
* LICENSE and WARRANTY file. *
7+
* email : info at matsim dot org *
8+
* *
9+
* *********************************************************************** *
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* See also COPYING, LICENSE and WARRANTY file *
16+
* *
17+
* *********************************************************************** */
18+
19+
package org.matsim.contrib.taxi.run.examples;
20+
21+
import org.matsim.contrib.dvrp.optimizer.VrpOptimizer;
22+
import org.matsim.contrib.dvrp.passenger.PassengerRequestCreator;
23+
import org.matsim.contrib.dvrp.run.DvrpModule;
24+
import org.matsim.contrib.dvrp.trafficmonitoring.DvrpTravelTimeModule;
25+
import org.matsim.contrib.dvrp.vrpagent.VrpAgentLogic.DynActionCreator;
26+
import org.matsim.contrib.taxi.optimizer.DefaultTaxiOptimizerProvider;
27+
import org.matsim.contrib.taxi.optimizer.TaxiOptimizer;
28+
import org.matsim.contrib.taxi.passenger.TaxiRequestCreator;
29+
import org.matsim.contrib.taxi.scheduler.TaxiScheduler;
30+
import org.matsim.contrib.taxi.vrpagent.TaxiActionCreator;
31+
import org.matsim.core.mobsim.framework.MobsimTimer;
32+
import org.matsim.core.mobsim.qsim.QSim;
33+
import org.matsim.core.router.costcalculators.TravelDisutilityFactory;
34+
import org.matsim.core.router.util.TravelDisutility;
35+
import org.matsim.core.router.util.TravelTime;
36+
37+
import com.google.inject.Module;
38+
import com.google.inject.Provider;
39+
import com.google.inject.Provides;
40+
import com.google.inject.Singleton;
41+
import com.google.inject.name.Named;
42+
43+
/**
44+
* @author michalm
45+
*/
46+
public class TaxiDvrpModules {
47+
public static DvrpModule create() {
48+
return create(DefaultTaxiOptimizerProvider.class);
49+
}
50+
51+
public static DvrpModule create(Class<? extends Provider<? extends TaxiOptimizer>> providerClass) {
52+
return create(new com.google.inject.AbstractModule() {
53+
@Override
54+
protected void configure() {
55+
bind(TaxiOptimizer.class).toProvider(providerClass).asEagerSingleton();
56+
}
57+
});
58+
}
59+
60+
public static DvrpModule create(Module taxiOptimizerModule) {
61+
return new DvrpModule(createModuleForQSimPlugin(taxiOptimizerModule), TaxiOptimizer.class);
62+
}
63+
64+
public static Module createModuleForQSimPlugin(Module taxiOptimizerModule) {
65+
return new com.google.inject.AbstractModule() {
66+
@Override
67+
protected void configure() {
68+
bind(VrpOptimizer.class).to(TaxiOptimizer.class);
69+
bind(TaxiScheduler.class).asEagerSingleton();
70+
bind(DynActionCreator.class).to(TaxiActionCreator.class).asEagerSingleton();
71+
bind(PassengerRequestCreator.class).to(TaxiRequestCreator.class).asEagerSingleton();
72+
install(taxiOptimizerModule);
73+
}
74+
75+
@Provides
76+
@Singleton
77+
private MobsimTimer provideTimer(QSim qSim) {
78+
return qSim.getSimTimer();
79+
}
80+
81+
@Provides
82+
@Named(DefaultTaxiOptimizerProvider.TAXI_OPTIMIZER)
83+
private TravelDisutility provideTravelDisutility(
84+
@Named(DvrpTravelTimeModule.DVRP_ESTIMATED) TravelTime travelTime,
85+
@Named(DefaultTaxiOptimizerProvider.TAXI_OPTIMIZER) TravelDisutilityFactory travelDisutilityFactory) {
86+
return travelDisutilityFactory.createTravelDisutility(travelTime);
87+
}
88+
};
89+
}
90+
}

0 commit comments

Comments
 (0)
Please sign in to comment.