Exemple #1
0
    def step_sensors(self, sim):
        for vehicle_id, sensor_state in sim.vehicle_index.sensor_states_items():
            Sensors.step(self, sensor_state)

            vehicle = sim.vehicle_index.vehicle_by_id(vehicle_id)
            for sensor in vehicle.sensors.values():
                sensor.step()
Exemple #2
0
    def step_sensors(self, sim):
        """Update all known vehicle sensors."""
        # TODO: Move to vehicle index
        for vehicle_id, sensor_state in sim.vehicle_index.sensor_states_items(
        ):
            Sensors.step(self, sensor_state)

            vehicle = sim.vehicle_index.vehicle_by_id(vehicle_id)
            for sensor in vehicle.sensors.values():
                sensor.step()
Exemple #3
0
    def observe_from(
        self, sim, vehicle_ids: Set[str], done_this_step: Set[str] = set()
    ) -> Tuple[
        Dict[str, Observation], Dict[str, float], Dict[str, float], Dict[str, bool]
    ]:
        observations = {}
        rewards = {}
        dones = {}
        scores = {}
        for v_id in vehicle_ids:
            vehicle = sim.vehicle_index.vehicle_by_id(v_id)
            agent_id = self._vehicle_with_sensors[v_id]
            sensor_state = sim.vehicle_index.sensor_state_for_vehicle_id(vehicle.id)
            observations[agent_id], dones[agent_id] = Sensors.observe(
                sim, agent_id, sensor_state, vehicle
            )
            rewards[agent_id] = vehicle.trip_meter_sensor(increment=True)
            scores[agent_id] = vehicle.trip_meter_sensor()

        # also add agents that were done in virtue of just dropping out
        for done_v_id in done_this_step:
            agent_id = self._vehicle_with_sensors.get(done_v_id, None)
            if agent_id:
                dones[agent_id] = True

        return observations, rewards, scores, dones
def test_agents_alive_done_check(sim, scenario):
    sim.setup(scenario)
    interface = sim.agent_manager.agent_interface_for_agent_id(AGENT1)
    done_criteria = interface.done_criteria
    # 3 agents available, done requires 2 to be alive
    assert not Sensors._agents_alive_done_check(sim.agent_manager,
                                                done_criteria.agents_alive)

    sim.agent_manager.teardown_ego_agents({AGENT2})
    # 2 agents available, done requires 2 to be alive
    assert not Sensors._agents_alive_done_check(sim.agent_manager,
                                                done_criteria.agents_alive)

    sim.agent_manager.teardown_ego_agents({AGENT3})
    # 1 agents available, done requires 2 to be alive
    assert Sensors._agents_alive_done_check(sim.agent_manager,
                                            done_criteria.agents_alive)

    sim.agent_manager.teardown_ego_agents({AGENT1})
    # 1 agents available, done requires 2 to be alive
    assert Sensors._agents_alive_done_check(sim.agent_manager,
                                            done_criteria.agents_alive)
Exemple #5
0
    def observe_from(self, sim, vehicle_ids):
        observations = {}
        rewards = {}
        dones = {}
        scores = {}
        for v_id in vehicle_ids:
            vehicle = sim.vehicle_index.vehicle_by_id(v_id)
            agent_id = self._vehicle_with_sensors[v_id]
            sensor_state = sim.vehicle_index.sensor_state_for_vehicle_id(
                vehicle.id)
            observations[agent_id], dones[agent_id] = Sensors.observe(
                sim, agent_id, sensor_state, vehicle)
            rewards[agent_id] = vehicle.trip_meter_sensor(increment=True)
            scores[agent_id] = vehicle.trip_meter_sensor()

        return observations, rewards, scores, dones
Exemple #6
0
 def destroy(self):
     self._remote_agent_buffer.destroy()
     Sensors.clean_up()
Exemple #7
0
    def observe(self, sim):
        observations = {}
        rewards = {}
        scores = {}
        dones = {
            agent_id: agent_id not in self.pending_agent_ids
            for agent_id in self.agent_ids
            if agent_id not in sim.vehicle_index.agent_vehicle_ids()
        }

        for agent_id in self.active_agents:
            # An agent may be pointing to its own vehicle or observing a social vehicle
            vehicle_ids = sim.vehicle_index.vehicle_ids_by_actor_id(
                agent_id, include_shadowers=True)

            if self.is_boid_agent(agent_id):
                vehicles = [
                    sim.vehicle_index.vehicle_by_id(vehicle_id)
                    for vehicle_id in vehicle_ids
                ]
                # returns format of {<agent_id>: {<vehicle_id>: {...}}}
                sensor_states = {
                    vehicle.id:
                    sim.vehicle_index.sensor_state_for_vehicle_id(vehicle.id)
                    for vehicle in vehicles
                }
                observations[
                    agent_id], dones[agent_id] = Sensors.observe_batch(
                        sim, agent_id, sensor_states,
                        {v.id: v
                         for v in vehicles})
                rewards[agent_id] = {
                    vehicle_id: self._vehicle_reward(vehicle_id, sim)
                    for vehicle_id in sensor_states.keys()
                }
                scores[agent_id] = {
                    format_actor_id(agent_id, vehicle_id, is_multi=True):
                    self._vehicle_score(vehicle_id, sim)
                    for vehicle_id in sensor_states.keys()
                }
            else:
                assert len(vehicle_ids) == 1, (
                    "Unless this vehicle is part of a boid then we should only have a "
                    f"single vehicle under agent_id={agent_id}\n "
                    f"(vehicle_ids={vehicle_ids})")

                vehicle = sim.vehicle_index.vehicle_by_id(vehicle_ids[0])
                sensor_state = sim.vehicle_index.sensor_state_for_vehicle_id(
                    vehicle.id)
                observations[agent_id], dones[agent_id] = Sensors.observe(
                    sim, agent_id, sensor_state, vehicle)

                if sim.vehicle_index.vehicle_is_shadowed(vehicle.id):
                    # It is not a shadowing agent's fault if it is done
                    dones[agent_id] = False
                else:
                    logging.log(
                        logging.DEBUG,
                        f"Agent `{agent_id}` has raised done with {observations[agent_id].events}",
                    )

                rewards[agent_id] = vehicle.trip_meter_sensor(increment=True)
                scores[agent_id] = vehicle.trip_meter_sensor()

        return observations, rewards, scores, dones