Class Conflict

All Implemented Interfaces:
java.io.Serializable, java.util.EventListener, Locatable, EventListenerInterface, EventProducerInterface, Identifiable, Drawable, ObjectInterface, LaneBasedObject

public final class Conflict
extends AbstractLaneBasedObject
implements EventListenerInterface
Conflicts deal with traffic on different links/roads that need to consider each other as their paths may be in conflict spatially. A single Conflict represents the one-sided consideration of a conflicting situation. I.e., what is considered a single conflict in traffic theory, is represented by two Conflicts, one on each of the conflicting Lanes.

This class provides easy access to upstream and downstream GTUs through PerceptionIterables using methods getUpstreamGtus and getDownstreamGtus. These methods are efficient in that they reuse underlying data structures if the GTUs are requested at the same time by another GTU.

Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See OpenTrafficSim License.

Version:
$Revision$, $LastChangedDate$, by $Author$, initial version Sep 7, 2016
Author:
Alexander Verbraeck, Peter Knoppers, Wouter Schakel
See Also:
Serialized Form
  • Method Details

    • getUpstreamGtus

      public PerceptionCollectable<HeadwayGTU,​LaneBasedGTU> getUpstreamGtus​(LaneBasedGTU perceivingGtu, HeadwayGtuType headwayGtuType, Length visibility)
      Provides the upstream GTUs.
      Parameters:
      perceivingGtu - LaneBasedGTU; perceiving GTU
      headwayGtuType - HeadwayGtuType; headway GTU type to use
      visibility - Length; distance over which GTU's are provided
      Returns:
      PerceptionIterable<HeadwayGtU>; iterable over the upstream GTUs
    • getDownstreamGtus

      public PerceptionCollectable<HeadwayGTU,​LaneBasedGTU> getDownstreamGtus​(LaneBasedGTU perceivingGtu, HeadwayGtuType headwayGtuType, Length visibility)
      Provides the downstream GTUs.
      Parameters:
      perceivingGtu - LaneBasedGTU; perceiving GTU
      headwayGtuType - HeadwayGtuType; headway GTU type to use
      visibility - Length; distance over which GTU's are provided
      Returns:
      PerceptionIterable<HeadwayGtU>; iterable over the downstream GTUs
    • notify

      public void notify​(EventInterface event) throws java.rmi.RemoteException
      Specified by:
      notify in interface EventListenerInterface
      Throws:
      java.rmi.RemoteException
    • getConflictType

      public ConflictType getConflictType()
      Returns:
      conflictType.
    • getConflictRule

      public ConflictRule getConflictRule()
      Returns:
      conflictRule.
    • conflictPriority

      public ConflictPriority conflictPriority()
      Returns:
      conflictPriority.
    • getLength

      public Length getLength()
      Returns:
      length.
    • getOtherConflict

      public Conflict getOtherConflict()
      Returns:
      otherConflict.
    • getGtuType

      public GTUType getGtuType()
      Returns:
      gtuType.
    • isPermitted

      public boolean isPermitted()
      If permitted, traffic upstream of traffic lights may not be ignored, as these can have green light.
      Returns:
      permitted.
    • getTrafficLightDistance

      public Length getTrafficLightDistance​(Length maxDistance)
      Returns the distance to an upstream traffic light.
      Parameters:
      maxDistance - Length; maximum distance of traffic light
      Returns:
      Length; distance to upstream traffic light, infinite if beyond maximum distance
    • generateConflictPair

      public static void generateConflictPair​(ConflictType conflictType, ConflictRule conflictRule, boolean permitted, Lane lane1, Length longitudinalPosition1, Length length1, GTUDirectionality direction1, OTSLine3D geometry1, GTUType gtuType1, Lane lane2, Length longitudinalPosition2, Length length2, GTUDirectionality direction2, OTSLine3D geometry2, GTUType gtuType2, DEVSSimulatorInterface.TimeDoubleUnit simulator) throws NetworkException
      Creates a pair of conflicts.
      Parameters:
      conflictType - ConflictType; conflict type, i.e. crossing, merge or split
      conflictRule - ConflictRule; conflict rule
      permitted - boolean; whether the conflict is permitted in traffic light control
      lane1 - Lane; lane of conflict 1
      longitudinalPosition1 - Length; longitudinal position of conflict 1
      length1 - Length; Length of conflict 1
      direction1 - GTUDirectionality; GTU direction of conflict 1
      geometry1 - OTSLine3D; geometry of conflict 1
      gtuType1 - GTUType; gtu type of conflict 1
      lane2 - Lane; lane of conflict 2
      longitudinalPosition2 - Length; longitudinal position of conflict 2
      length2 - Length; Length of conflict 2
      direction2 - GTUDirectionality; GTU direction of conflict 2
      geometry2 - OTSLine3D; geometry of conflict 2
      gtuType2 - GTUType; gtu type of conflict 2
      simulator - DEVSSimulatorInterface.TimeDoubleUnit; the simulator for animation and timed events
      Throws:
      NetworkException - if the combination of conflict type and both conflict rules is not correct
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class AbstractLaneBasedObject
    • clone

      public Conflict clone​(CrossSectionElement newCSE, SimulatorInterface.TimeDoubleUnit newSimulator) throws NetworkException
      Clone the LaneBasedObject for e.g., copying a network.
      Specified by:
      clone in class AbstractLaneBasedObject
      Parameters:
      newCSE - CrossSectionElement; the new cross section element to which the clone belongs
      newSimulator - SimulatorInterface.TimeDoubleUnit; the new simulator for this network
      Returns:
      AbstractLaneBasedObject; a clone of this object
      Throws:
      NetworkException - in case the cloning fails