MATSIM
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes | List of all members
org.matsim.core.mobsim.qsim.TeleportationEngine Class Reference
Inheritance diagram for org.matsim.core.mobsim.qsim.TeleportationEngine:
Inheritance graph
[legend]

Public Member Functions

 TeleportationEngine (Scenario scenario, EventsManager eventsManager)
 
boolean handleDeparture (double now, MobsimAgent agent, Id< Link > linkId)
 
Collection< AgentSnapshotInfoaddAgentSnapshotInfo (Collection< AgentSnapshotInfo > snapshotList)
 
void doSimStep (double time)
 
void onPrepareSim ()
 
void afterSim ()
 
void setInternalInterface (InternalInterface internalInterface)
 
Collection< AgentSnapshotInfoaddAgentSnapshotInfo (final Collection< AgentSnapshotInfo > positions)
 

Private Member Functions

void handleTeleportationArrivals ()
 

Static Private Member Functions

static Double travelTimeCheck (Double travelTime, Double speed, Facility<?> dpfac, Facility<?> arfac)
 

Private Attributes

final Queue< Tuple< Double,
MobsimAgent > > 
teleportationList
 
final LinkedHashMap< Id
< Person >
, TeleportationVisData
teleportationData = new LinkedHashMap<>()
 
InternalInterface internalInterface
 
Scenario scenario
 
EventsManager eventsManager
 
final boolean withTravelTimeCheck
 

Static Private Attributes

static final Logger log = Logger.getLogger( TeleportationEngine.class )
 

Detailed Description

Includes all agents that have transportation modes unknown to the NetsimEngine (often all != "car") or have two activities on the same link

Definition at line 30 of file TeleportationEngine.java.

Constructor & Destructor Documentation

org.matsim.core.mobsim.qsim.TeleportationEngine.TeleportationEngine ( Scenario  scenario,
EventsManager  eventsManager 
)

Member Function Documentation

boolean org.matsim.core.mobsim.qsim.TeleportationEngine.handleDeparture ( double  now,
MobsimAgent  agent,
Id< Link linkId 
)
Returns
true if the departure is handled, false if other DepartureHandlers should be tried as well.

Implements org.matsim.core.mobsim.qsim.interfaces.DepartureHandler.

Definition at line 62 of file TeleportationEngine.java.

References org.matsim.api.core.v01.Scenario.getConfig(), org.matsim.core.mobsim.framework.MobsimAgent.getCurrentFacility(), org.matsim.core.mobsim.framework.MobsimAgent.getDestinationFacility(), org.matsim.core.mobsim.framework.NetworkAgent.getDestinationLinkId(), org.matsim.core.mobsim.framework.MobsimAgent.getExpectedTravelTime(), org.matsim.api.core.v01.network.Network.getLinks(), org.matsim.core.mobsim.framework.NetworkAgent.getMode(), org.matsim.api.core.v01.Scenario.getNetwork(), org.matsim.core.config.groups.PlansCalcRouteConfigGroup.getTeleportedModeSpeeds(), org.matsim.api.core.v01.network.Link.getToNode(), org.matsim.core.config.Config.plansCalcRoute, org.matsim.core.mobsim.qsim.TeleportationEngine.travelTimeCheck(), and org.matsim.core.utils.misc.Time.UNDEFINED_TIME.

62  {
63  if ( agent.getExpectedTravelTime()==null || agent.getExpectedTravelTime()==Time.UNDEFINED_TIME ) {
64  Logger.getLogger( this.getClass() ).info( "mode: " + agent.getMode() );
65  throw new RuntimeException("teleportation does not work when travel time is undefined. There is also really no magic fix for this,"
66  + " since we cannot guess travel times for arbitrary modes and arbitrary landscapes. kai/mz, apr'15 & feb'16") ;
67  }
68 
69  Double travelTime = agent.getExpectedTravelTime() ;
70  if ( withTravelTimeCheck ) {
71  Double speed = scenario.getConfig().plansCalcRoute().getTeleportedModeSpeeds().get( agent.getMode() ) ;
72  Facility<?> dpfac = agent.getCurrentFacility() ;
73  Facility<?> arfac = agent.getDestinationFacility() ;
74  travelTime = TeleportationEngine.travelTimeCheck(travelTime, speed, dpfac, arfac);
75  }
76 
77  double arrivalTime = now + travelTime ;
78  this.teleportationList.add(new Tuple<>(arrivalTime, agent));
79 
80  // === below here is only visualization, no dynamics ===
81  Id<Person> agentId = agent.getId();
82  Link currLink = this.scenario .getNetwork().getLinks().get(linkId);
83  Link destLink = this.scenario .getNetwork().getLinks().get(agent.getDestinationLinkId());
84  Coord fromCoord = currLink.getToNode().getCoord();
85  Coord toCoord = destLink.getToNode().getCoord();
86  TeleportationVisData agentInfo = new TeleportationVisData(now, agentId, fromCoord, toCoord, travelTime);
87  this.teleportationData.put(agentId, agentInfo);
88 
89  return true;
90  }
final LinkedHashMap< Id< Person >, TeleportationVisData > teleportationData
PlansCalcRouteConfigGroup plansCalcRoute
Definition: Config.java:94
final Queue< Tuple< Double, MobsimAgent > > teleportationList
TeleportationEngine(Scenario scenario, EventsManager eventsManager)
Map< Id< Link >,?extends Link > getLinks()

