Eclipse SUMO - Simulation of Urban MObility
MSCalibrator.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2005-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
16 // Calibrates the flow on an edge by removing an inserting vehicles
17 /****************************************************************************/
18 #ifndef MSCalibrator_h
19 #define MSCalibrator_h
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <config.h>
26 
27 #include <string>
28 #include <vector>
29 #include <utils/common/Command.h>
34 
35 
36 // ===========================================================================
37 // class declarations
38 // ===========================================================================
39 class OutputDevice;
40 class MSRouteProbe;
41 
42 
43 // ===========================================================================
44 // class definitions
45 // ===========================================================================
50 class MSCalibrator : public MSTrigger, public MSRouteHandler, public Command, public MSDetectorFileOutput {
51 public:
53  MSCalibrator(const std::string& id,
54  const MSEdge* const edge,
55  MSLane* lane,
56  const double pos,
57  const std::string& aXMLFilename,
58  const std::string& outputFilename,
59  const SUMOTime freq, const double length,
60  const MSRouteProbe* probe,
61  const std::string& vTypes,
62  bool addLaneMeanData = true);
63 
65  virtual ~MSCalibrator();
66 
73  void writeXMLOutput(OutputDevice& dev, SUMOTime startTime, SUMOTime stopTime);
74 
75 
84  void writeXMLDetectorProlog(OutputDevice& dev) const;
85 
88  virtual SUMOTime execute(SUMOTime currentTime);
89 
90  const std::string& getID() const {
92  return MSTrigger::getID();
93  }
94 
96  static void cleanup();
97 
98 
99 
100 protected:
101  class CalibratorCommand : public Command {
102  public:
104  myCalibrator(cali) {}
105 
106  SUMOTime execute(SUMOTime currentTime) {
107  return myCalibrator->execute(currentTime);
108  }
109 
110  private:
112  };
113 
114 
116 
117 
125  virtual void myStartElement(int element,
126  const SUMOSAXAttributes& attrs);
127 
134  virtual void myEndElement(int element);
136 
137 
138 
140  public:
141  VehicleRemover(MSLane* lane, int laneIndex, MSCalibrator* parent) :
142  MSMoveReminder(parent->getID(), lane, true), myLaneIndex(laneIndex), myParent(parent) {}
143 
145 
146 
157  virtual bool notifyEnter(SUMOTrafficObject& veh, MSMoveReminder::Notification reason, const MSLane* enteredLane = 0);
158 
159  void disable() {
160  myParent = 0;
161  }
162 
163  private:
166  };
167  friend class VehicleRemover;
168 
169  // @return whether the current state is active (GUI)
170  bool isActive() const {
171  return myAmActive;
172  }
173 
174 protected:
175 
176  struct AspiredState {
177  AspiredState() : begin(-1), end(-1), q(-1.), v(-1.), vehicleParameter(0) {}
180  double q;
181  double v;
183  };
184 
185  void intervalEnd();
186 
187  bool isCurrentStateActive(SUMOTime time);
188 
189  bool tryEmit(MSLane* lane, MSVehicle* vehicle);
190 
191  void init();
192 
193  inline virtual int passed() const {
194  // calibrator measures at start of segment
195  // vehicles drive to the end of an edge by default so they count as passed
196  // but vaporized vehicles do not count
197  // if the calibrator is located on a short edge, the vehicles are
198  // vaporized on the next edge so we cannot rely on myEdgeMeanData.nVehVaporized
200  }
201 
203  int totalWished() const;
204 
206  double currentFlow() const;
207 
209  double currentSpeed() const;
210 
211  /* @brief returns whether the lane is jammed although it should not be
212  * @param[in] lane The lane to check or all for negative values
213  */
214  bool invalidJam(int laneIndex) const;
215 
216  inline int inserted() const {
217  return myInserted;
218  }
219  inline int removed() const {
220  return myRemoved;
221  }
222  inline int clearedInJam() const {
223  return myClearedInJam;
224  }
225 
226  /* @brief returns the number of vehicles (of the current type) that still
227  * fit on the given lane
228  * @param[in] lane The lane to check (return the maximum of all lanes for negative values)
229  */
230  int remainingVehicleCapacity(int laneIndex) const;
231 
233  virtual void reset();
234 
236  virtual void updateMeanData();
237 
241  return myToRemove.insert(veh->getID()).second;
242  };
243 
244 
247  bool removePending();
248 
250  std::string getNewVehicleID();
251 
252 protected:
254  const MSEdge* const myEdge;
256  MSLane* const myLane;
258  const double myPos;
260  const MSRouteProbe* const myProbe;
262  std::vector<MSMeanData_Net::MSLaneMeanDataValues*> myLaneMeanData;
267 
269  std::vector<AspiredState> myIntervals;
271  std::vector<AspiredState>::const_iterator myCurrentStateInterval;
272 
273  std::vector<VehicleRemover*> myVehicleRemovers;
274 
279  std::set<std::string> myToRemove;
280 
283 
297  bool myDidInit;
302 
305 
308 
309  /* @brief objects which need to live longer than the MSCalibrator
310  * instance which created them */
311  static std::vector<MSMoveReminder*> LeftoverReminders;
312  static std::vector<SUMOVehicleParameter*> LeftoverVehicleParameters;
313 
314 };
315 
316 #endif
317 
318 /****************************************************************************/
MSCalibrator::myRemoved
int myRemoved
The number of vehicles that were removed in the current interval.
Definition: MSCalibrator.h:287
MSCalibrator::myClearedInJam
int myClearedInJam
The number of vehicles that were removed when clearin a jam.
Definition: MSCalibrator.h:291
MSCalibrator::scheduleRemoval
bool scheduleRemoval(MSVehicle *veh)
try to schedule the givne vehicle for removal. return true if it isn't already scheduled
Definition: MSCalibrator.h:240
MSCalibrator::myPos
const double myPos
the position on the edge where this calibrator lies
Definition: MSCalibrator.h:258
MSCalibrator::AspiredState::vehicleParameter
SUMOVehicleParameter * vehicleParameter
Definition: MSCalibrator.h:182
SUMOTrafficObject
Representation of a vehicle or person.
Definition: SUMOTrafficObject.h:47
MSCalibrator::passed
virtual int passed() const
Definition: MSCalibrator.h:193
MSCalibrator::getID
const std::string & getID() const
Definition: MSCalibrator.h:90
MSCalibrator::AspiredState::AspiredState
AspiredState()
Definition: MSCalibrator.h:177
MSCalibrator::VehicleRemover::disable
void disable()
Definition: MSCalibrator.h:159
MSCalibrator::myHaveWarnedAboutClearingJam
bool myHaveWarnedAboutClearingJam
The default (maximum) speed on the segment.
Definition: MSCalibrator.h:301
MSCalibrator::AspiredState::v
double v
Definition: MSCalibrator.h:181
MSDetectorFileOutput
Base of value-generating classes (detectors)
Definition: MSDetectorFileOutput.h:63
MSLane
Representation of a lane in the micro simulation.
Definition: MSLane.h:82
MSCalibrator::clearedInJam
int clearedInJam() const
Definition: MSCalibrator.h:222
MSCalibrator::currentFlow
double currentFlow() const
flow in the current interval in veh/h
Definition: MSCalibrator.cpp:248
OutputDevice
Static storage of an output device and its base (abstract) implementation.
Definition: OutputDevice.h:63
MSCalibrator::myInserted
int myInserted
The number of vehicles that were inserted in the current interval.
Definition: MSCalibrator.h:289
MSCalibrator::myHaveInvalidJam
bool myHaveInvalidJam
whether the calibrator has registered an invalid jam in the last execution step
Definition: MSCalibrator.h:307
MSCalibrator::myFrequency
SUMOTime myFrequency
The frequeny with which to check for calibration.
Definition: MSCalibrator.h:285
MSCalibrator::myOutput
OutputDevice * myOutput
The device for xml statistics.
Definition: MSCalibrator.h:282
MSRouteProbe
Writes routes of vehicles passing a certain edge.
Definition: MSRouteProbe.h:60
MSCalibrator::MSCalibrator
MSCalibrator(const std::string &id, const MSEdge *const edge, MSLane *lane, const double pos, const std::string &aXMLFilename, const std::string &outputFilename, const SUMOTime freq, const double length, const MSRouteProbe *probe, const std::string &vTypes, bool addLaneMeanData=true)
Definition: MSCalibrator.cpp:57
MSCalibrator::currentSpeed
double currentSpeed() const
measured speed in the current interval
Definition: MSCalibrator.cpp:254
MSCalibrator::myCurrentStateInterval
std::vector< AspiredState >::const_iterator myCurrentStateInterval
Iterator pointing to the current interval.
Definition: MSCalibrator.h:271
MSMeanData_Net::MSLaneMeanDataValues
Data structure for mean (aggregated) edge/lane values.
Definition: MSMeanData_Net.h:66
MSCalibrator::AspiredState::end
SUMOTime end
Definition: MSCalibrator.h:179
MSCalibrator::removed
int removed() const
Definition: MSCalibrator.h:219
SUMOTime
long long int SUMOTime
Definition: SUMOTime.h:34
MSCalibrator::VehicleRemover::VehicleRemover
VehicleRemover(MSLane *lane, int laneIndex, MSCalibrator *parent)
Definition: MSCalibrator.h:141
MSCalibrator::mySpeedIsDefault
bool mySpeedIsDefault
The information whether the speed adaption has been reset.
Definition: MSCalibrator.h:293
SUMOVehicleParameter
Structure representing possible vehicle parameter.
Definition: SUMOVehicleParameter.h:297
MSCalibrator::myMeanDataParent
MSMeanData_Net myMeanDataParent
dummy parent to retrieve vType filter
Definition: MSCalibrator.h:266
MSCalibrator::CalibratorCommand
Definition: MSCalibrator.h:101
MSCalibrator::VehicleRemover::myParent
MSCalibrator * myParent
Definition: MSCalibrator.h:165
MSCalibrator::myEndElement
virtual void myEndElement(int element)
Called on the closing of a tag;.
Definition: MSCalibrator.cpp:201
MSDetectorFileOutput.h
MSMeanData_Net.h
MSCalibrator::init
void init()
Definition: MSCalibrator.cpp:113
MSCalibrator::myDefaultSpeed
double myDefaultSpeed
The default (maximum) speed on the segment.
Definition: MSCalibrator.h:299
MSMoveReminder
Something on a lane to be noticed about vehicle movement.
Definition: MSMoveReminder.h:66
MSCalibrator::myLane
MSLane *const myLane
the lane on which this calibrator lies (0 if the whole edge is covered at once)
Definition: MSCalibrator.h:256
MSCalibrator::VehicleRemover::myLaneIndex
int myLaneIndex
Definition: MSCalibrator.h:164
MSCalibrator::VehicleRemover
Definition: MSCalibrator.h:139
MSCalibrator::isActive
bool isActive() const
Definition: MSCalibrator.h:170
MSCalibrator::myDidInit
bool myDidInit
The information whether init was called.
Definition: MSCalibrator.h:297
MSCalibrator::CalibratorCommand::execute
SUMOTime execute(SUMOTime currentTime)
Executes the command.
Definition: MSCalibrator.h:106
MSCalibrator::myLaneMeanData
std::vector< MSMeanData_Net::MSLaneMeanDataValues * > myLaneMeanData
data collector for the calibrator
Definition: MSCalibrator.h:262
MSCalibrator::myDidSpeedAdaption
bool myDidSpeedAdaption
The information whether speed was adapted in the current interval.
Definition: MSCalibrator.h:295
MSCalibrator::reset
virtual void reset()
reset collected vehicle data
Definition: MSCalibrator.cpp:427
MSCalibrator::CalibratorCommand::myCalibrator
MSCalibrator * myCalibrator
Definition: MSCalibrator.h:111
MSCalibrator::updateMeanData
virtual void updateMeanData()
aggregate lane values
Definition: MSCalibrator.cpp:499
MSCalibrator::myAmActive
bool myAmActive
whether the calibrator was active when last checking
Definition: MSCalibrator.h:304
MSCalibrator::~MSCalibrator
virtual ~MSCalibrator()
Definition: MSCalibrator.cpp:127
MSCalibrator::invalidJam
bool invalidJam(int laneIndex) const
Definition: MSCalibrator.cpp:436
MSCalibrator::totalWished
int totalWished() const
number of vehicles expected to pass this interval
Definition: MSCalibrator.cpp:237
MSEdge
A road/street connecting two junctions.
Definition: MSEdge.h:78
MSCalibrator::myStartElement
virtual void myStartElement(int element, const SUMOSAXAttributes &attrs)
Called on the opening of a tag;.
Definition: MSCalibrator.cpp:138
MSTrigger.h
MSCalibrator::myEdgeMeanData
MSMeanData_Net::MSLaneMeanDataValues myEdgeMeanData
accumlated data for the whole edge
Definition: MSCalibrator.h:264
MSCalibrator::myProbe
const MSRouteProbe *const myProbe
the route probe to retrieve routes from
Definition: MSCalibrator.h:260
MSCalibrator::cleanup
static void cleanup()
cleanup remaining data structures
Definition: MSCalibrator.cpp:485
MSMeanData_Net
Network state mean data collector for edges/lanes.
Definition: MSMeanData_Net.h:57
MSCalibrator::myVehicleRemovers
std::vector< VehicleRemover * > myVehicleRemovers
Definition: MSCalibrator.h:273
MSCalibrator::CalibratorCommand::CalibratorCommand
CalibratorCommand(MSCalibrator *cali)
Definition: MSCalibrator.h:103
MSTrigger
An abstract device that changes the state of the micro simulation.
Definition: MSTrigger.h:40
MSCalibrator::remainingVehicleCapacity
int remainingVehicleCapacity(int laneIndex) const
Definition: MSCalibrator.cpp:459
MSCalibrator::removePending
bool removePending()
remove any vehicles which are scheduled for removal. return true if removals took place
Definition: MSCalibrator.cpp:264
MSCalibrator::writeXMLOutput
void writeXMLOutput(OutputDevice &dev, SUMOTime startTime, SUMOTime stopTime)
Write the generated output to the given device.
Definition: MSCalibrator.cpp:550
MSCalibrator::AspiredState
Definition: MSCalibrator.h:176
MSCalibrator::myToRemove
std::set< std::string > myToRemove
set of vehicle ids to remove
Definition: MSCalibrator.h:279
MSCalibrator::writeXMLDetectorProlog
void writeXMLDetectorProlog(OutputDevice &dev) const
Open the XML-output.
Definition: MSCalibrator.cpp:574
MSCalibrator::getNewVehicleID
std::string getNewVehicleID()
determine id of new vehicle from calibrator state
Definition: MSCalibrator.cpp:579
MSCalibrator::isCurrentStateActive
bool isCurrentStateActive(SUMOTime time)
Definition: MSCalibrator.cpp:227
Command
Base (microsim) event class.
Definition: Command.h:52
MSRouteHandler
Parser and container for routes during their loading.
Definition: MSRouteHandler.h:53
MSBaseVehicle::getID
const std::string & getID() const
Returns the name of the vehicle.
Definition: MSBaseVehicle.cpp:138
MSCalibrator::VehicleRemover::notifyEnter
virtual bool notifyEnter(SUMOTrafficObject &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Checks whether the reminder is activated by a vehicle entering the lane.
Definition: MSCalibrator.cpp:509
config.h
MSCalibrator::LeftoverReminders
static std::vector< MSMoveReminder * > LeftoverReminders
Definition: MSCalibrator.h:311
MSCalibrator::tryEmit
bool tryEmit(MSLane *lane, MSVehicle *vehicle)
MSCalibrator::LeftoverVehicleParameters
static std::vector< SUMOVehicleParameter * > LeftoverVehicleParameters
Definition: MSCalibrator.h:312
MSCalibrator::AspiredState::begin
SUMOTime begin
Definition: MSCalibrator.h:178
MSCalibrator::AspiredState::q
double q
Definition: MSCalibrator.h:180
MSCalibrator::inserted
int inserted() const
Definition: MSCalibrator.h:216
MSMeanData_Net::MSLaneMeanDataValues::nVehEntered
int nVehEntered
The number of vehicles that entered this lane within the sample interval.
Definition: MSMeanData_Net.h:158
Command.h
MSMeanData_Net::MSLaneMeanDataValues::nVehDeparted
int nVehDeparted
Definition: MSMeanData_Net.h:152
MSCalibrator
Calibrates the flow on a segment to a specified one.
Definition: MSCalibrator.h:50
MSCalibrator::intervalEnd
void intervalEnd()
Definition: MSCalibrator.cpp:213
MSCalibrator::myIntervals
std::vector< AspiredState > myIntervals
List of adaptation intervals.
Definition: MSCalibrator.h:269
MSCalibrator::myEdge
const MSEdge *const myEdge
the edge on which this calibrator lies
Definition: MSCalibrator.h:254
MSRouteHandler.h
SUMOSAXAttributes
Encapsulated SAX-Attributes.
Definition: SUMOSAXAttributes.h:56
Named::getID
const std::string & getID() const
Returns the id.
Definition: Named.h:76
MSMoveReminder::Notification
Notification
Definition of a vehicle state.
Definition: MSMoveReminder.h:91
MSCalibrator::execute
virtual SUMOTime execute(SUMOTime currentTime)
Definition: MSCalibrator.cpp:287
MSVehicle
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:79