SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MSNet.h
Go to the documentation of this file.
1 /****************************************************************************/
13 // The simulated network and simulation perfomer
14 /****************************************************************************/
15 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
16 // Copyright (C) 2001-2014 DLR (http://www.dlr.de/) and contributors
17 /****************************************************************************/
18 //
19 // This file is part of SUMO.
20 // SUMO is free software: you can redistribute it and/or modify
21 // it under the terms of the GNU General Public License as published by
22 // the Free Software Foundation, either version 3 of the License, or
23 // (at your option) any later version.
24 //
25 /****************************************************************************/
26 #ifndef MSNet_h
27 #define MSNet_h
28 
29 
30 // ===========================================================================
31 // included modules
32 // ===========================================================================
33 #ifdef _MSC_VER
34 #include <windows_config.h>
35 #else
36 #include <config.h>
37 #endif
38 
39 #include <typeinfo>
40 #include <vector>
41 #include <map>
42 #include <string>
43 #include <fstream>
44 #include <iostream>
45 #include <cmath>
46 #include <iomanip>
47 #include "MSVehicleControl.h"
48 #include "MSEventControl.h"
49 #include <utils/geom/Boundary.h>
50 #include <utils/geom/Position.h>
51 #include <utils/common/SUMOTime.h>
61 
62 
63 // ===========================================================================
64 // class declarations
65 // ===========================================================================
66 class MSEdge;
67 class MSJunction;
68 class MSEdgeControl;
69 class MSJunctionControl;
70 class MSInsertionControl;
72 class MSPersonControl;
73 class MSVehicle;
74 class MSRoute;
75 class MSLane;
76 class MSTLLogicControl;
77 class MSDetectorControl;
78 class ShapeContainer;
79 class BinaryInputDevice;
81 class SUMOVehicle;
82 
83 
84 // ===========================================================================
85 // class definitions
86 // ===========================================================================
91 class MSNet {
92 public:
109  };
110 
111  //typedef PedestrianRouterDijkstra<MSEdge, MSLane> MSPedestrianRouterDijkstra;
113 
114 
115 
116 public:
121  static MSNet* getInstance();
122 
123 
138  MSNet(MSVehicleControl* vc, MSEventControl* beginOfTimestepEvents,
139  MSEventControl* endOfTimestepEvents, MSEventControl* insertionEvents,
140  ShapeContainer* shapeCont = 0);
141 
142 
144  virtual ~MSNet();
145 
146 
158  void closeBuilding(MSEdgeControl* edges, MSJunctionControl* junctions,
159  SUMORouteLoaderControl* routeLoaders, MSTLLogicControl* tlc,
160  std::vector<SUMOTime> stateDumpTimes, std::vector<std::string> stateDumpFiles);
161 
162 
166  bool hasRestrictions() const {
167  return myHaveRestrictions;
168  }
169 
170 
173  myHaveRestrictions = true;
174  }
175 
176 
180  static void clearAll();
181 
182 
190  int simulate(SUMOTime start, SUMOTime stop);
191 
192 
196  void simulationStep();
197 
198 
200  void loadRoutes();
201 
202 
210  void closeSimulation(SUMOTime start);
211 
212 
218  SimulationState simulationState(SUMOTime stopTime) const;
219 
220 
224  static std::string getStateMessage(SimulationState state);
225 
226 
230  inline SUMOTime getCurrentTimeStep() const {
231  return myStep;
232  }
233 
234 
238  inline void setCurrentTimeStep(const SUMOTime step) {
239  myStep = step;
240  }
241 
242 
246  void writeOutput();
247 
248 
252  bool logSimulationDuration() const;
253 
254 
255 
257 
258 
263  void preSimStepOutput() const;
264 
265 
270  void postSimStepOutput() const;
271  //}
272 
273 
274 
277 
284  return *myVehicleControl;
285  }
286 
287 
297 
298 
305  return *myEdges;
306  }
307 
308 
315  return *myInserter;
316  }
317 
318 
325  return *myDetectorControl;
326  }
327 
328 
335  return *myLogics;
336  }
337 
338 
345  return *myJunctions;
346  }
347 
348 
356  }
357 
358 
365  return myEndOfTimestepEvents;
366  }
367 
368 
375  return myInsertionEvents;
376  }
377 
378 
385  return *myShapeContainer;
386  }
387 
388 
396 
397 
398 
401 
413  bool addBusStop(MSBusStop* busStop);
414 
415 
420  MSBusStop* getBusStop(const std::string& id) const;
421 
422 
428  std::string getBusStopID(const MSLane* lane, const SUMOReal pos) const;
430 
431 
432 
435 
458  };
459 
460 
465  public:
468 
470  virtual ~VehicleStateListener() { }
471 
476  virtual void vehicleStateChanged(const SUMOVehicle* const vehicle, VehicleState to) = 0;
477 
478  };
479 
480 
484  void addVehicleStateListener(VehicleStateListener* listener);
485 
486 
490  void removeVehicleStateListener(VehicleStateListener* listener);
491 
492 
498  void informVehicleStateListener(const SUMOVehicle* const vehicle, VehicleState to);
500 
501 
502 
510  static SUMOReal getTravelTime(const MSEdge* const e, const SUMOVehicle* const v, SUMOReal t);
511 
512 
520  static SUMOReal getEffort(const MSEdge* const e, const SUMOVehicle* const v, SUMOReal t);
521 
522 
523  /* @brief get the router, initialize on first use
524  * @param[in] prohibited The vector of forbidden edges (optional)
525  */
527  const std::vector<MSEdge*>& prohibited = std::vector<MSEdge*>()) const;
529  const std::vector<MSEdge*>& prohibited = std::vector<MSEdge*>()) const;
530  MSPedestrianRouterDijkstra& getPedestrianRouter(const std::vector<MSEdge*>& prohibited = std::vector<MSEdge*>()) const;
531 
532 
536  const NamedRTree& getLanesRTree() const;
537 
538 
539 protected:
541  static MSNet* myInstance;
542 
545 
548 
549 
550 
553 
579 
580 
581 
584 
587 
590 
593 
596 
599  //}
600 
601 
602 
605 
607  std::vector<SUMOTime> myStateDumpTimes;
609  std::vector<std::string> myStateDumpFiles;
611 
612 
613 
616 
619 
622 
624  std::vector<VehicleStateListener*> myVehicleStateListeners;
625 
626 
627  /* @brief The router instance for routing by trigger and by traci
628  * @note MSDevice_Routing has its own instance since it uses a different weight function
629  * @note we provide one member for every switchable router type
630  * because the class structure makes it inconvenient to use a superclass*/
631  mutable bool myRouterTTInitialized;
636 
637 
639  mutable std::pair<bool, NamedRTree> myLanesRTree;
640 
641 
643  static const std::string STAGE_EVENTS;
644  static const std::string STAGE_MOVEMENTS;
645  static const std::string STAGE_LANECHANGE;
646  static const std::string STAGE_INSERTIONS;
647 
648 private:
650  MSNet(const MSNet&);
651 
653  MSNet& operator=(const MSNet&);
654 
655 
656 };
657 
658 
659 #endif
660 
661 /****************************************************************************/
662 
The vehicle has departed (was inserted into the network)
Definition: MSNet.h:441
Computes the shortest path through a network using the Dijkstra algorithm.
void postSimStepOutput() const
Prints the statistics of the step at its end.
Definition: MSNet.cpp:662
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:78
Interface for objects listening to vehicle state changes.
Definition: MSNet.h:464
long mySimStepEnd
Definition: MSNet.h:592
void removeVehicleStateListener(VehicleStateListener *listener)
Removes a vehicle states listener.
Definition: MSNet.cpp:695
MSEventControl * myEndOfTimestepEvents
Controls events executed at the end of a time step;.
Definition: MSNet.h:571
static SUMOReal getEffort(const MSEdge *const e, const SUMOVehicle *const v, SUMOReal t)
Returns the effort to pass an edge.
Definition: MSNet.cpp:124
void setRestrictionFound()
Labels the network to contain vehicle class restrictions.
Definition: MSNet.h:172
The simulation contains too many vehicles (.
Definition: MSNet.h:108
MSVehicleControl * myVehicleControl
Controls vehicle building and deletion;.
Definition: MSNet.h:555
std::vector< SUMOTime > myStateDumpTimes
Times at which a state shall be written.
Definition: MSNet.h:607
The base class for an intersection.
Definition: MSJunction.h:59
PedestrianRouterDijkstra< MSEdge, MSLane, MSJunction > MSPedestrianRouterDijkstra
Definition: MSNet.h:112
int simulate(SUMOTime start, SUMOTime stop)
Simulates from timestep start to stop.
Definition: MSNet.cpp:270
virtual void vehicleStateChanged(const SUMOVehicle *const vehicle, VehicleState to)=0
Called if a vehicle changes its state.
A RT-tree for efficient storing of SUMO&#39;s Named objects.
Definition: NamedRTree.h:72
Computes the shortest path through a network using the Dijkstra algorithm.
Definition: AStarRouter.h:71
MSPersonControl * myPersonControl
Controls person building and deletion;.
Definition: MSNet.h:557
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:156
MSEdgeControl * myEdges
Controls edges, performs vehicle movement;.
Definition: MSNet.h:559
void setCurrentTimeStep(const SUMOTime step)
Sets the current simulation step (used by state loading)
Definition: MSNet.h:238
The final simulation step has been performed.
Definition: MSNet.h:100
std::vector< std::string > myStateDumpFiles
The names for the state files.
Definition: MSNet.h:609
bool myLogExecutionTime
Information whether the simulation duration shall be logged.
Definition: MSNet.h:586
Storage for geometrical objects.
static const std::string STAGE_LANECHANGE
Definition: MSNet.h:645
Detectors container; responsible for string and output generation.
A storage for edge travel times and efforts.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
Definition: MSNet.h:230
SUMOAbstractRouter< MSEdge, SUMOVehicle > & getRouterEffort(const std::vector< MSEdge * > &prohibited=std::vector< MSEdge * >()) const
Definition: MSNet.cpp:766
std::string getBusStopID(const MSLane *lane, const SUMOReal pos) const
Returns the bus stop close to the given position.
Definition: MSNet.cpp:726
void addVehicleStateListener(VehicleStateListener *listener)
Adds a vehicle states listener.
Definition: MSNet.cpp:687
SimulationState
Possible states of a simulation - running or stopped with different reasons.
Definition: MSNet.h:96
MSPedestrianRouterDijkstra * myPedestrianRouter
Definition: MSNet.h:635
The simulated network and simulation perfomer.
Definition: MSNet.h:91
Computes the shortest path through a network using the Dijkstra algorithm.
SUMOLong myVehiclesMoved
The overall number of vehicle movements.
Definition: MSNet.h:598
DijkstraRouterTT< MSEdge, SUMOVehicle, prohibited_withRestrictions< MSEdge, SUMOVehicle > > * myRouterTTDijkstra
Definition: MSNet.h:632
ShapeContainer * myShapeContainer
A container for geometrical shapes;.
Definition: MSNet.h:575
std::pair< bool, NamedRTree > myLanesRTree
An RTree structure holding lane IDs.
Definition: MSNet.h:639
Container for junctions; performs operations on all stored junctions.
DijkstraRouterEffort< MSEdge, SUMOVehicle, prohibited_withRestrictions< MSEdge, SUMOVehicle > > * myRouterEffort
Definition: MSNet.h:634
bool addBusStop(MSBusStop *busStop)
Adds a bus stop.
Definition: MSNet.cpp:714
The vehicles starts to stop.
Definition: MSNet.h:455
A class that stores and controls tls and switching of their programs.
A road/street connecting two junctions.
Definition: MSEdge.h:75
long mySimStepBegin
The last simulation step begin, end and duration.
Definition: MSNet.h:592
The simulation does not contain further vehicles.
Definition: MSNet.h:102
An error occured during the simulation step.
Definition: MSNet.h:106
void writeOutput()
Write netstate, summary and detector output.
Definition: MSNet.cpp:539
The vehicle got a new route.
Definition: MSNet.h:449
The vehicle arrived at his destination (is deleted)
Definition: MSNet.h:447
The vehicles starts to park.
Definition: MSNet.h:451
MSInsertionControl * myInserter
Controls vehicle insertion;.
Definition: MSNet.h:565
Representation of a vehicle.
Definition: SUMOVehicle.h:64
SUMORouteLoaderControl * myRouteLoaders
Route loader for dynamic loading of routes.
Definition: MSNet.h:544
ShapeContainer & getShapeContainer()
Returns the shapes container.
Definition: MSNet.h:384
void closeSimulation(SUMOTime start)
Closes the simulation (all files, connections, etc.)
Definition: MSNet.cpp:321
bool myLogStepNumber
Information whether the number of the simulation step shall be logged.
Definition: MSNet.h:589
MSTLLogicControl & getTLSControl()
Returns the tls logics control.
Definition: MSNet.h:334
A lane area vehicles can halt at.
Definition: MSBusStop.h:64
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Definition: MSNet.h:283
MSEventControl * getBeginOfTimestepEvents()
Returns the event control for events executed at the begin of a time step.
Definition: MSNet.h:354
static SUMOReal getTravelTime(const MSEdge *const e, const SUMOVehicle *const v, SUMOReal t)
Returns the travel time to pass an edge.
Definition: MSNet.cpp:138
MSDetectorControl * myDetectorControl
Controls detectors;.
Definition: MSNet.h:567
Stores edges and lanes, performs moving of vehicle.
Definition: MSEdgeControl.h:73
MSTLLogicControl * myLogics
Controls tls logics, realizes waiting on tls rules;.
Definition: MSNet.h:563
The connection to a client was closed by the client.
Definition: MSNet.h:104
The simulation is running.
Definition: MSNet.h:98
MSNet & operator=(const MSNet &)
Invalidated assignment operator.
The vehicle started to teleport.
Definition: MSNet.h:443
#define SUMOLong
Definition: config.h:215
void preSimStepOutput() const
Prints the current step number.
Definition: MSNet.cpp:656
MSBusStop * getBusStop(const std::string &id) const
Returns the named bus stop.
Definition: MSNet.cpp:720
The vehicle ends to park.
Definition: MSNet.h:453
bool myHaveRestrictions
Whether the network contains edges which not all vehicles may pass.
Definition: MSNet.h:615
MSDetectorControl & getDetectorControl()
Returns the detector control.
Definition: MSNet.h:324
bool hasRestrictions() const
Returns whether the network has vehicle class restrictions.
Definition: MSNet.h:166
Inserts vehicles into the network when their departure time is reached.
VehicleState
Definition of a vehicle state.
Definition: MSNet.h:437
MSEventControl * getEndOfTimestepEvents()
Returns the event control for events executed at the end of a time step.
Definition: MSNet.h:364
static const std::string STAGE_MOVEMENTS
Definition: MSNet.h:644
VehicleStateListener()
Constructor.
Definition: MSNet.h:467
The vehicle was built, but has not yet departed.
Definition: MSNet.h:439
std::vector< VehicleStateListener * > myVehicleStateListeners
Container for vehicle state listener.
Definition: MSNet.h:624
static MSNet * myInstance
Unique instance of MSNet.
Definition: MSNet.h:541
static void clearAll()
Clears all dictionaries.
Definition: MSNet.cpp:524
bool myRouterTTInitialized
Definition: MSNet.h:631
SimulationState simulationState(SUMOTime stopTime) const
Called after a simulation step, this method returns the current simulation state. ...
Definition: MSNet.cpp:472
MSJunctionControl * myJunctions
Controls junctions, realizes right-of-way rules;.
Definition: MSNet.h:561
virtual MSPersonControl & getPersonControl()
Returns the person control.
Definition: MSNet.cpp:638
MSInsertionControl & getInsertionControl()
Returns the insertion control.
Definition: MSNet.h:314
MSEventControl * myBeginOfTimestepEvents
Controls events executed at the begin of a time step;.
Definition: MSNet.h:569
virtual ~VehicleStateListener()
Destructor.
Definition: MSNet.h:470
MSEdgeWeightsStorage * myEdgeWeights
The net&#39;s knowledge about edge efforts/travel times;.
Definition: MSNet.h:577
MSNet(MSVehicleControl *vc, MSEventControl *beginOfTimestepEvents, MSEventControl *endOfTimestepEvents, MSEventControl *insertionEvents, ShapeContainer *shapeCont=0)
Constructor.
Definition: MSNet.cpp:164
The vehicle ends to stop.
Definition: MSNet.h:457
SUMOAbstractRouter< MSEdge, SUMOVehicle > & getRouterTT(const std::vector< MSEdge * > &prohibited=std::vector< MSEdge * >()) const
Definition: MSNet.cpp:739
int SUMOTime
Definition: SUMOTime.h:43
MSEventControl * getInsertionEvents()
Returns the event control for insertion events.
Definition: MSNet.h:374
void informVehicleStateListener(const SUMOVehicle *const vehicle, VehicleState to)
Informs all added listeners about a vehicle&#39;s state change.
Definition: MSNet.cpp:704
const NamedRTree & getLanesRTree() const
Returns an RTree that contains lane IDs.
Definition: MSNet.cpp:787
long mySimBeginMillis
The overall simulation duration.
Definition: MSNet.h:595
virtual ~MSNet()
Destructor.
Definition: MSNet.cpp:233
#define SUMOReal
Definition: config.h:218
static std::string getStateMessage(SimulationState state)
Returns the message to show if a certain state occurs.
Definition: MSNet.cpp:503
MSEdgeControl & getEdgeControl()
Returns the edge control.
Definition: MSNet.h:304
bool logSimulationDuration() const
Returns whether duration shall be logged.
Definition: MSNet.cpp:632
MSJunctionControl & getJunctionControl()
Returns the junctions control.
Definition: MSNet.h:344
AStarRouter< MSEdge, SUMOVehicle, prohibited_withRestrictions< MSEdge, SUMOVehicle > > * myRouterTTAStar
Definition: MSNet.h:633
SUMOTime myStep
Current time step.
Definition: MSNet.h:547
The class responsible for building and deletion of vehicles.
void closeBuilding(MSEdgeControl *edges, MSJunctionControl *junctions, SUMORouteLoaderControl *routeLoaders, MSTLLogicControl *tlc, std::vector< SUMOTime > stateDumpTimes, std::vector< std::string > stateDumpFiles)
Closes the network&#39;s building process.
Definition: MSNet.cpp:210
NamedObjectCont< MSBusStop * > myBusStopDict
Dictionary of bus stops.
Definition: MSNet.h:621
void simulationStep()
Performs a single simulation step.
Definition: MSNet.cpp:377
void loadRoutes()
loads routes for the next few steps
Definition: MSNet.cpp:315
MSPedestrianRouterDijkstra & getPedestrianRouter(const std::vector< MSEdge * > &prohibited=std::vector< MSEdge * >()) const
Definition: MSNet.cpp:777
static const std::string STAGE_INSERTIONS
Definition: MSNet.h:646
MSEventControl * myInsertionEvents
Controls insertion events;.
Definition: MSNet.h:573
int myTooManyVehicles
Storage for maximum vehicle number.
Definition: MSNet.h:618
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
long mySimStepDuration
Definition: MSNet.h:592
Encapsulates binary reading operations on a file.
Stores time-dependant events and executes them at the proper time.
The vehicle ended being teleported.
Definition: MSNet.h:445
MSEdgeWeightsStorage & getWeightsStorage()
Returns the net&#39;s internal edge travel times/efforts container.
Definition: MSNet.cpp:647
static const std::string STAGE_EVENTS
string constants for simstep stages
Definition: MSNet.h:643