Here is the call graph for this function:

Collection<AgentSnapshotInfo> org.matsim.core.mobsim.qsim.TeleportationEngine.addAgentSnapshotInfo ( Collection< AgentSnapshotInfo snapshotList)

Definition at line 93 of file TeleportationEngine.java.

References org.matsim.core.mobsim.qsim.InternalInterface.getMobsim(), org.matsim.core.mobsim.qsim.interfaces.Netsim.getSimTimer(), and org.matsim.core.mobsim.framework.MobsimTimer.getTimeOfDay().

93  {
95  for (TeleportationVisData teleportationVisData : teleportationData.values()) {
96  teleportationVisData.updatePosition(time);
97  snapshotList.add(teleportationVisData);
98  }
99  return snapshotList;
100  }
final LinkedHashMap< Id< Person >, TeleportationVisData > teleportationData

Here is the call graph for this function:

void org.matsim.core.mobsim.qsim.TeleportationEngine.doSimStep ( double  time)
void org.matsim.core.mobsim.qsim.TeleportationEngine.handleTeleportationArrivals ( )
private

Definition at line 107 of file TeleportationEngine.java.

References org.matsim.core.mobsim.qsim.InternalInterface.arrangeNextAgentState(), org.matsim.core.mobsim.framework.MobsimAgent.endLegAndComputeNextState(), org.matsim.core.mobsim.framework.MobsimAgent.getExpectedTravelDistance(), org.matsim.core.mobsim.qsim.InternalInterface.getMobsim(), org.matsim.core.mobsim.qsim.interfaces.Netsim.getSimTimer(), org.matsim.core.mobsim.framework.MobsimTimer.getTimeOfDay(), org.matsim.core.mobsim.framework.MobsimAgent.notifyArrivalOnLinkByNonNetworkMode(), and org.matsim.core.api.experimental.events.EventsManager.processEvent().

Referenced by org.matsim.core.mobsim.qsim.TeleportationEngine.doSimStep().

107  {
109  while (teleportationList.peek() != null) {
110  Tuple<Double, MobsimAgent> entry = teleportationList.peek();
111  if (entry.getFirst() <= now) {
112  teleportationList.poll();
113  MobsimAgent personAgent = entry.getSecond();
114  personAgent.notifyArrivalOnLinkByNonNetworkMode(personAgent
115  .getDestinationLinkId());
116  double distance = personAgent.getExpectedTravelDistance();
117  this.eventsManager.processEvent(new TeleportationArrivalEvent(this.internalInterface.getMobsim().getSimTimer().getTimeOfDay(), personAgent.getId(), distance));
118  personAgent.endLegAndComputeNextState(now);
119  this.teleportationData.remove(personAgent.getId());
121  } else {
122  break;
123  }
124  }
125  }
final LinkedHashMap< Id< Person >, TeleportationVisData > teleportationData
final Queue< Tuple< Double, MobsimAgent > > teleportationList
void arrangeNextAgentState(MobsimAgent agent)

Here is the call graph for this function:

void org.matsim.core.mobsim.qsim.TeleportationEngine.onPrepareSim ( )

called in a predefined Order when the simulation is started

Implements org.matsim.core.mobsim.qsim.interfaces.MobsimEngine.

Definition at line 128 of file TeleportationEngine.java.

128  {
129 
130  }
void org.matsim.core.mobsim.qsim.TeleportationEngine.afterSim ( )

Do some clean up.

Implements org.matsim.core.mobsim.qsim.interfaces.MobsimEngine.

Definition at line 133 of file TeleportationEngine.java.

