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-sim.org/
16 // Copyright (C) 2001-2013 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>
59 
60 // ===========================================================================
61 // class declarations
62 // ===========================================================================
63 class MSEdge;
64 class MSEdgeControl;
65 class MSJunctionControl;
66 class MSInsertionControl;
68 class MSPersonControl;
69 class MSVehicle;
70 class MSRoute;
71 class MSLane;
72 class MSTLLogicControl;
73 class MSDetectorControl;
74 class ShapeContainer;
75 class BinaryInputDevice;
77 class SUMOVehicle;
78 
79 
80 // ===========================================================================
81 // class definitions
82 // ===========================================================================
87 class MSNet {
88 public:
105  };
106 
107 
108 public:
113  static MSNet* getInstance();
114 
115 
130  MSNet(MSVehicleControl* vc, MSEventControl* beginOfTimestepEvents,
131  MSEventControl* endOfTimestepEvents, MSEventControl* insertionEvents,
132  ShapeContainer* shapeCont = 0);
133 
134 
136  virtual ~MSNet();
137 
138 
150  void closeBuilding(MSEdgeControl* edges, MSJunctionControl* junctions,
151  SUMORouteLoaderControl* routeLoaders, MSTLLogicControl* tlc,
152  std::vector<SUMOTime> stateDumpTimes, std::vector<std::string> stateDumpFiles);
153 
154 
158  static void clearAll();
159 
160 
168  int simulate(SUMOTime start, SUMOTime stop);
169 
170 
174  void simulationStep();
175 
177  void loadRoutes();
178 
179 
187  void closeSimulation(SUMOTime start);
188 
189 
195  SimulationState simulationState(SUMOTime stopTime) const;
196 
197 
201  static std::string getStateMessage(SimulationState state);
202 
203 
208 
209 
213  void writeOutput();
214 
215 
219  bool logSimulationDuration() const;
220 
221 
223 
224 
229  void preSimStepOutput() const;
230 
231 
236  void postSimStepOutput() const;
237  //}
238 
239 
242 
249  return *myVehicleControl;
250  }
251 
252 
262 
263 
270  return *myEdges;
271  }
272 
273 
280  return *myInserter;
281  }
282 
283 
290  return *myDetectorControl;
291  }
292 
293 
300  return *myLogics;
301  }
302 
303 
310  return *myJunctions;
311  }
312 
313 
320  return *myBeginOfTimestepEvents;
321  }
322 
323 
330  return *myEndOfTimestepEvents;
331  }
332 
333 
340  return *myInsertionEvents;
341  }
342 
343 
350  return *myShapeContainer;
351  }
352 
353 
361 
362 
363 
366 
378  bool addBusStop(MSBusStop* busStop);
379 
380 
385  MSBusStop* getBusStop(const std::string& id) const;
386 
387 
393  std::string getBusStopID(const MSLane* lane, const SUMOReal pos) const;
395 
396 
397 
398 
399 
400 
403 
418  };
419 
420 
425  public:
428 
430  virtual ~VehicleStateListener() { }
431 
436  virtual void vehicleStateChanged(const SUMOVehicle* const vehicle, VehicleState to) = 0;
437 
438  };
439 
440 
444  void addVehicleStateListener(VehicleStateListener* listener);
445 
446 
450  void removeVehicleStateListener(VehicleStateListener* listener);
451 
452 
458  void informVehicleStateListener(const SUMOVehicle* const vehicle, VehicleState to);
460 
461 
469  static SUMOReal getTravelTime(const MSEdge* const e, const SUMOVehicle* const v, SUMOReal t);
470 
471 
479  static SUMOReal getEffort(const MSEdge* const e, const SUMOVehicle* const v, SUMOReal t);
480 
481 
482  /* @brief get the router, initialize on first use
483  * @param[in] prohibited The vector of forbidden edges (optional)
484  */
486  const std::vector<MSEdge*>& prohibited = std::vector<MSEdge*>()) const;
488  const std::vector<MSEdge*>& prohibited = std::vector<MSEdge*>()) const;
489 
490 
491 protected:
493  static MSNet* myInstance;
494 
497 
500 
501 
502 
505 
531 
532 
533 
536 
539 
542 
545 
548 
551  //}
552 
553 
554 
557 
559  std::vector<SUMOTime> myStateDumpTimes;
561  std::vector<std::string> myStateDumpFiles;
563 
564 
567 
568 
571 
573  std::vector<VehicleStateListener*> myVehicleStateListeners;
574 
575 
576  /* @brief The router instance for routing by trigger and by traci
577  * @note MSDevice_Routing has its own instance since it uses a different weight function
578  * @note we provide one member for every switchable router type
579  * because the class structure makes it inconvenient to use a superclass*/
580  mutable bool myRouterTTInitialized;
584 
585 
586 private:
588  MSNet(const MSNet&);
589 
591  MSNet& operator=(const MSNet&);
592 
593 
594 };
595 
596 
597 #endif
598 
599 /****************************************************************************/
600 
The vehicle has departed (was inserted into the network)
Definition: MSNet.h:409
void postSimStepOutput() const
Prints the statistics of the step at its end.
Definition: MSNet.cpp:626
Representation of a vehicle in the micro simulation.
Definition: MSVehicle.h:77
Interface for objects listening to vehicle state changes.
Definition: MSNet.h:424
long mySimStepEnd
Definition: MSNet.h:544
void removeVehicleStateListener(VehicleStateListener *listener)
Removes a vehicle states listener.
Definition: MSNet.cpp:659
MSEventControl * myEndOfTimestepEvents
Controls events executed at the end of a time step;.
Definition: MSNet.h:523
static SUMOReal getEffort(const MSEdge *const e, const SUMOVehicle *const v, SUMOReal t)
Returns the effort to pass an edge.
Definition: MSNet.cpp:118
The simulation contains too many vehicles (.
Definition: MSNet.h:104
MSEventControl & getEndOfTimestepEvents()
Returns the event control for events executed at the end of a time step.
Definition: MSNet.h:329
MSVehicleControl * myVehicleControl
Controls vehicle building and deletion;.
Definition: MSNet.h:507
std::vector< SUMOTime > myStateDumpTimes
Times at which a state shall be written.
Definition: MSNet.h:559
int simulate(SUMOTime start, SUMOTime stop)
Simulates from timestep start to stop.
Definition: MSNet.cpp:257
virtual void vehicleStateChanged(const SUMOVehicle *const vehicle, VehicleState to)=0
Called if a vehicle changes its state.
MSPersonControl * myPersonControl
Controls person building and deletion;.
Definition: MSNet.h:509
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:150
MSEdgeControl * myEdges
Controls edges, performs vehicle movement;.
Definition: MSNet.h:511
The final simulation step has been performed.
Definition: MSNet.h:96
std::vector< std::string > myStateDumpFiles
The names for the state files.
Definition: MSNet.h:561
bool myLogExecutionTime
Information whether the simulation duration shall be logged.
Definition: MSNet.h:538
Storage for geometrical objects.
Detectors container; responsible for string and output generation.
A storage for edge travel times and efforts.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step (in s)
Definition: MSNet.cpp:500
SUMOAbstractRouter< MSEdge, SUMOVehicle > & getRouterEffort(const std::vector< MSEdge * > &prohibited=std::vector< MSEdge * >()) const
Definition: MSNet.cpp:730
std::string getBusStopID(const MSLane *lane, const SUMOReal pos) const
Returns the bus stop close to the given position.
Definition: MSNet.cpp:690
void addVehicleStateListener(VehicleStateListener *listener)
Adds a vehicle states listener.
Definition: MSNet.cpp:651
SimulationState
Possible states of a simulation - running or stopped with different reasons.
Definition: MSNet.h:92
The simulated network and simulation perfomer.
Definition: MSNet.h:87
SUMOLong myVehiclesMoved
The overall number of vehicle movements.
Definition: MSNet.h:550
ShapeContainer * myShapeContainer
A container for geometrical shapes;.
Definition: MSNet.h:527
Container for junctions; performs operations on all stored junctions.
bool addBusStop(MSBusStop *busStop)
Adds a bus stop.
Definition: MSNet.cpp:678
A class that stores and controls tls and switching of their programs.
A road/street connecting two junctions.
Definition: MSEdge.h:73
long mySimStepBegin
The last simulation step begin, end and duration.
Definition: MSNet.h:544
The simulation does not contain further vehicles.
Definition: MSNet.h:98
An error occured during the simulation step.
Definition: MSNet.h:102
void writeOutput()
Write netstate, summary and detector output.
Definition: MSNet.cpp:506
The vehicle got a new route.
Definition: MSNet.h:417
The vehicle arrived at his destination (is deleted)
Definition: MSNet.h:415
MSInsertionControl * myInserter
Controls vehicle insertion;.
Definition: MSNet.h:517
Representation of a vehicle.
Definition: SUMOVehicle.h:63
SUMORouteLoaderControl * myRouteLoaders
Route loader for dynamic loading of routes.
Definition: MSNet.h:496
ShapeContainer & getShapeContainer()
Returns the shapes container.
Definition: MSNet.h:349
void closeSimulation(SUMOTime start)
Closes the simulation (all files, connections, etc.)
Definition: MSNet.cpp:308
bool myLogStepNumber
Information whether the number of the simulation step shall be logged.
Definition: MSNet.h:541
MSTLLogicControl & getTLSControl()
Returns the tls logics control.
Definition: MSNet.h:299
A lane area vehicles can halt at.
Definition: MSBusStop.h:63
MSVehicleControl & getVehicleControl()
Returns the vehicle control.
Definition: MSNet.h:248
static SUMOReal getTravelTime(const MSEdge *const e, const SUMOVehicle *const v, SUMOReal t)
Returns the travel time to pass an edge.
Definition: MSNet.cpp:132
MSDetectorControl * myDetectorControl
Controls detectors;.
Definition: MSNet.h:519
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:515
The connection to a client was closed by the client.
Definition: MSNet.h:100
DijkstraRouterTT_ByProxi< MSEdge, SUMOVehicle, prohibited_withRestrictions< MSEdge, SUMOVehicle > > * myRouterTTDijkstra
Definition: MSNet.h:581
The simulation is running.
Definition: MSNet.h:94
MSNet & operator=(const MSNet &)
Invalidated assignment operator.
The vehicle started to teleport.
Definition: MSNet.h:411
#define SUMOLong
Definition: config.h:218
void preSimStepOutput() const
Prints the current step number.
Definition: MSNet.cpp:620
MSBusStop * getBusStop(const std::string &id) const
Returns the named bus stop.
Definition: MSNet.cpp:684
AStarRouterTT_ByProxi< MSEdge, SUMOVehicle, prohibited_withRestrictions< MSEdge, SUMOVehicle > > * myRouterTTAStar
Definition: MSNet.h:582
MSDetectorControl & getDetectorControl()
Returns the detector control.
Definition: MSNet.h:289
Inserts vehicles into the network when their departure time is reached.
VehicleState
Definition of a vehicle state.
Definition: MSNet.h:405
VehicleStateListener()
Constructor.
Definition: MSNet.h:427
The vehicle was built, but has not yet departed.
Definition: MSNet.h:407
std::vector< VehicleStateListener * > myVehicleStateListeners
Container for vehicle state listener.
Definition: MSNet.h:573
static MSNet * myInstance
Unique instance of MSNet.
Definition: MSNet.h:493
MSEventControl & getInsertionEvents()
Returns the event control for insertion events.
Definition: MSNet.h:339
static void clearAll()
Clears all dictionaries.
Definition: MSNet.cpp:487
bool myRouterTTInitialized
Definition: MSNet.h:580
SimulationState simulationState(SUMOTime stopTime) const
Called after a simulation step, this method returns the current simulation state. ...
Definition: MSNet.cpp:435
MSJunctionControl * myJunctions
Controls junctions, realizes right-of-way rules;.
Definition: MSNet.h:513
virtual MSPersonControl & getPersonControl()
Returns the person control.
Definition: MSNet.cpp:602
MSInsertionControl & getInsertionControl()
Returns the insertion control.
Definition: MSNet.h:279
MSEventControl * myBeginOfTimestepEvents
Controls events executed at the begin of a time step;.
Definition: MSNet.h:521
virtual ~VehicleStateListener()
Destructor.
Definition: MSNet.h:430
MSEdgeWeightsStorage * myEdgeWeights
The net&#39;s knowledge about edge efforts/travel times;.
Definition: MSNet.h:529
MSNet(MSVehicleControl *vc, MSEventControl *beginOfTimestepEvents, MSEventControl *endOfTimestepEvents, MSEventControl *insertionEvents, ShapeContainer *shapeCont=0)
Constructor.
Definition: MSNet.cpp:158
SUMOAbstractRouter< MSEdge, SUMOVehicle > & getRouterTT(const std::vector< MSEdge * > &prohibited=std::vector< MSEdge * >()) const
Definition: MSNet.cpp:703
int SUMOTime
Definition: SUMOTime.h:43
void informVehicleStateListener(const SUMOVehicle *const vehicle, VehicleState to)
Informs all added listeners about a vehicle&#39;s state change.
Definition: MSNet.cpp:668
long mySimBeginMillis
The overall simulation duration.
Definition: MSNet.h:547
virtual ~MSNet()
Destructor.
Definition: MSNet.cpp:224
#define SUMOReal
Definition: config.h:221
static std::string getStateMessage(SimulationState state)
Returns the message to show if a certain state occurs.
Definition: MSNet.cpp:466
MSEdgeControl & getEdgeControl()
Returns the edge control.
Definition: MSNet.h:269
bool logSimulationDuration() const
Returns whether duration shall be logged.
Definition: MSNet.cpp:596
MSJunctionControl & getJunctionControl()
Returns the junctions control.
Definition: MSNet.h:309
SUMOTime myStep
Current time step.
Definition: MSNet.h:499
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:201
NamedObjectCont< MSBusStop * > myBusStopDict
Dictionary of bus stops.
Definition: MSNet.h:570
void simulationStep()
Performs a single simulation step.
Definition: MSNet.cpp:347
MSEventControl & getBeginOfTimestepEvents()
Returns the event control for events executed at the begin of a time step.
Definition: MSNet.h:319
void loadRoutes()
loads routes for the next few steps
Definition: MSNet.cpp:302
MSEventControl * myInsertionEvents
Controls insertion events;.
Definition: MSNet.h:525
int myTooManyVehicles
Storage for maximum vehicle number.
Definition: MSNet.h:566
Representation of a lane in the micro simulation.
Definition: MSLane.h:73
long mySimStepDuration
Definition: MSNet.h:544
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:413
MSEdgeWeightsStorage & getWeightsStorage()
Returns the net&#39;s internal edge travel times/efforts container.
Definition: MSNet.cpp:611
DijkstraRouterEffort_ByProxi< MSEdge, SUMOVehicle, prohibited_withRestrictions< MSEdge, SUMOVehicle > > * myRouterEffort
Definition: MSNet.h:583