Exemple #1
0
    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))
Exemple #2
0
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]),
    }
Exemple #3
0
 def featurize(obs):
     ret = super().featurize(obs)
     message = obs['message']
     message = utility.make_np_float(message)
     return np.concatenate((ret, message))
Exemple #4
0
    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
Exemple #5
0
 def check_bombs(self):
     """ Self Added """
     obs = self.gym.get_observations()
     return utility.make_np_float([obs[0]["ammo"]])
Exemple #6
0
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