21 package org.matsim.withinday.replanning.identifiers.tools;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.HashMap;
28 import java.util.concurrent.ConcurrentHashMap;
30 import jakarta.inject.Inject;
32 import org.apache.logging.log4j.LogManager;
33 import org.apache.logging.log4j.Logger;
99 log.info(
"Note that the ActivityReplanningMap has to be registered as an EventHandler and a SimulationListener!");
103 this.startingAgents =
new HashMap<>();
104 this.activityEndTimes =
new HashMap<>();
106 this.activityPerformingAgents =
new ConcurrentHashMap<>();
116 MobsimTimer mobsimTimer = ((
QSim) e.getQueueSimulation()).getSimTimer();
120 this.activityPerformingAgents.clear();
125 double activityEndTime = mobsimAgent.getActivityEndTime();
128 this.activityEndTimes.put(mobsimAgent.getId(), activityEndTime);
130 int bin = this.getTimeBin(activityEndTime);
132 map.put(mobsimAgent.getId(), mobsimAgent);
147 for (
MobsimAgent mobsimAgent : startingAgents.values()) {
149 double departureTime = mobsimAgent.getActivityEndTime();
155 if (departureTime >= now) {
156 this.activityEndTimes.put(mobsimAgent.getId(), departureTime);
157 int bin = this.getTimeBin(mobsimAgent.getActivityEndTime());
159 map.put(mobsimAgent.getId(), mobsimAgent);
161 log.warn(
"Departure time is in the past - ignoring activity!");
164 this.startingAgents.clear();
170 this.activityPerformingAgents.remove(this.getTimeBin(now));
179 int getTimeBin(
double time) {
181 double timeAfterSimStart = time - simStartTime;
187 if (timeAfterSimStart <= 0.0)
return 0;
194 int bin = (int) (timeAfterSimStart / timeStepSize);
195 if (timeAfterSimStart % timeStepSize != 0.0) bin++;
201 Map<Id<Person>,
MobsimAgent> map = this.activityPerformingAgents.get(bin);
203 map =
new HashMap<>();
204 this.activityPerformingAgents.put(bin, map);
216 this.startingAgents.put(agentId, this.mobsimDataProvider.
getAgent(agentId));
226 this.startingAgents.remove(agentId);
228 Double activityEndTime = this.activityEndTimes.remove(agentId);
229 if (activityEndTime != null) {
249 Double activityEndTime = this.activityEndTimes.get(event.
getPersonId());
250 if (activityEndTime != null) {
262 map.remove(agent.
getId());
266 map.put(agent.
getId(), agent);
275 return Collections.unmodifiableSet(this.activityEndTimes.keySet());
286 return Collections.unmodifiableCollection(this.
getMapForTimeBin(this.getTimeBin(time)).values());
291 this.startingAgents.clear();
292 this.activityEndTimes.clear();
final double getSimStartTime()
final Map< Id< Person >, MobsimAgent > getAgents()
Id< Person > getPersonId()
final MobsimAgent getAgent(Id< Person > agentId)
void addHandler(final EventHandler handler)
final double getSimTimestepSize()
double getSimulationTime()
double getActivityEndTime()