References org.matsim.core.mobsim.framework.NetworkAgent.getDestinationLinkId(), org.matsim.core.mobsim.qsim.InternalInterface.getMobsim(), org.matsim.core.mobsim.framework.NetworkAgent.getMode(), org.matsim.core.mobsim.qsim.interfaces.Netsim.getSimTimer(), org.matsim.core.mobsim.framework.MobsimTimer.getTimeOfDay(), and org.matsim.core.api.experimental.events.EventsManager.processEvent().

133  {
135  for (Tuple<Double, MobsimAgent> entry : teleportationList) {
136  MobsimAgent agent = entry.getSecond();
137  eventsManager.processEvent(new PersonStuckEvent(now, agent.getId(), agent.getDestinationLinkId(), agent.getMode()));
138  }
139  teleportationList.clear();
140  }
final Queue< Tuple< Double, MobsimAgent > > teleportationList

Here is the call graph for this function:

void org.matsim.core.mobsim.qsim.TeleportationEngine.setInternalInterface ( InternalInterface  internalInterface)
static Double org.matsim.core.mobsim.qsim.TeleportationEngine.travelTimeCheck ( Double  travelTime,
Double  speed,
Facility<?>  dpfac,
Facility<?>  arfac 
)
staticprivate

Definition at line 147 of file TeleportationEngine.java.

References org.matsim.core.network.NetworkUtils.getEuclideanDistance().

Referenced by org.matsim.core.mobsim.qsim.TeleportationEngine.handleDeparture().

147  {
148  if ( speed==null ) {
149  // if we don't have a bushwhacking speed, the only thing we can do is trust the router
150  return travelTime ;
151  }
152 
153  if ( dpfac == null || arfac == null ) {
154  log.warn( "dpfac = " + dpfac ) ;
155  log.warn( "arfac = " + arfac ) ;
156  throw new RuntimeException("have bushwhacking mode but nothing that leads to coordinates; don't know what to do ...") ;
157  // (means that the agent is not correctly implemented)
158  }
159 
160  if ( dpfac.getCoord()==null || arfac.getCoord()==null ) {
161  // yy this is for example the case if activities are initialized at links, without coordinates. Could use the link coordinate
162  // instead, but somehow this does not feel any better. kai, feb'16
163 
164  return travelTime ;
165  }
166 
167  final Coord dpCoord = dpfac.getCoord();
168  final Coord arCoord = arfac.getCoord();
169 
170  double dist = NetworkUtils.getEuclideanDistance( dpCoord, arCoord ) ;
171  double travelTimeTmp = dist / speed ;
172 
173  if ( travelTimeTmp < travelTime ) {
174  return travelTime ;
175  }
176 
177  return travelTimeTmp ;
178  }

Here is the call graph for this function:

Collection<AgentSnapshotInfo> org.matsim.vis.snapshotwriters.VisData.addAgentSnapshotInfo ( final Collection< AgentSnapshotInfo positions)
inherited

Member Data Documentation

final Logger org.matsim.core.mobsim.qsim.TeleportationEngine.log = Logger.getLogger( TeleportationEngine.class )
staticprivate

Definition at line 32 of file TeleportationEngine.java.

final Queue<Tuple<Double, MobsimAgent> > org.matsim.core.mobsim.qsim.TeleportationEngine.teleportationList
private
Initial value:
= new PriorityQueue<>(
30, new Comparator<Tuple<Double, MobsimAgent>>() {
@Override
public int compare(Tuple<Double, MobsimAgent> o1, Tuple<Double, MobsimAgent> o2) {
int ret = o1.getFirst().compareTo(o2.getFirst());
if (ret == 0) {
ret = o2.getSecond().getId().compareTo(o1.getSecond().getId());
}
return ret;
}
})

Definition at line 34 of file TeleportationEngine.java.

final LinkedHashMap<Id<Person>, TeleportationVisData> org.matsim.core.mobsim.qsim.TeleportationEngine.teleportationData = new LinkedHashMap<>()
private

Definition at line 46 of file TeleportationEngine.java.

InternalInterface org.matsim.core.mobsim.qsim.TeleportationEngine.internalInterface
private
Scenario org.matsim.core.mobsim.qsim.TeleportationEngine.scenario
private
EventsManager org.matsim.core.mobsim.qsim.TeleportationEngine.eventsManager
private
final boolean org.matsim.core.mobsim.qsim.TeleportationEngine.withTravelTimeCheck
private

Definition at line 51 of file TeleportationEngine.java.


The documentation for this class was generated from the following file: