MATSIM
RunMobsimWithMultipleModeVehiclesExample.java
Go to the documentation of this file.
1 package tutorial.programming.mobsimPassingVehicleQ;
2 
3 import com.google.inject.Provider;
4 import org.matsim.api.core.v01.Id;
14 import org.matsim.core.mobsim.qsim.QSim;
23 
24 import javax.inject.Inject;
25 import java.util.HashMap;
26 import java.util.Map;
27 
37 class RunMobsimWithMultipleModeVehiclesExample {
38 
39  public static void main ( String[] args ) {
40 
41  // prepare the config:
42  Config config = ConfigUtils.loadConfig( args[0] ) ;
43  config.qsim().setLinkDynamics(QSimConfigGroup.LinkDynamics.PassingQ.toString());
44  config.plans().setRemovingUnneccessaryPlanAttributes(true) ;
45 
46  // prepare the scenario
47  Scenario scenario = ScenarioUtils.loadScenario( config ) ;
48 
49  // prepare the control(l)er:
50  Controler controler = new Controler( scenario ) ;
51  controler.addOverridingModule(new AbstractModule() {
52  @Override
53  public void install() {
54  bindMobsim().toProvider(MultipleModeVehiclesQSimFactory.class);
55  }
56  });
57 
58  // run everything:
59  controler.run();
60 
61  }
62 
69  static class MultipleModeVehiclesQSimFactory implements Provider<Mobsim> {
70 
71  @Inject Scenario scenario;
72  @Inject EventsManager eventsManager;
73 
74  @Override
75  public Mobsim get() {
76 
77  QSimConfigGroup conf = scenario.getConfig().qsim();
78  if (conf == null) {
79  throw new NullPointerException("There is no configuration set for the QSim. Please add the module 'qsim' to your config file.");
80  }
81 
82  // construct the QSim:
83  QSim qSim = new QSim(scenario, eventsManager);
84 
85  // add the activity engine:
86  ActivityEngine activityEngine = new ActivityEngine(eventsManager, qSim.getAgentCounter());
87  qSim.addMobsimEngine(activityEngine);
88  qSim.addActivityHandler(activityEngine);
89 
90  // add the netsim engine:
91  QNetsimEngine netsimEngine = new QNetsimEngine(qSim) ;
92  qSim.addMobsimEngine(netsimEngine);
93  qSim.addDepartureHandler(netsimEngine.getDepartureHandler());
94 
95  TeleportationEngine teleportationEngine = new TeleportationEngine(scenario, eventsManager);
96  qSim.addMobsimEngine(teleportationEngine);
97 
98  AgentFactory agentFactory = new DefaultAgentFactory(qSim);
99 
100  PopulationAgentSource agentSource = new PopulationAgentSource(scenario.getPopulation(), agentFactory, qSim);
101  Map<String, VehicleType> modeVehicleTypes = new HashMap<>();
102 
103  VehicleType car = VehicleUtils.getFactory().createVehicleType(Id.create("car", VehicleType.class));
104  car.setMaximumVelocity(60.0/3.6);
105  car.setPcuEquivalents(1.0);
106  modeVehicleTypes.put("car", car);
107 
108  VehicleType bike = VehicleUtils.getFactory().createVehicleType(Id.create("bike", VehicleType.class));
109  bike.setMaximumVelocity(60.0/3.6);
110  bike.setPcuEquivalents(0.25);
111  modeVehicleTypes.put("bike", bike);
112 
113  VehicleType bicycles = VehicleUtils.getFactory().createVehicleType(Id.create("bicycle", VehicleType.class));
114  bicycles.setMaximumVelocity(15.0/3.6);
115  bicycles.setPcuEquivalents(0.05);
116  modeVehicleTypes.put("bicycle", bicycles);
117 
118  VehicleType walks = VehicleUtils.getFactory().createVehicleType(Id.create("walk", VehicleType.class));
119  walks.setMaximumVelocity(1.5);
120  walks.setPcuEquivalents(0.10); // assumed pcu for walks is 0.1
121  modeVehicleTypes.put("walk", walks);
122 
123  agentSource.setModeVehicleTypes(modeVehicleTypes);
124 
125  qSim.addAgentSource(agentSource);
126 
127  return qSim ;
128  }
129  }
130 }