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.DefaultTeleportationEngine Class Reference
Inheritance diagram for org.matsim.core.mobsim.qsim.DefaultTeleportationEngine:
Inheritance graph
[legend]

Public Member Functions

 DefaultTeleportationEngine (Scenario scenario, EventsManager eventsManager)
 
 DefaultTeleportationEngine (Scenario scenario, EventsManager eventsManager, boolean withTravelTimeCheck)
 
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)
 

Private Member Functions

void handleTeleportationArrivals (double now)
 

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 >, TeleportationVisDatateleportationData = new LinkedHashMap<>()
 
InternalInterface internalInterface
 
Scenario scenario
 
EventsManager eventsManager
 
final boolean withTravelTimeCheck
 

Static Private Attributes

static final Logger log = LogManager.getLogger( DefaultTeleportationEngine.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 53 of file DefaultTeleportationEngine.java.

Constructor & Destructor Documentation

◆ DefaultTeleportationEngine() [1/2]

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

◆ DefaultTeleportationEngine() [2/2]

org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.DefaultTeleportationEngine ( Scenario  scenario,
EventsManager  eventsManager,
boolean  withTravelTimeCheck 
)

Member Function Documentation

◆ handleDeparture()

boolean org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.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 90 of file DefaultTeleportationEngine.java.

References org.matsim.core.mobsim.framework.MobsimAgent.getExpectedTravelTime(), org.matsim.core.mobsim.framework.NetworkAgent.getMode(), and org.matsim.core.utils.misc.OptionalTime.isUndefined().

90  {
91  if (agent.getExpectedTravelTime().isUndefined()) {
92  LogManager.getLogger(this.getClass()).info("mode: " + agent.getMode());
93  throw new RuntimeException("teleportation does not work when travel time is undefined. There is also really no magic fix for this,"
94  + " since we cannot guess travel times for arbitrary modes and arbitrary landscapes. kai/mz, apr'15 & feb'16") ;
95  }
96 
97  double travelTime = agent.getExpectedTravelTime().seconds() ;
98  if ( withTravelTimeCheck ) {
99  Double speed = scenario.getConfig().routing().getTeleportedModeSpeeds().get( agent.getMode() ) ;
100  Facility dpfac = agent.getCurrentFacility() ;
101  Facility arfac = agent.getDestinationFacility() ;
102  travelTime = DefaultTeleportationEngine.travelTimeCheck(travelTime, speed, dpfac, arfac);
103  }
104 
105  double arrivalTime = now + travelTime ;
106  this.teleportationList.add(new Tuple<>(arrivalTime, agent));
107 
108  // === below here is only visualization, no dynamics ===
109  Id<Person> agentId = agent.getId();
110  Link currLink = this.scenario .getNetwork().getLinks().get(linkId);
111  Link destLink = this.scenario .getNetwork().getLinks().get(agent.getDestinationLinkId());
112  Coord fromCoord = currLink.getToNode().getCoord();
113  Coord toCoord = destLink.getToNode().getCoord();
114  TeleportationVisData agentInfo = new TeleportationVisData(now, agentId, fromCoord, toCoord, travelTime);
115  this.teleportationData.put(agentId, agentInfo);
116 
117  return true;
118  }
final LinkedHashMap< Id< Person >, TeleportationVisData > teleportationData
DefaultTeleportationEngine(Scenario scenario, EventsManager eventsManager)
final Queue< Tuple< Double, MobsimAgent > > teleportationList
RoutingConfigGroup routing()
Definition: Config.java:439
Map< Id< Link >, ? extends Link > getLinks()
Here is the call graph for this function:

◆ addAgentSnapshotInfo()

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

Implements org.matsim.vis.snapshotwriters.VisData.

Definition at line 121 of file DefaultTeleportationEngine.java.

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

121  {
123  for (TeleportationVisData teleportationVisData : teleportationData.values()) {
124  teleportationVisData.updatePosition(time);
125  snapshotList.add(teleportationVisData);
126  }
127  return snapshotList;
128  }
final LinkedHashMap< Id< Person >, TeleportationVisData > teleportationData
Here is the call graph for this function:

◆ doSimStep()

void org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.doSimStep ( double  time)

◆ handleTeleportationArrivals()

void org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.handleTeleportationArrivals ( double  now)
private

Definition at line 135 of file DefaultTeleportationEngine.java.

References org.matsim.core.mobsim.qsim.InternalInterface.arrangeNextAgentState(), org.matsim.core.mobsim.framework.MobsimAgent.endLegAndComputeNextState(), org.matsim.core.mobsim.framework.NetworkAgent.getDestinationLinkId(), org.matsim.core.mobsim.framework.MobsimAgent.getExpectedTravelDistance(), org.matsim.core.utils.collections.Tuple< A, B >.getFirst(), org.matsim.api.core.v01.Identifiable< T >.getId(), org.matsim.core.mobsim.framework.NetworkAgent.getMode(), org.matsim.core.utils.collections.Tuple< A, B >.getSecond(), org.matsim.core.mobsim.framework.MobsimAgent.notifyArrivalOnLinkByNonNetworkMode(), and org.matsim.core.api.experimental.events.EventsManager.processEvent().

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

135  {
136  while (!teleportationList.isEmpty()) {
137  Tuple<Double, MobsimAgent> entry = teleportationList.peek();
138  if (entry.getFirst() <= now) {
139  teleportationList.poll();
140  MobsimAgent personAgent = entry.getSecond();
141  personAgent.notifyArrivalOnLinkByNonNetworkMode(personAgent.getDestinationLinkId());
142  double distance = personAgent.getExpectedTravelDistance();
144  new TeleportationArrivalEvent(now, personAgent.getId(), distance, personAgent.getMode()));
145  personAgent.endLegAndComputeNextState(now);
146  this.teleportationData.remove(personAgent.getId());
148  } else {
149  break;
150  }
151  }
152  }
final LinkedHashMap< Id< Person >, TeleportationVisData > teleportationData
void arrangeNextAgentState(MobsimAgent agent)
final Queue< Tuple< Double, MobsimAgent > > teleportationList
Here is the call graph for this function:

