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.
void resetLinkStates(const std::map< MSLink *, LinkState > &vals) const
Resets the states of controlled links.
virtual const MSPhaseDefinition & getCurrentPhaseDef() const =0
Returns the definition of the current phase.
Builds detectors for microsim.
void initMesoTLSPenalties()
initialize optional meso penalties
bool setTrafficLightSignals(SUMOTime t) const
Applies the current signal states to controlled links.
const LaneVector & getLanesAt(int i) const
Returns the list of lanes that are controlled by the signals at the given position.
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.
int getLinkIndex(const MSLink *const link) const
Returns the index of the given link.
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.
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.
Base (microsim) event class.
Definition: Command.h:60
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...
virtual ~MSTrafficLightLogic()
Destructor.
SUMOTime getNextSwitchTime() const
Returns the assumed next switch time.
A class that stores and controls tls and switching of their programs.
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.
const LinkVector & getLinksAt(int i) const
Returns the list of links that are controlled by the signals at the given position.
virtual int getPhaseNumber() const =0
Returns the number of phases.
SUMOTime myDefaultCycleTime
The cycle time (without changes)
MSTrafficLightLogic * myTLLogic
The logic to be executed on a switch.
virtual void init(NLDetectorBuilder &nb)
Initialises the tls with information about incoming lanes.
const LinkVectorVector & getLinks() const
Returns the list of lists of all affected links.
virtual void adaptLinkInformationFrom(const MSTrafficLightLogic &logic)
Applies information about controlled links and lanes from the given logic.
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
const LaneVectorVector & getLaneVectors() const
Returns the list of lists of all lanes controlled by this tls.
std::vector< MSLink * > LinkVector
Definition of the list of links that are subjected to this tls.
SwitchCommand & operator=(const SwitchCommand &)
Invalidated assignment operator.
SUMOTime getNextSwitchTime() const
Returns the assumed next switch time.
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.
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.
const std::string & getProgramID() const
Returns this tl-logic&#39;s id.
long long int SUMOTime
Definition: TraCIDefs.h:51
bool myAmValid
Information whether this switch command is still valid.
virtual SUMOTime trySwitch()=0
Switches to the next phase.
SUMOTime getSpentDuration() const
Returns the duration spent in the current phase.
The definition of a single phase of a tls logic.
Representation of a lane in the micro simulation.
Definition: MSLane.h:77
std::map< MSLink *, LinkState > collectLinkStates() const
Returns the (uncontrolled) states of the controlled links.
SUMOTime getDefaultCycleTime() const
Returns the cycle time (in ms)
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.