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()
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()
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)
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
def destroy(self): self._remote_agent_buffer.destroy() Sensors.clean_up()
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