◆ onPrepareSim()

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

called in a predefined Order when the simulation is started

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

Definition at line 155 of file DefaultTeleportationEngine.java.

155  {
156  }

◆ afterSim()

void org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.afterSim ( )

Do some clean up.

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

Definition at line 159 of file DefaultTeleportationEngine.java.

References org.matsim.core.mobsim.framework.NetworkAgent.getDestinationLinkId(), org.matsim.api.core.v01.Identifiable< T >.getId(), org.matsim.core.mobsim.qsim.InternalInterface.getMobsim(), org.matsim.core.mobsim.framework.NetworkAgent.getMode(), org.matsim.core.mobsim.qsim.QSim.getSimTimer(), org.matsim.core.mobsim.framework.MobsimTimer.getTimeOfDay(), and org.matsim.core.api.experimental.events.EventsManager.processEvent().

159  {
161  for (Tuple<Double, MobsimAgent> entry : teleportationList) {
162  MobsimAgent agent = entry.getSecond();
163  eventsManager.processEvent(new PersonStuckEvent(now, agent.getId(), agent.getDestinationLinkId(), agent.getMode()));
164  }
165  teleportationList.clear();
166  }
final Queue< Tuple< Double, MobsimAgent > > teleportationList
Here is the call graph for this function:

◆ setInternalInterface()

void org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.setInternalInterface ( InternalInterface  internalInterface)

◆ travelTimeCheck()

static Double org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.travelTimeCheck ( Double  travelTime,
Double  speed,
Facility  dpfac,
Facility  arfac 
)
staticprivate

Definition at line 173 of file DefaultTeleportationEngine.java.

173  {
174  if ( speed==null ) {
175  // if we don't have a bushwhacking speed, the only thing we can do is trust the router
176  return travelTime ;
177  }
178 
179  if ( dpfac == null || arfac == null ) {
180  log.warn( "dpfac = " + dpfac ) ;
181  log.warn( "arfac = " + arfac ) ;
182  throw new RuntimeException("have bushwhacking mode but nothing that leads to coordinates; don't know what to do ...") ;
183  // (means that the agent is not correctly implemented)
184  }
185 
186  if ( dpfac.getCoord()==null || arfac.getCoord()==null ) {
187  // yy this is for example the case if activities are initialized at links, without coordinates. Could use the link coordinate
188  // instead, but somehow this does not feel any better. kai, feb'16
189 
190  return travelTime ;
191  }
192 
193  final Coord dpCoord = dpfac.getCoord();
194  final Coord arCoord = arfac.getCoord();
195 
196  double dist = NetworkUtils.getEuclideanDistance( dpCoord, arCoord ) ;
197  double travelTimeTmp = dist / speed ;
198 
199  if ( travelTimeTmp < travelTime ) {
200  return travelTime ;
201  }
202 
203  return travelTimeTmp ;
204  }

Member Data Documentation

◆ log

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

Definition at line 54 of file DefaultTeleportationEngine.java.

◆ teleportationList

final Queue<Tuple<Double, MobsimAgent> > org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.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 56 of file DefaultTeleportationEngine.java.

◆ teleportationData

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

Definition at line 71 of file DefaultTeleportationEngine.java.

◆ internalInterface

InternalInterface org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.internalInterface
private

◆ scenario

Scenario org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.scenario
private

◆ eventsManager

EventsManager org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.eventsManager
private

◆ withTravelTimeCheck

final boolean org.matsim.core.mobsim.qsim.DefaultTeleportationEngine.withTravelTimeCheck
private

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