def information_selection(df, model, belief, measurement_cost):
    df['information'] = df.apply((lambda row: model.information(belief, [row['predicted_angle']])), axis=1)
    potential_sensors = df.sort_values('information').index.to_list()
    selected_sensors = []
    sensor_utility = {0: []}
    while potential_sensors:
        selected_sensors.append(potential_sensors.pop())
        information = model.information(belief, sensors=df.loc[selected_sensors]['predicted_angle'].to_list())
        utility = (information - (measurement_cost * len(selected_sensors)))
        sensor_utility[utility] = selected_sensors[:]
    return sensor_utility[np.max(list(sensor_utility.keys()))]
def information_selection(df, model, belief, measurement_cost):
    df['information'] = df.apply((lambda row: model.information(belief, [row['predicted_angle']])), axis=1)
    potential_sensors = df.sort_values('information').index.to_list()
    selected_sensors = []
    sensor_utility = {0: []}
    while potential_sensors:
        selected_sensors.append(potential_sensors.pop())
        information = model.information(belief, sensors=df.loc[selected_sensors]['predicted_angle'].to_list())
        utility = (information - (measurement_cost * len(selected_sensors)))
        sensor_utility[utility] = selected_sensors[:]
    return sensor_utility[np.max(list(sensor_utility.keys()))]