MATSIM
ExampleWithinDayController.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * ExampleWithinDayController.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2011 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.withinday.controller;
22 
23 import java.util.Map;
24 
25 import jakarta.inject.Inject;
26 import jakarta.inject.Provider;
27 import jakarta.inject.Singleton;
28 
29 import org.matsim.api.core.v01.Scenario;
32 import org.matsim.core.config.Config;
69 
83 @Singleton
84 public final class ExampleWithinDayController implements StartupListener {
85  // yyyy I think that for the now existing guice approach this example has too many factories at too many levels. kai, feb'16
86 
87  /*
88  * Define the Probability that an Agent uses the
89  * Replanning Strategy. It is possible to assign
90  * multiple Strategies to the Agents.
91  */
92  private double pInitialReplanning = 0.0;
93  private double pDuringActivityReplanning = 1.0;
94  private double pDuringLegReplanning = 0.10;
95 
108 
109  @Inject private Scenario scenario;
110  @Inject private Provider<TripRouter> tripRouterProvider;
116  @Inject private Map<String,TravelDisutilityFactory> travelDisutilityFactories;
117  @Inject private Map<String,TravelTime> travelTimes;
118 
119 
120  /*
121  * ===================================================================
122  * main
123  * ===================================================================
124  */
125  public static void main(final String[] args) {
126  if ((args == null) || (args.length == 0)) {
127  System.out.println("No argument given!");
128 // System.out.println("Usage: Controler config-file [dtd-file]");
129  // the [dtd-file] argument was not honoured when I found this fca451f279bd4c8e3921846597d657614d5a5832 . kai, may'17
130  System.out.println("Usage: Controler config-file");
131  System.out.println();
132  System.exit(-1);
133  }
134 
135  Config config = ConfigUtils.loadConfig( args[0] , new WithinDayConfigGroup() ) ;
137 
138  Scenario scenario = ScenarioUtils.loadScenario( config) ;
139 
140  final Controler controler = new Controler(scenario);
141  configure(controler);
142  controler.run();
143  }
144 
145  static void configure(Controler controler) {
146  // factored out for testing. kai, jun'16
147  controler.addOverridingModule(new AbstractModule() {
148  @Override
149  public void install() {
150  install(new WithinDayModule());
151  addControlerListenerBinding().to(ExampleWithinDayController.class);
152 
153  addTravelDisutilityFactoryBinding(TransportMode.car).toInstance(new OnlyTimeDependentTravelDisutilityFactory());
154 
155  // Use a Scoring Function that only scores the travel times:
156  // (yy but why? kai, jun'16)
157  bindScoringFunctionFactory().toInstance(new OnlyTravelTimeDependentScoringFunctionFactory());
158  }
159  });
160  }
161 
162  @Override
163  public void notifyStartup(StartupEvent event) {
164  this.initReplanners( );
165  }
166 
167  private void initReplanners( ) {
168  Network network = this.scenario.getNetwork() ;
169 
170  TravelTime travelTime = travelTimes.get( TransportMode.car ) ;
171 
172  TravelDisutilityFactory travelDisutilityFactory = travelDisutilityFactories.get( TransportMode.car ) ;
173  TravelDisutility travelDisutility = travelDisutilityFactory.createTravelDisutility(travelTime ) ;
174 
175  LeastCostPathCalculator pathCalculator = pathCalculatorFactory.createPathCalculator(network, travelDisutility, travelTime ) ;
176 
177  this.initialIdentifierFactory = new InitialIdentifierImplFactory(this.mobsimDataProvider);
178  this.initialProbabilityFilterFactory = new ProbabilityFilterFactory(this.pInitialReplanning);
179  this.initialIdentifierFactory.addAgentFilterFactory(this.initialProbabilityFilterFactory);
180  this.initialIdentifier = initialIdentifierFactory.createIdentifier();
181  this.initialReplannerFactory = new InitialReplannerFactory(this.scenario, this.withinDayEngine, this.tripRouterProvider, TimeInterpretation.create(scenario.getConfig()));
182  this.initialReplannerFactory.addIdentifier(this.initialIdentifier);
183  this.withinDayEngine.addIntialReplannerFactory(this.initialReplannerFactory);
184 
185  this.duringActivityIdentifierFactory = new ActivityEndIdentifierFactory(this.activityReplanningMap);
186  this.duringActivityProbabilityFilterFactory = new ProbabilityFilterFactory(this.pDuringActivityReplanning);
187  this.duringActivityIdentifierFactory.addAgentFilterFactory(this.duringActivityProbabilityFilterFactory);
188  this.duringActivityIdentifier = duringActivityIdentifierFactory.createIdentifier();
189  this.duringActivityReplannerFactory = new NextLegReplannerFactory(this.scenario, this.withinDayEngine, this.tripRouterProvider, TimeInterpretation.create(scenario.getConfig()));
190  this.duringActivityReplannerFactory.addIdentifier(this.duringActivityIdentifier);
191  this.withinDayEngine.addDuringActivityReplannerFactory(this.duringActivityReplannerFactory);
192 
193  this.duringLegIdentifierFactory = new LeaveLinkIdentifierFactory(this.linkReplanningMap, this.mobsimDataProvider);
194  this.duringLegProbabilityFilterFactory = new ProbabilityFilterFactory(this.pDuringLegReplanning);
195  this.duringLegIdentifierFactory.addAgentFilterFactory(this.duringLegProbabilityFilterFactory);
196  this.duringLegIdentifier = this.duringLegIdentifierFactory.createIdentifier();
197  this.duringLegReplannerFactory = new CurrentLegReplannerFactory(this.scenario, this.withinDayEngine, pathCalculator);
198  this.duringLegReplannerFactory.addIdentifier(this.duringLegIdentifier);
199  this.withinDayEngine.addDuringLegReplannerFactory(this.duringLegReplannerFactory);
200  }
201 
202 }
final Controler addOverridingModule(AbstractModule abstractModule)
Definition: Controler.java:473
static Config loadConfig(final String filename, ConfigGroup... customModules)
void setRoutingAlgorithmType(final RoutingAlgorithmType type)
TravelDisutility createTravelDisutility(TravelTime timeCalculator)
static TimeInterpretation create(Config config)
static Scenario loadScenario(final Config config)
final ControllerConfigGroup controller()
Definition: Config.java:399