def featurize(obs): board = obs["board"].reshape(-1).astype(np.float32) bomb_blast_strength = obs["bomb_blast_strength"].reshape(-1) \ .astype(np.float32) bomb_life = obs["bomb_life"].reshape(-1).astype(np.float32) position = utility.make_np_float(obs["position"]) ammo = utility.make_np_float([obs["ammo"]]) blast_strength = utility.make_np_float([obs["blast_strength"]]) can_kick = utility.make_np_float([obs["can_kick"]]) teammate = utility.make_np_float([obs["teammate"].value]) enemies = utility.make_np_float([e.value for e in obs["enemies"]]) return np.concatenate( (board, bomb_blast_strength, bomb_life, position, ammo, blast_strength, can_kick, teammate, enemies))
def featurize(obs): board = obs["board"].astype(np.float32) bomb_blast_strength = obs["bomb_blast_strength"].astype(np.float32) bomb_life = obs["bomb_life"].astype(np.float32) position = utility.make_np_float(obs["position"]) ammo = utility.make_np_float([obs["ammo"]]) blast_strength = utility.make_np_float([obs["blast_strength"]]) can_kick = utility.make_np_float([obs["can_kick"]]) teammate = utility.make_np_float([obs["teammate"].value]) enemies = utility.make_np_float([e.value for e in obs["enemies"]]) return { "boards": np.stack([board, bomb_blast_strength, bomb_life]), "states": np.concatenate( [position, ammo, blast_strength, can_kick, teammate, enemies]), }
def featurize(obs): ret = super().featurize(obs) message = obs['message'] message = utility.make_np_float(message) return np.concatenate((ret, message))
def featurize(self, obs): enemies = [] for agent_id in self.enemies_agents_index: if agent_id == 0: enemies.append(Item.Agent0) if agent_id == 1: enemies.append(Item.Agent1) if agent_id == 2: enemies.append(Item.Agent2) if agent_id == 3: enemies.append(Item.Agent3) for enemie in obs["enemies"]: if enemie not in enemies: obs["board"] = ma.masked_equal( obs["board"], enemie.value).filled(fill_value=0) board = np.copy(obs["board"]) board[obs["position"][0], obs["position"][1]] = 0.0 enemie_pos = np.full((11, 11), 0) for enemie in obs["enemies"]: enemie_pos = enemie_pos | ma.masked_not_equal( board, enemie.value).filled(fill_value=0) board = ma.masked_equal(board, enemie.value).filled(fill_value=0) wood = ma.masked_not_equal(board, 2).filled(fill_value=0) wood = (wood > 0).astype(np.float32) board = ma.masked_equal(board, 2).filled(fill_value=0) stone = ma.masked_not_equal(board, 1).filled(fill_value=0) stone = (stone > 0).astype(np.float32) board = ma.masked_equal(board, 1).filled(fill_value=0) enemie_pos = (enemie_pos > 0).astype(np.float32) board = ma.masked_equal(board, obs["teammate"].value).filled(fill_value=0) flames = ma.masked_not_equal(board, 4).filled(fill_value=0) flames = (flames > 0).astype(np.float32) board = ma.masked_equal(board, 4).filled(fill_value=0) board = ma.masked_equal(board, 3).filled(fill_value=0) teammate_pos = ma.masked_not_equal( board, obs["teammate"].value).filled(fill_value=0) teammate_pos = (teammate_pos > 0).astype(np.float32) board = ma.masked_equal(board, obs["teammate"].value).filled(fill_value=0) items = board.astype(np.float32) pos = np.full((11, 11), 0) pos[obs["position"][0], obs["position"][1]] = 1.0 pos = pos.astype(np.float32) bomb_life = obs["bomb_life"].astype(np.float32) bomb_blast_strength = obs["bomb_blast_strength"].astype(np.float32) ammo = utility.make_np_float([obs["ammo"]]) blast_strength = utility.make_np_float([obs["blast_strength"]]) can_kick = utility.make_np_float([obs["can_kick"]]) game_end = utility.make_np_float([ (self.max_steps - self.steps) / self.max_steps ]) actual_featurize_obs = { 'boards': np.stack([ enemie_pos, pos, wood, stone, items, flames, teammate_pos, bomb_life, bomb_blast_strength ], axis=0), 'states': np.concatenate([ammo, blast_strength, can_kick, game_end]), } if self.last_featurize_obs == None: featurize_obs = { 'boards': np.concatenate([ actual_featurize_obs['boards'], actual_featurize_obs['boards'] ], axis=0), 'states': np.concatenate([ actual_featurize_obs['states'], actual_featurize_obs['states'] ]), } else: featurize_obs = { 'boards': np.concatenate([ self.last_featurize_obs['boards'], actual_featurize_obs['boards'] ], axis=0), 'states': np.concatenate([ self.last_featurize_obs['states'], actual_featurize_obs['states'] ]), } self.last_featurize_obs = actual_featurize_obs return featurize_obs
def check_bombs(self): """ Self Added """ obs = self.gym.get_observations() return utility.make_np_float([obs[0]["ammo"]])
def make_featurize_planes(obs, timestep, retrospect_board, retrospect_bomb_life, retrospect_bomb_blast_strength): """ 13 feature planes, adapted from envs.v0.featurize """ board = obs["board"].astype(np.float32) bomb_blast_strength = obs["bomb_blast_strength"].astype(np.float32) bomb_life = obs["bomb_life"].astype(np.float32) planes = [board, bomb_blast_strength, bomb_life] #position = utility.make_np_float(obs["position"]) posi_plane = np.zeros_like(board) posi_plane[obs["position"]] = 1.0 mate = obs['teammate'].value mate_pos = np.where(mate == board) mate_plane = np.zeros_like(board) if mate_pos[0].shape[0] > 0: posi_plane[mate_pos[0][0], mate_pos[1][0]] = 1.0 for e in obs['enemies']: e_pos = np.where(e.value == board) if e_pos[0].shape[0] > 0: posi_plane[e_pos[0][0], e_pos[1][0]] = 1.0 planes.append(posi_plane) ammo_plane = np.zeros_like(board) #ammo = utility.make_np_float([obs["ammo"]]) ammo_plane.fill(obs['ammo']) planes.append(ammo_plane) blast_st_plane = np.zeros_like(board) blast_strength = utility.make_np_float([obs["blast_strength"]]) blast_st_plane.fill(blast_strength[0]) planes.append(blast_st_plane) can_kick = utility.make_np_float([obs["can_kick"]]) can_kick_plane = np.zeros_like(board) can_kick_plane.fill(can_kick[0]) planes.append(can_kick_plane) #teammate = utility.make_np_float([obs["teammate"].value]) mate = obs['teammate'].value mate_plane = np.zeros_like(board) if mate in obs['alive']: mate_plane.fill(mate) planes.append(mate_plane) #enemies = utility.make_np_float([e.value for e in obs["enemies"]]) enemy_plane = np.zeros_like(board) for e in obs['enemies']: if e.value in obs['alive']: enemy_plane += e.value planes.append(enemy_plane) time_step_plane = np.zeros_like(board) time_step_plane.fill(timestep) planes.append(time_step_plane) agent_id_on_board = board[obs['position']] id_plane = np.zeros_like(board) id_plane.fill(agent_id_on_board) planes.append(id_plane) planes.append(retrospect_board) planes.append(retrospect_bomb_life) planes.append(retrospect_bomb_blast_strength) ret = np.stack(planes) #print('feature shape:', ret.shape) _update_retrospect_info(obs, retrospect_board, retrospect_bomb_life, retrospect_bomb_blast_strength) return ret