21 package org.matsim.withinday.trafficmonitoring;
23 import java.util.Collections;
24 import java.util.HashSet;
27 import java.util.concurrent.ConcurrentHashMap;
28 import java.util.concurrent.ConcurrentMap;
30 import jakarta.inject.Inject;
31 import jakarta.inject.Named;
33 import org.apache.logging.log4j.LogManager;
34 import org.apache.logging.log4j.Logger;
90 log.info(
"Note: no map containing TravelTime objects for all simulated modes is given. Therefore use free speed " +
91 "car travel time as minimal link travel time for all modes.");
112 return Collections.unmodifiableMap(this.earliestLinkExitTimes);
116 Set<Id<Person>>
set = this.earliestLinkExitTimesPerTimeStep.get(time);
117 if (
set != null)
return Collections.unmodifiableSet(
set);
122 return Collections.unmodifiableMap(this.earliestLinkExitTimesPerTimeStep);
127 this.transportModeProvider.
reset(iteration);
129 this.earliestLinkExitTimes.clear();
130 this.earliestLinkExitTimesPerTimeStep.clear();
142 String transportMode = this.transportModeProvider.
getTransportMode(driverId);
143 double now =
event.getTime();
146 double earliestExitTime;
147 if (this.multiModalTravelTimes != null) {
148 if (transportMode == null) {
150 "Agent " + driverId.toString() +
" is currently not performing a leg. Aborting!");
152 TravelTime travelTime = this.multiModalTravelTimes.get(transportMode);
153 if (travelTime == null) {
155 "No TravelTime object was found for mode " + transportMode +
". Aborting!");
158 earliestExitTime = Math.floor(now + travelTime.
getLinkTravelTime(link, now, person, null));
161 earliestExitTime = Math.floor(now + this.freeSpeedTravelTime.
getLinkTravelTime(link, now, person, null));
185 this.earliestLinkExitTimes.put(agentId, optionalEarliestExitTime);
187 Set<Id<Person>> earliestLinkExitTimesAtTime = this.earliestLinkExitTimesPerTimeStep.computeIfAbsent(
188 optionalEarliestExitTime, k ->
new HashSet<>());
189 earliestLinkExitTimesAtTime.add(agentId);
193 OptionalTime earliestExitTime = this.earliestLinkExitTimes.remove(agentId);
195 if (earliestExitTime != null) {
196 Set<Id<Person>> earliestLinkExitTimesAtTime = this.earliestLinkExitTimesPerTimeStep.get(earliestExitTime);
197 if (earliestLinkExitTimesAtTime != null) {
198 earliestLinkExitTimesAtTime.remove(agentId);
199 if (earliestLinkExitTimesAtTime.isEmpty()) {
200 this.earliestLinkExitTimesPerTimeStep.remove(earliestExitTime);
void reset(int iteration)
Vehicle2DriverEventHandler delegate
void handleEvent(PersonArrivalEvent event)
Set< Id< Person > > getEarliestLinkExitTimesPerTimeStep(double time)
void handleEvent(PersonDepartureEvent event)
Id< Person > getPersonId()
Id< Person > getDriverOfVehicle(Id< Vehicle > vehicleId)
void handleEvent(VehicleEntersTrafficEvent event)
Id< Person > getPersonId()
TransportModeProvider getTransportModeProvider()
Map< Id< Person >, OptionalTime > getEarliestLinkExitTimes()
String getTransportMode(Id< Person > agentId)
Map< Id< Person >,? extends Person > getPersons()
double getLinkTravelTime(Link link, double time, Person person, Vehicle vehicle)
void addHandler(final EventHandler handler)
Id< Person > getPersonId()
Map< OptionalTime, Set< Id< Person > > > getEarliestLinkExitTimesPerTimeStep()
Population getPopulation()
void handleEvent(VehicleEntersTrafficEvent event)
final TransportModeProvider transportModeProvider
void removeEarliestLinkExitTimesAtTime(Id< Person > agentId)
static OptionalTime defined(double seconds)
final Map< String, TravelTime > multiModalTravelTimes
void handleEvent(PersonStuckEvent event)
Map< Id< Link >, ? extends Link > getLinks()
final ConcurrentMap< Id< Person >, OptionalTime > earliestLinkExitTimes
void handleEvent(VehicleLeavesTrafficEvent event)
void handleEvent(PersonStuckEvent event)
Id< Vehicle > getVehicleId()
static OptionalTime undefined()
final TravelTime freeSpeedTravelTime
Id< Vehicle > getVehicleId()
final ConcurrentMap< OptionalTime, Set< Id< Person > > > earliestLinkExitTimesPerTimeStep
void reset(int iteration)
EarliestLinkExitTimeProvider(Scenario scenario, @Named("lowerBound") Map< String, TravelTime > multiModalTravelTimes, EventsManager eventsManager)
void handleEvent(LinkLeaveEvent event)
OptionalTime getEarliestLinkExitTime(Id< Person > agentId)
void handleEvent(LinkEnterEvent event)
void handleAddEarliestLinkExitTime(Id< Person > agentId, double earliestExitTime)
EarliestLinkExitTimeProvider(Scenario scenario, EventsManager eventsManager)