def init(self): ''' All common initialization goes here. ''' self.halfExtendedViewInAngle = [] self.shift = [] for lane in range(0, LANES): self.halfExtendedViewInAngle.append( arcAngle(LANE_RADIUS[lane], (self.totalExtendedView / 2) * SCALE)) self.shift.append( arcAngle(LANE_RADIUS[lane], (CAR_LENGTH / 2) * SCALE)) # Intialize Observation Space self.initObservationSpace(self.k) # Intialize Communication self.isCommEnabled = False if self.totalCommView > 0: if not (self.totalCommView % self.regWidthInMetres == 0): raiseValueError( "communicable region should be completely divisible by comm-size" ) if not (self.regWidthInMetres % self.cellSize == 0): raiseValueError( "comm-size should be completely divisible by cell-size") self.isCommEnabled = True self.initComm()
def initDrawGrid(self): # Calculate start position and cell size in Degrees for drawing grids self.extendedViewInDeg = [] self.cellSizeInDeg = [] for lane in range(0, constants.LANES): self.extendedViewInDeg.append( arcAngle(constants.LANE_RADIUS[lane], self.extendedViewInMetre * constants.SCALE)) self.cellSizeInDeg.append( arcAngle(constants.LANE_RADIUS[lane], self.cellSizeInMetre * constants.SCALE))
def initCollisionAngle(self): ''' Function : Calculates the minimum angle required between two cars for no collision. ''' self.minCollisionAngle = [] for lane in range(0, LANES): self.minCollisionAngle.append( arcAngle(LANE_RADIUS[lane], CAR_LENGTH * SCALE))
def performDoNothing(self, laneMap, agentLane, agentIDX): agentSpeed = laneMap[agentLane][agentIDX]['speed'] agentPos = laneMap[agentLane][agentIDX]['pos'] distTravelledInMetres = self.distTravelled(0, self.tPeriod, agentSpeed) distTravelledInDeg = arcAngle(LANE_RADIUS[agentLane], distTravelledInMetres * SCALE) distTravelledInDeg %= 360 newAgentSpeed = agentSpeed newAgentSpeed = np.clip(newAgentSpeed, 0, self.maxSpeed) ''' Only agent's new pos is required to check for collision ''' collision = False if not self.checkValidAction(agentLane, laneMap, agentPos + distTravelledInDeg, agentIDX): distTravelledInDeg = 0.0 newAgentSpeed = 0.0 collision = True return distTravelledInDeg, newAgentSpeed, collision, agentLane
def performDecelerate(self, laneMap, agentLane, agentIDX): agentSpeed = laneMap[agentLane][agentIDX]['speed'] agentPos = laneMap[agentLane][agentIDX]['pos'] dec = -IDM_CONSTS["DECELERATION_RATE"] if agentSpeed <= 0.0: dec = 0.0 distTravelledInMetres = self.distTravelled(dec, self.tPeriod, agentSpeed) distTravelledInDeg = arcAngle(LANE_RADIUS[agentLane], distTravelledInMetres * SCALE) distTravelledInDeg %= 360 newAgentSpeed = self.newSpeed(dec, self.tPeriod, agentSpeed) newAgentSpeed = np.clip(newAgentSpeed, 0, self.maxSpeed) ''' Only agent new pos is required to check for collision ''' collision = False if not self.checkValidAction(agentLane, laneMap, agentPos + distTravelledInDeg, agentIDX): distTravelledInDeg = 0.0 newAgentSpeed = 0.0 collision = True return distTravelledInDeg, newAgentSpeed, collision, agentLane
def initLaneChangeAngle(self): self.laneChangeAngle = [] for lane in range(0, LANES): self.laneChangeAngle.append( arcAngle(LANE_RADIUS[lane], (CAR_LENGTH) * SCALE))