Example #1
0
    def add_car(self, lane: "AbstractLane"):
        direction = 'upstream' if lane.upstream else 'downstream'
        if self.queues[direction][lane.index] > 0:
            self.queues[direction][lane.index] += 1
        else:
            fwd = self.first_car_on_lane(lane)
            speed = lane.speed_limit

            if fwd:
                gap = fwd.s_path
                if gap < MIN_INSERTION_GAP:
                    self.queues[direction][lane.index] += 1
                    return
                else:
                    speed = IDM.calc_max_initial_speed(gap, fwd.speed,
                                                       lane.speed_limit)

            car = Car.make_on_lane(road=self, lane=lane, speed=speed)

            self.cars.add(car)

            if lane.upstream:
                self.upstream_cars.add(car)
            else:
                self.downstream_cars.add(car)
Example #2
0
    def inflow(self):
        for direction, lane_indexes in self.queues.items():
            for lane_index, queue_count in lane_indexes.items():
                if queue_count > 0:
                    lane = self.network.get_lane(lane_index)
                    fwd = self.first_car_on_lane(lane)
                    speed = lane.speed_limit

                    if fwd is not None:
                        gap = fwd.s_path
                        if gap < MIN_INSERTION_GAP:
                            continue
                        speed = IDM.calc_max_initial_speed(
                            gap, fwd.speed, lane.speed_limit)

                    car = Car.make_on_lane(road=self, lane=lane, speed=speed)
                    self.cars.add(car)
                    if lane.upstream:
                        self.upstream_cars.add(car)
                    else:
                        self.downstream_cars.add(car)

                    self.queues[direction][lane_index] -= 1