示例#1
0
    def get_state(self):
        """See class definition."""
        self.leader = []
        self.follower = []

        # Initialize a set on empty observations
        obs = {
            "lane_{}".format(i): [0 for _ in range(5 * self.num_rl)]
            for i in range(self._num_lanes)
        }

        for lane in range(self._num_lanes):
            # Collect the names of the RL vehicles on the lane.
            rl_ids = self.rl_ids()[lane]

            for i, veh_id in enumerate(rl_ids):
                # Add relative observation of each vehicle.
                obs["lane_{}".format(lane)][5 * i: 5 * (i + 1)], \
                    leader, follower = get_relative_obs(self, veh_id)

                # Append to the leader/follower lists.
                if leader not in ["", None]:
                    self.leader.append(leader)
                if follower not in ["", None]:
                    self.follower.append(follower)

        return obs
示例#2
0
    def _update_obs_history(self):
        """Update the storage of observations for individual vehicles.

        This method performs the following operation:

        1. It adds the most recent observation for each vehicle to the
           _obs_history attribute. It also maintains the number of viewed
           frames, and removes vehicles once they've left the network.
        2. It stored the names of the observed leading vehicles under the
           leader attribute.
        """
        self.leader = []

        for veh_id in self.k.vehicle.get_rl_ids():
            # Add relative observation of each vehicle.
            obs_vehicle, leader = get_relative_obs(self, veh_id)
            self._obs_history[veh_id].append(obs_vehicle)

            # Maintain queue length.
            if len(self._obs_history[veh_id]) > self._skip * self._obs_frames:
                self._obs_history[veh_id] = \
                    self._obs_history[veh_id][-self._skip * self._obs_frames:]

            # Append to the leader list.
            if veh_id in self.rl_ids():
                if leader not in ["", None]:
                    self.leader.append(leader)

        # Remove memory for exited vehicles.
        for key in list(self._obs_history.keys()):
            if key not in self.k.vehicle.get_rl_ids():
                del self._obs_history[key]
示例#3
0
def full_observation_fn(env):
    """Compute the full state observation.

    This observation consists of the speeds and bumper-to-bumper headways of
    all automated vehicles in the network.
    """
    # Initialize a set on empty observations
    obs = [0 for _ in range(env.observation_space.shape[0])]

    # Add relative observation of each vehicle.
    for i, v_id in enumerate(env.rl_ids()):
        obs[5 * i:5 * (i + 1)], *_ = get_relative_obs(env, v_id)

    return np.asarray(obs)
示例#4
0
    def get_state(self):
        """See class definition."""
        self.leader = []
        self.follower = []

        for veh_id in self.k.vehicle.get_rl_ids():
            # Add relative observation of each vehicle.
            obs_vehicle, leader, follower = get_relative_obs(self, veh_id)
            self._obs_history[veh_id].append(obs_vehicle)

            # Maintain queue length.
            if len(self._obs_history[veh_id]) > self._obs_frames:
                self._obs_history[veh_id] = \
                    self._obs_history[veh_id][self._obs_frames:]

            # Append to the leader/follower lists.
            if veh_id in self.rl_ids():
                if leader not in ["", None]:
                    self.leader.append(leader)
                if follower not in ["", None]:
                    self.follower.append(follower)

        # Remove memory for exited vehicles.
        for key in self._obs_history.keys():
            if key not in self.k.vehicle.get_rl_ids():
                del self._obs_history[key]

        # Initialize a set on empty observations
        obs = {
            "lane_{}".format(i):
            np.array([0 for _ in range(5 * self._obs_frames * self.num_rl)])
            for i in range(self._num_lanes)
        }

        for lane in range(self._num_lanes):
            # Collect the names of the RL vehicles on the lane.
            rl_ids = self.rl_ids()[lane]

            for i, veh_id in enumerate(rl_ids):
                # Concatenate the past n samples for a given time delta in the
                # output observations.
                ob_t = np.concatenate(self._obs_history[veh_id][::-1])
                obs["lane_{}".format(lane)][5 * self._obs_frames *
                                            i:5 * self._obs_frames * i +
                                            len(ob_t)] = ob_t

        return obs
示例#5
0
    def get_state(self):
        """See class definition."""
        self.leader = []
        self.follower = []

        # Initialize a set on empty observations
        obs = {key: None for key in self.rl_ids()}

        for i, veh_id in enumerate(self.rl_ids()):
            # Add relative observation of each vehicle.
            obs[veh_id], leader, follower = get_relative_obs(self, veh_id)

            # Append to the leader/follower lists.
            if leader not in ["", None]:
                self.leader.append(leader)
            if follower not in ["", None]:
                self.follower.append(follower)

        return obs
示例#6
0
    def get_state(self):
        """See class definition."""
        self.leader = []
        self.follower = []

        # Initialize a set on empty observations
        obs = [0 for _ in range(self.observation_space.shape[0])]

        for i, v_id in enumerate(self.rl_ids()):
            # Add relative observation of each vehicle.
            obs[5*i: 5*(i+1)], leader, follower = get_relative_obs(self, v_id)

            # Append to the leader/follower lists.
            if leader not in ["", None]:
                self.leader.append(leader)
            if follower not in ["", None]:
                self.follower.append(follower)

        return obs
示例#7
0
    def get_state(self):
        """See class definition."""
        self.leader = []
        self.follower = []

        for veh_id in self.k.vehicle.get_rl_ids():
            # Add relative observation of each vehicle.
            obs_vehicle, leader, follower = get_relative_obs(self, veh_id)
            self._obs_history[veh_id].append(obs_vehicle)

            # Maintain queue length.
            if len(self._obs_history[veh_id]) > self._obs_frames:
                self._obs_history[veh_id] = \
                    self._obs_history[veh_id][self._obs_frames:]

            # Append to the leader/follower lists.
            if veh_id in self.rl_ids():
                if leader not in ["", None]:
                    self.leader.append(leader)
                if follower not in ["", None]:
                    self.follower.append(follower)

        # Remove memory for exited vehicles.
        for key in self._obs_history.keys():
            if key not in self.k.vehicle.get_rl_ids():
                del self._obs_history[key]

        # Initialize a set on empty observations
        obs = {key: None for key in self.rl_ids()}

        for i, veh_id in enumerate(self.rl_ids()):
            # Concatenate the past n samples for a given time delta and return
            # as the final observation.
            obs_t = np.concatenate(self._obs_history[veh_id][::-1])
            obs_vehicle = np.array([0. for _ in range(5 * self._obs_frames)])
            obs_vehicle[:len(obs_t)] = obs_t

            obs[veh_id] = obs_vehicle

        return obs