SUMO - Simulation of Urban MObility
MSTrafficLightLogic.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
21 // The parent class for traffic light logics
22 /****************************************************************************/
23 #ifndef MSTrafficLightLogic_h
24 #define MSTrafficLightLogic_h
25 
26 
27 // ===========================================================================
28 // included modules
29 // ===========================================================================
30 #ifdef _MSC_VER
31 #include <windows_config.h>
32 #else
33 #include <config.h>
34 #endif
35 
36 #include <map>
37 #include <string>
38 #include <bitset>
39 #include <utils/common/Command.h>
42 #include <microsim/MSLink.h>
43 #include "MSPhaseDefinition.h"
44 
45 
46 // ===========================================================================
47 // class declarations
48 // ===========================================================================
49 class MSNet;
50 class MSLink;
51 class MSTLLogicControl;
52 class NLDetectorBuilder;
53 
54 
55 // ===========================================================================
56 // class definitions
57 // ===========================================================================
62 class MSTrafficLightLogic : public Named, public Parameterised {
63 public:
66 
68  typedef std::vector<MSPhaseDefinition*> Phases;
69 
71  typedef std::vector<MSLink*> LinkVector;
72 
74  typedef std::vector<LinkVector> LinkVectorVector;
75 
77  typedef std::vector<MSLane*> LaneVector;
78 
80  typedef std::vector<LaneVector> LaneVectorVector;
82 
83 
84 public:
92  const std::string& id,
93  const std::string& programID,
94  SUMOTime delay,
95  const std::map<std::string, std::string>& parameters);
96 
97 
103  virtual void init(NLDetectorBuilder& nb);
104 
105 
107  virtual ~MSTrafficLightLogic();
108 
109 
110 
113 
119  virtual void addLink(MSLink* link, MSLane* lane, int pos);
120 
121 
129  virtual void adaptLinkInformationFrom(const MSTrafficLightLogic& logic);
130 
131 
135  std::map<MSLink*, LinkState> collectLinkStates() const;
136 
137 
141  void resetLinkStates(const std::map<MSLink*, LinkState>& vals) const;
143 
144 
145 
148 
152  virtual SUMOTime trySwitch() = 0;
153 
154 
161  bool setTrafficLightSignals(SUMOTime t) const;
163 
164 
165 
168 
172  const std::string& getProgramID() const {
173  return myProgramID;
174  }
175 
176 
180  const LaneVectorVector& getLaneVectors() const {
181  return myLanes;
182  }
183 
184 
189  const LaneVector& getLanesAt(int i) const {
190  if (i < (int)myLanes.size()) {
191  return myLanes[i];
192  } else {
193  return myEmptyLaneVector;
194  }
195  }
196 
197 
201  const LinkVectorVector& getLinks() const {
202  return myLinks;
203  }
204 
205 
210  const LinkVector& getLinksAt(int i) const {
211  return myLinks[i];
212  }
213 
214 
219  int getLinkIndex(const MSLink* const link) const;
220 
221 
225  virtual int getPhaseNumber() const = 0;
226 
227 
231  virtual const Phases& getPhases() const = 0;
232 
233 
238  virtual const MSPhaseDefinition& getPhase(int givenstep) const = 0;
239 
243  virtual const std::string getLogicType() const = 0;
245 
246 
247 
250 
254  virtual int getCurrentPhaseIndex() const = 0;
255 
256 
260  virtual const MSPhaseDefinition& getCurrentPhaseDef() const = 0;
261 
262 
267  return myDefaultCycleTime;
268  }
269 
270 
276  SUMOTime getNextSwitchTime() const;
277 
278 
283  SUMOTime getSpentDuration() const;
285 
286 
287 
290 
294  virtual SUMOTime getPhaseIndexAtTime(SUMOTime simStep) const = 0;
295 
296 
301  virtual SUMOTime getOffsetFromIndex(int index) const = 0;
302 
303 
308  virtual int getIndexFromOffset(SUMOTime offset) const = 0;
310 
311 
312 
315 
319  void addOverridingDuration(SUMOTime duration);
320 
321 
326 
327 
334  virtual void changeStepAndDuration(MSTLLogicControl& tlcontrol,
335  SUMOTime simStep, int step, SUMOTime stepDuration) = 0;
336 
338 
339 
340 protected:
345  class SwitchCommand : public Command {
346  public:
352  SwitchCommand(MSTLLogicControl& tlcontrol,
353  MSTrafficLightLogic* tlLogic,
354  SUMOTime nextSwitch);
355 
357  ~SwitchCommand();
358 
363  SUMOTime execute(SUMOTime currentTime);
364 
365 
369  void deschedule(MSTrafficLightLogic* tlLogic);
370 
371 
376  return myAssumedNextSwitch;
377  }
378 
379 
380  private:
383 
386 
389 
391  bool myAmValid;
392 
393  private:
396 
399 
400  };
401 
402 
403 protected:
405  std::string myProgramID;
406 
408  LinkVectorVector myLinks;
409 
411  LaneVectorVector myLanes;
412 
414  std::vector<SUMOTime> myOverridingTimes;
415 
418 
421 
424 
426  static const LaneVector myEmptyLaneVector;
427 
428 private:
430  void initMesoTLSPenalties();
431 
432 
433 private:
436 
439 
440 };
441 
442 
443 #endif
444 
445 /****************************************************************************/
446 
SUMOTime myCurrentDurationIncrement
A value for enlarge the current duration.
virtual const MSPhaseDefinition & getCurrentPhaseDef() const =0
Returns the definition of the current phase.
Builds detectors for microsim.
void initMesoTLSPenalties()
initialize optional meso penalties
MSTLLogicControl & myTLControl
The responsible traffic lights control.
virtual SUMOTime getOffsetFromIndex(int index) const =0
Returns the position (start of a phase during a cycle) from of a given step.
std::vector< SUMOTime > myOverridingTimes
A list of duration overrides.
SwitchCommand(MSTLLogicControl &tlcontrol, MSTrafficLightLogic *tlLogic, SUMOTime nextSwitch)
Constructor.
std::string myProgramID
The id of the logic.
SUMOTime myAssumedNextSwitch
Assumed switch time (may change in case of adaptive traffic lights)
virtual void changeStepAndDuration(MSTLLogicControl &tlcontrol, SUMOTime simStep, int step, SUMOTime stepDuration)=0
Changes the current phase and her duration.
static const LaneVector myEmptyLaneVector
An empty lane vector.
virtual SUMOTime getPhaseIndexAtTime(SUMOTime simStep) const =0
Returns the index of the logic at the given simulation step.
const LaneVectorVector & getLaneVectors() const
Returns the list of lists of all lanes controlled by this tls.
virtual const MSPhaseDefinition & getPhase(int givenstep) const =0
Returns the definition of the phase from the given position within the plan.
virtual int getCurrentPhaseIndex() const =0
Returns the current index within the program.
MSTrafficLightLogic(MSTLLogicControl &tlcontrol, const std::string &id, const std::string &programID, SUMOTime delay, const std::map< std::string, std::string > &parameters)
Constructor.
SUMOTime getNextSwitchTime() const
Returns the assumed next switch time.
Base (microsim) event class.
Definition: Command.h:60
bool setTrafficLightSignals(SUMOTime t) const
Applies the current signal states to controlled links.
void resetLinkStates(const std::map< MSLink *, LinkState > &vals) const
Resets the states of controlled links.
const LinkVectorVector & getLinks() const
Returns the list of lists of all affected links.
int getLinkIndex(const MSLink *const link) const
Returns the index of the given link.
const LinkVector & getLinksAt(int i) const
Returns the list of links that are controlled by the signals at the given position.
The simulated network and simulation perfomer.
Definition: MSNet.h:90
LaneVectorVector myLanes
The list of LaneVectors; each vector contains the incoming lanes that belong to the same link index...
const LaneVector & getLanesAt(int i) const
Returns the list of lanes that are controlled by the signals at the given position.
virtual ~MSTrafficLightLogic()
Destructor.
A class that stores and controls tls and switching of their programs.
SUMOTime getDefaultCycleTime() const
Returns the cycle time (in ms)
void deschedule(MSTrafficLightLogic *tlLogic)
Marks this swicth as invalid (if the phase duration has changed, f.e.)
Class realising the switch between the traffic light phases.
std::vector< LinkVector > LinkVectorVector
Definition of a list that holds lists of links that do have the same attribute.
virtual int getPhaseNumber() const =0
Returns the number of phases.
SUMOTime myDefaultCycleTime
The cycle time (without changes)
const std::string & getProgramID() const
Returns this tl-logic&#39;s id.
MSTrafficLightLogic * myTLLogic
The logic to be executed on a switch.
virtual void init(NLDetectorBuilder &nb)
Initialises the tls with information about incoming lanes.
virtual void adaptLinkInformationFrom(const MSTrafficLightLogic &logic)
Applies information about controlled links and lanes from the given logic.
std::map< MSLink *, LinkState > collectLinkStates() const
Returns the (uncontrolled) states of the controlled links.
virtual const std::string getLogicType() const =0
Returns the type of the logic as a string.
An upper class for objects with additional parameters.
Definition: Parameterised.h:50
void setCurrentDurationIncrement(SUMOTime delay)
Delays current phase by the given delay.
Base class for objects which have an id.
Definition: Named.h:45
std::vector< MSLink * > LinkVector
Definition of the list of links that are subjected to this tls.
SwitchCommand & operator=(const SwitchCommand &)
Invalidated assignment operator.
std::vector< MSPhaseDefinition * > Phases
Definition of a list of phases, being the junction logic.
virtual const Phases & getPhases() const =0
Returns the phases of this tls program.
void addOverridingDuration(SUMOTime duration)
Changes the duration of the next phase.
LinkVectorVector myLinks
The list of LinkVectors; each vector contains the links that belong to the same link index...
std::vector< MSLane * > LaneVector
Definition of the list of arrival lanes subjected to this tls.
std::vector< LaneVector > LaneVectorVector
Definition of a list that holds lists of lanes that do have the same attribute.
SUMOTime getNextSwitchTime() const
Returns the assumed next switch time.
virtual void addLink(MSLink *link, MSLane *lane, int pos)
Adds a link on building.
SwitchCommand * mySwitchCommand
The current switch command.
The parent class for traffic light logics.
long long int SUMOTime
Definition: TraCIDefs.h:51
SUMOTime getSpentDuration() const
Returns the duration spent in the current phase.
bool myAmValid
Information whether this switch command is still valid.
virtual SUMOTime trySwitch()=0
Switches to the next phase.
The definition of a single phase of a tls logic.
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
SUMOTime execute(SUMOTime currentTime)
Executes the regarded junction&#39;s "trySwitch"- method.
virtual int getIndexFromOffset(SUMOTime offset) const =0
Returns the step (the phasenumber) of a given position of the cycle.