MATSIM
WithinDayEngine.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * ReplanningManager.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2011 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 org.matsim.withinday.mobsim;
22 
23 import java.util.LinkedHashMap;
24 import java.util.Map;
25 import java.util.Map.Entry;
26 
27 import jakarta.inject.Inject;
28 import jakarta.inject.Singleton;
29 
30 import org.apache.logging.log4j.LogManager;
31 import org.apache.logging.log4j.Logger;
45 
56 @Singleton
58 
59  private static final Logger log = LogManager.getLogger(WithinDayEngine.class);
60 
62 
63  private boolean initialReplanning = true;
64  private boolean duringActivityReplanning = true;
65  private boolean duringLegReplanning = true;
66 
67  private boolean initialReplanningPerformed = false;
68 
72 
76 
77  private Map<WithinDayDuringActivityReplannerFactory, Tuple<Double, Double>> duringActivityReplannerFactory;
78  private Map<WithinDayDuringLegReplannerFactory, Tuple<Double, Double>> duringLegReplannerFactory;
79 
81 
82  @Inject
83  public WithinDayEngine(EventsManager eventsManager, GlobalConfigGroup globalConfigGroup) {
84  this.eventsManager = eventsManager;
85 
86  this.duringActivityReplannerFactory = new LinkedHashMap<>();
87  this.duringLegReplannerFactory = new LinkedHashMap<>();
88 
89  log.info("Initialize Parallel Replanning Modules");
90  this.parallelInitialReplanner = new ParallelInitialReplanner(globalConfigGroup.getNumberOfThreads(), eventsManager);
91  this.parallelDuringActivityReplanner = new ParallelDuringActivityReplanner(globalConfigGroup.getNumberOfThreads(), eventsManager);
92  this.parallelDuringLegReplanner = new ParallelDuringLegReplanner(globalConfigGroup.getNumberOfThreads(), eventsManager);
93 
94  log.info("Initialize Replanning Modules");
95  this.initialReplanningModule = new InitialReplanningModule(parallelInitialReplanner);
96  this.duringActivityReplanningModule = new DuringActivityReplanningModule(parallelDuringActivityReplanner);
97  this.duringLegReplanningModule = new DuringLegReplanningModule(parallelDuringLegReplanner);
98  }
99 
100  public void doInitialReplanning(boolean value) {
101  initialReplanning = value;
102  }
103 
104  public boolean isInitialReplanning() {
105  return initialReplanning;
106  }
107 
108  public void doDuringActivityReplanning(boolean value) {
109  duringActivityReplanning = value;
110  }
111 
112  public boolean isDuringActivityReplanning() {
114  }
115 
116  public void doDuringLegReplanning(boolean value) {
117  duringLegReplanning = value;
118  }
119 
120  public boolean isDuringLegReplanning() {
121  return duringLegReplanning;
122  }
123 
125  this.parallelInitialReplanner.addWithinDayReplannerFactory(factory);
126  }
127 
129  this.parallelDuringActivityReplanner.addWithinDayReplannerFactory(factory);
130  }
131 
133  this.parallelDuringLegReplanner.addWithinDayReplannerFactory(factory);
134  }
135 
137  this.parallelInitialReplanner.removeWithinDayReplannerFactory(factory);
138  }
139 
141  this.parallelDuringActivityReplanner.removeWithinDayReplannerFactory(factory);
142  }
143 
145  this.parallelDuringLegReplanner.removeWithinDayReplannerFactory(factory);
146  }
147 
148  public void addTimedDuringActivityReplannerFactory(WithinDayDuringActivityReplannerFactory factory, double startReplanning, double endReplanning) {
149  Tuple<Double, Double> tuple = new Tuple<Double, Double>(startReplanning, endReplanning);
150  this.duringActivityReplannerFactory.put(factory, tuple);
151  }
152 
153  public void addTimedDuringLegReplannerFactory(WithinDayDuringLegReplannerFactory factory, double startReplanning, double endReplanning) {
154  Tuple<Double, Double> tuple = new Tuple<Double, Double>(startReplanning, endReplanning);
155  this.duringLegReplannerFactory.put(factory, tuple);
156  }
157 
158  @Override
159  public void doSimStep(double time) {
160 
161  /*
162  * Initial replanning (so far?) cannot be performed in the onPrepareSim()
163  * method since the identifiers and replanners do not know the agents at
164  * that point in time.
165  */
166  if (!initialReplanningPerformed && isInitialReplanning()) {
167  initialReplanningModule.doReplanning(Double.NEGATIVE_INFINITY);//-Inf == before any feasible time step
168  initialReplanningPerformed = true;
169  }
170 
171  for (Entry<WithinDayDuringActivityReplannerFactory, Tuple<Double, Double>> entry : duringActivityReplannerFactory.entrySet()) {
172  if (entry.getValue().getFirst() == time) this.parallelDuringActivityReplanner.addWithinDayReplannerFactory(entry.getKey());
173  if (entry.getValue().getSecond() == time) this.parallelDuringActivityReplanner.removeWithinDayReplannerFactory(entry.getKey());
174  }
175  for (Entry<WithinDayDuringLegReplannerFactory, Tuple<Double, Double>> entry : duringLegReplannerFactory.entrySet()) {
176  if (entry.getValue().getFirst() == time) this.parallelDuringLegReplanner.addWithinDayReplannerFactory(entry.getKey());
177  if (entry.getValue().getSecond() == time) this.parallelDuringLegReplanner.removeWithinDayReplannerFactory(entry.getKey());
178  }
179 
181  duringActivityReplanningModule.doReplanning(time);
182  }
183 
184  if (isDuringLegReplanning()) {
185  duringLegReplanningModule.doReplanning(time);
186  }
187  }
188 
189  @Override
190  public void onPrepareSim() {
191  this.parallelInitialReplanner.onPrepareSim();
192  this.parallelDuringActivityReplanner.onPrepareSim();
193  this.parallelDuringLegReplanner.onPrepareSim();
194 
195  // reset all replanners
196  this.parallelInitialReplanner.resetReplanners();
197  this.parallelDuringActivityReplanner.resetReplanners();
198  this.parallelDuringLegReplanner.resetReplanners();
199 
200  this.initialReplanningPerformed = false;
201  }
202 
203  @Override
204  public void afterSim() {
205  this.parallelInitialReplanner.afterSim();
206  this.parallelDuringActivityReplanner.afterSim();
207  this.parallelDuringLegReplanner.afterSim();
208  }
209 
210  @Override
211  public void setInternalInterface(InternalInterface internalInterface) {
212  this.internalInterface = internalInterface;
213  }
214 
215 
216  @Override
218  return this.internalInterface.getMobsim();
219  }
220 }
void removeInitialReplannerFactory(WithinDayInitialReplannerFactory factory)
void removeDuringLegReplannerFactory(WithinDayDuringLegReplannerFactory factory)
void removeDuringActivityReplannerFactory(WithinDayDuringActivityReplannerFactory factory)
ParallelDuringActivityReplanner parallelDuringActivityReplanner
void addTimedDuringLegReplannerFactory(WithinDayDuringLegReplannerFactory factory, double startReplanning, double endReplanning)
ParallelDuringLegReplanner parallelDuringLegReplanner
void addTimedDuringActivityReplannerFactory(WithinDayDuringActivityReplannerFactory factory, double startReplanning, double endReplanning)
void setInternalInterface(InternalInterface internalInterface)
void addIntialReplannerFactory(WithinDayInitialReplannerFactory factory)
void addDuringLegReplannerFactory(WithinDayDuringLegReplannerFactory factory)
Map< WithinDayDuringActivityReplannerFactory, Tuple< Double, Double > > duringActivityReplannerFactory
WithinDayEngine(EventsManager eventsManager, GlobalConfigGroup globalConfigGroup)
Map< WithinDayDuringLegReplannerFactory, Tuple< Double, Double > > duringLegReplannerFactory
void addDuringActivityReplannerFactory(WithinDayDuringActivityReplannerFactory factory)
ParallelInitialReplanner parallelInitialReplanner
DuringActivityReplanningModule duringActivityReplanningModule
DuringLegReplanningModule duringLegReplanningModule