MATSIM
RunOwnMobsimAgentUsingRouterExample.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: kai
3  * Main.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2013 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 tutorial.programming.ownMobsimAgentUsingRouter;
22 
23 import com.google.inject.Provider;
24 import org.matsim.api.core.v01.Id;
25 import org.matsim.api.core.v01.Scenario;
34 import org.matsim.core.mobsim.qsim.QSim;
37 import org.matsim.vehicles.Vehicle;
39 
40 import javax.inject.Inject;
41 
48 
49  public static void main(String[] args) {
50  final Controler controler = new Controler("examples/tutorial/config/example5-config.xml") ;
51  controler.addOverridingModule(new AbstractModule() {
52  @Override
53  public void install() {
54  bindMobsim().toProvider(new Provider<Mobsim>() {
55 
56  @Inject Scenario scenario;
57  @Inject EventsManager eventsManager;
58 
59  @Override
60  public Mobsim get() {
61  scenario.getConfig().qsim().setEndTime(25 * 60 * 60);
62  scenario.getConfig().controler().setLastIteration(0);
63  scenario.getPopulation().getPersons().clear();
64  final QSim qsim = QSimUtils.createDefaultQSim(scenario, eventsManager);
65  qsim.addAgentSource(new AgentSource() {
66  @Override
67  public void insertAgentsIntoMobsim() {
68  // router. In order to be thread safe, one needs one router per agent. Since, on the other hand, routers are heavy-weight objects,
69  // this will not scale. For large numbers of replanning agents, one needs to think of a better software architecture here. kai, nov'14
70  final TripRouter router = controler.getTripRouterProvider().get();
71 
72  // guidance. Will need one instance per agent in order to be thread safe
73  final MyGuidance guidance = new MyGuidance(router, scenario);
74 
75  // insert traveler agent:
76  final MobsimAgent ag = new MyMobsimAgent(guidance, qsim.getSimTimer(), scenario);
77  qsim.insertAgentIntoMobsim(ag);
78 
79  // insert vehicle:
80  final Vehicle vehicle = VehicleUtils.getFactory().createVehicle(Id.create(ag.getId(), Vehicle.class), VehicleUtils.getDefaultVehicleType());
81  final Id<Link> linkId4VehicleInsertion = Id.createLinkId(1);
82  qsim.createAndParkVehicleOnLink(vehicle, linkId4VehicleInsertion);
83  }
84  });
85  return qsim;
86  }
87  });
88  }
89  });
90  controler.run();
91  }
92 
93 }
void createAndParkVehicleOnLink(Vehicle vehicle, Id< Link > linkId)
Definition: QSim.java:279
final void addOverridingModule(AbstractModule abstractModule)
Definition: Controler.java:410
void addAgentSource(AgentSource agentSource)
Definition: QSim.java:609
static QSim createDefaultQSim(final Scenario scenario, final EventsManager eventsManager)
Definition: QSimUtils.java:42
void insertAgentIntoMobsim(final MobsimAgent agent)
Definition: QSim.java:395
final Provider< TripRouter > getTripRouterProvider()
Definition: Controler.java:218
Vehicle createVehicle(Id< Vehicle > id, VehicleType type)
static VehicleType getDefaultVehicleType()
static VehiclesFactory getFactory()