Cloud Environment

This tutorial demonstrates the configuration and use of a simple BSK-RL environment considering cloud coverage. The satellite has to image targets while managing its battery level. Additionally, reward is inversely proportional to the amount of cloud coverage. Still, the satellite cannot observe the true cloud coverage of each target, only its forecast.

Load Modules

[1]:
import gymnasium as gym
import numpy as np
from typing import Optional

from Basilisk.architecture import bskLogging
from Basilisk.utilities import orbitalMotion
from bsk_rl import act, obs, sats
from bsk_rl.sim import dyn, fsw, world
from bsk_rl.utils.orbital import random_orbit
from bsk_rl.scene.targets import UniformTargets
from bsk_rl.data.unique_image_data import (
    UniqueImageData,
    UniqueImageStore,
    UniqueImageReward,
)

bskLogging.setDefaultLogLevel(bskLogging.BSK_WARNING)

Configure the Satellite

  • Observations:

    • SatProperties: Body angular velocity, instrument pointing direction, body position, body velocity, battery charge (properties in flight software model or dynamics model). Also, customized dynamics property in CustomDynModel below: Angle between the sun and the solar panel.

    • OpportunityProperties: Target’s priority, cloud coverage forecast, and standard deviation of cloud coverage forecast (upcoming 32 targets). Also, time until the opportunity to ground station opens and closes.

    • Time: Simulation time.

    • Eclipse: Next eclipse start and end times.

  • Actions:

    • Charge: Enter a sun-pointing charging mode for 60 seconds.

    • Image: Image target from upcoming 32 targets

  • Dynamics model: FullFeaturedDynModel is used and a property, angle between sun and solar panel, is added.

  • Flight software model: SteeringImagerFSWModel is used.

[2]:
class CustomSatComposed(sats.ImagingSatellite):
    observation_spec = [
        obs.SatProperties(
            dict(prop="omega_BP_P", norm=0.03),
            dict(prop="c_hat_P"),
            dict(prop="r_BN_P", norm=orbitalMotion.REQ_EARTH * 1e3),
            dict(prop="v_BN_P", norm=7616.5),
            dict(prop="battery_charge_fraction"),
            dict(prop="solar_angle_norm"),
        ),
        obs.OpportunityProperties(
            # dict(fn=lambda sat, opp: print(opp)),
            dict(prop="opportunity_open", norm=5700),
            dict(prop="opportunity_close", norm=5700),
            type="ground_station",
            n_ahead_observe=1,
        ),
        obs.Eclipse(),
        obs.OpportunityProperties(
            dict(prop="priority"),
            dict(fn=lambda sat, opp: opp["object"].cloud_cover_forecast),
            dict(fn=lambda sat, opp: opp["object"].cloud_cover_sigma),
            type="target",
            n_ahead_observe=32,
        ),
        obs.Time(),
    ]

    action_spec = [
        act.Charge(duration=60.0),
        act.Image(n_ahead_image=32),
    ]

    class CustomDynModel(dyn.FullFeaturedDynModel):

        @property
        def solar_angle_norm(self) -> float:
            sun_vec_N = (
                self.world.gravFactory.spiceObject.planetStateOutMsgs[
                    self.world.sun_index
                ]
                .read()
                .PositionVector
            )
            sun_vec_N_hat = sun_vec_N / np.linalg.norm(sun_vec_N)
            solar_panel_vec_B = np.array([0, 0, -1])  # Not default configuration
            mat = np.transpose(self.BN)
            solar_panel_vec_N = np.matmul(mat, solar_panel_vec_B)
            error_angle = np.arccos(np.dot(solar_panel_vec_N, sun_vec_N_hat))

            return error_angle / np.pi

    dyn_type = CustomDynModel
    fsw_type = fsw.SteeringImagerFSWModel

When instantiating a satellite, these parameters can be overriden with a constant or rerandomized every time the environment is reset using the sat_args dictionary.

[3]:
dataStorageCapacity = 20 * 8e6 * 100
sat_args = CustomSatComposed.default_sat_args(
    oe=random_orbit,
    imageAttErrorRequirement=0.01,
    imageRateErrorRequirement=0.01,
    batteryStorageCapacity=80.0 * 3600 * 2,
    storedCharge_Init=lambda: np.random.uniform(0.4, 1.0) * 80.0 * 3600 * 2,
    u_max=0.2,
    K1=0.5,
    nHat_B=np.array([0, 0, -1]),
    imageTargetMinimumElevation=np.radians(45),
    rwBasePower=20,
    maxWheelSpeed=1500,
    storageInit=lambda: np.random.randint(
        0 * dataStorageCapacity,
        0.01 * dataStorageCapacity,
    ),  # Initialize storage use close to zero
    wheelSpeeds=lambda: np.random.uniform(
        -1, 1, 3
    ),  # Initialize reaction wheel speeds close to zero
)

# Make the satellites
satellites = []
satellites.append(
    CustomSatComposed(
        "EO",
        sat_args,
    )
)

Making a Scenario with Cloud Covered Targets

Using UniformTargets as a base, attach the following information to each target:

  • true_cloud_cover represents the true cloud coverage. Information from external sources, such as historical cloud data, can be used here based on each target’s position.

  • cloud_cover_forecast represents the cloud coverage forecast. Forecast from external sources can be plugged in here.

  • cloud_cover_sigma represents the standard deviation of the cloud coverage forecast.

[10]:
class CloudTargets(UniformTargets):
    mu_data = 0.6740208166434426
    sigma_max = 0.05
    sigma_min = 0.01

    def regenerate_targets(self) -> None:
        super().regenerate_targets()
        for target in self.targets:
            target.true_cloud_cover = np.clip(
                np.random.uniform(0.0, self.mu_data * 2), 0.0, 1.0
            )
            target.cloud_cover_sigma = np.random.uniform(self.sigma_min, self.sigma_max)
            target.cloud_cover_forecast = np.clip(
                np.random.normal(target.true_cloud_cover, target.cloud_cover_sigma),
                0.0,
                1.0,
            )


n_targets = (1000, 10000)
scenario = CloudTargets(n_targets=n_targets)

Adding a Filter Based on Cloud Coverage Forecast

It is possible to add a filter to the satellite using add_access_filter to remove targets with cloud_cover_forecast higher than a threshold from the observations.

[11]:
def cloud_cover_filter(opportunity):
    if opportunity["type"] == "target":
        return True if opportunity["object"].cloud_cover_forecast < 0.2 else False
    return True


# Uncomment the following line to add the filter to the satellite
# satellites[0].add_access_filter(cloud_cover_filter)

Making a Rewarder Considering Cloud Coverage

A linear reward model is considered, where the reward is proportional to the cloud coverage of the target until a given threshold given by cloud_threshold. It has similar settings as the UniqueImageReward class, but cloud_covered and cloud_free information is added. Additionally, the calculate_reward function is modified for the linear reward model.

[67]:
from typing import TYPE_CHECKING

if TYPE_CHECKING:  # pragma: no cover
    from bsk_rl.scene.targets import (
        Target,
    )


class CloudImagePercentData(UniqueImageData):
    """DataType for unique images of targets."""

    def __init__(
        self,
        imaged: Optional[list["Target"]] = None,
        duplicates: int = 0,
        known: Optional[list["Target"]] = None,
        cloud_covered: Optional[list["Target"]] = None,
        cloud_free: Optional[list["Target"]] = None,
    ) -> None:
        """Construct unit of data to record unique images.

        Keeps track of ``imaged`` targets, a count of ``duplicates`` (i.e. images that
        were not rewarded due to the target already having been imaged), and all
        ``known`` targets in the environment.

        Args:
            imaged: List of targets that are known to be imaged.
            duplicates: Count of target imaging duplication.
            known: List of targets that are known to exist (imaged and unimaged).
            cloud_covered: List of imaged targets that are known to be cloud covered.
            cloud_free: List of imaged targets that are known to be cloud free.
        """
        super().__init__(imaged=imaged, duplicates=duplicates, known=known)
        if cloud_covered is None:
            cloud_covered = []
        if cloud_free is None:
            cloud_free = []
        self.cloud_covered = list(set(cloud_covered))
        self.cloud_free = list(set(cloud_free))

    def __add__(self, other: "CloudImagePercentData") -> "CloudImagePercentData":
        """Combine two units of data.

        Args:
            other: Another unit of data to combine with this one.

        Returns:
            Combined unit of data.
        """

        imaged = list(set(self.imaged + other.imaged))
        duplicates = (
            self.duplicates
            + other.duplicates
            + len(self.imaged)
            + len(other.imaged)
            - len(imaged)
        )
        known = list(set(self.known + other.known))
        cloud_covered = list(set(self.cloud_covered + other.cloud_covered))
        cloud_free = list(set(self.cloud_free + other.cloud_free))

        return self.__class__(
            imaged=imaged,
            duplicates=duplicates,
            known=known,
            cloud_covered=cloud_covered,
            cloud_free=cloud_free,
        )


class CloudImagePercentDataStore(UniqueImageStore):
    """DataStore for unique images of targets."""

    data_type = CloudImagePercentData

    def compare_log_states(
        self, old_state: np.ndarray, new_state: np.ndarray
    ) -> CloudImagePercentData:
        """Check for an increase in logged data to identify new images.

        Args:
            old_state: older storedData from satellite storage unit
            new_state: newer storedData from satellite storage unit

        Returns:
            list: Targets imaged at new_state that were unimaged at old_state
        """
        update_idx = np.where(new_state - old_state > 0)[0]
        imaged = []
        for idx in update_idx:
            message = self.satellite.dynamics.storageUnit.storageUnitDataOutMsg
            target_id = message.read().storedDataName[int(idx)]
            imaged.append(
                [target for target in self.data.known if target.id == target_id][0]
            )

        cloud_covered = []
        cloud_free = []
        cloud_threshold = 0.7
        for target in imaged:
            cloud_coverage = target.true_cloud_cover
            if cloud_coverage > cloud_threshold:
                cloud_covered.append(target)
            else:
                cloud_free.append(target)

        return CloudImagePercentData(
            imaged=imaged, cloud_covered=cloud_covered, cloud_free=cloud_free
        )


class CloudImagingPercentRewarder(UniqueImageReward):
    """DataManager for rewarding unique images."""

    datastore_type = CloudImagePercentDataStore

    def calculate_reward(
        self, new_data_dict: dict[str, CloudImagePercentData]
    ) -> dict[str, float]:
        """Reward new each unique image once using self.reward_fn().

        Args:
            new_data_dict: Record of new images for each satellite

        Returns:
            reward: Cumulative reward across satellites for one step
        """
        reward = {}
        imaged_targets = sum(
            [new_data.cloud_free for new_data in new_data_dict.values()], []
        )

        for sat_id, new_data in new_data_dict.items():
            reward[sat_id] = 0.0
            for target in new_data.cloud_free:
                reward[sat_id] += self.reward_fn(
                    target.priority,
                    target.true_cloud_cover,
                    imaged_targets.count(target),
                )

        for new_data in new_data_dict.values():
            self.data += new_data
        return reward


# Define the reward function as a function of the priority of the target, the cloud cover, and the number of times the target has been imaged
def reward_function(priority, cloud_cover, count_target):
    cloud_threshold = 0.7
    return priority / count_target * (1 - cloud_cover / cloud_threshold)


rewarder = CloudImagingPercentRewarder(reward_fn=reward_function)

Initializing and Interacting with the Environment

For this example, we will be using the single-agent SatelliteTasking environment. Along with passing the satellite that we configured, the environment takes a scenario, which defines the environment the satellite is acting in, and a rewarder, which defines how data collected from the scenario is rewarded.

[68]:
env = gym.make(
    "GeneralSatelliteTasking-v1",
    satellites=satellites,
    terminate_on_time_limit=True,
    world_type=world.GroundStationWorldModel,
    world_args=world.GroundStationWorldModel.default_world_args(),
    scenario=scenario,
    rewarder=rewarder,
    sim_rate=0.5,
    max_step_duration=300.0,
    time_limit=95 * 60 * 3,
    log_level="INFO",
    failure_penalty=0,
    # disable_env_checker=True,  # For debugging
)
2024-07-19 09:54:42,675                                WARNING    Creating logger for new env on PID=46719. Old environments in process may now log times incorrectly.
2024-07-19 09:54:42,677 gym                            INFO       Calling env.reset() to get observation space
2024-07-19 09:54:42,678 gym                            INFO       Resetting environment with seed=2966020952
2024-07-19 09:54:42,681 scene.targets                  INFO       Generating 9075 targets
2024-07-19 09:54:43,147 sats.satellite.EO              INFO       <0.00> EO: Finding opportunity windows from 0.00 to 17100.00 seconds
2024-07-19 09:54:44,142 gym                            INFO       <0.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:44,143 gym                            INFO       <0.00> Environment reset

First, reset the environment. It is possible to specify the seed when resetting the environment.

[69]:
observation, info = env.reset(seed=1)
2024-07-19 09:54:44,687 gym                            INFO       Resetting environment with seed=1
2024-07-19 09:54:44,689 scene.targets                  INFO       Generating 3895 targets
2024-07-19 09:54:45,044 sats.satellite.EO              INFO       <0.00> EO: Finding opportunity windows from 0.00 to 17100.00 seconds
2024-07-19 09:54:45,468 gym                            INFO       <0.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:45,468 gym                            INFO       <0.00> Environment reset

It is possible to printing out the actions and observations. The composed satellite action_description returns a human-readable action map each satellite has the same action space and similar observation space.

[70]:
print("Actions:", satellites[0].action_description)
print("States:", env.unwrapped.satellites[0].observation_description, "\n")

# Using the composed satellite features also provides a human-readable state:
for satellite in env.unwrapped.satellites:
    for k, v in satellite.observation_builder.obs_dict().items():
        print(f"{k}:  {v}")
Actions: ['action_charge', 'action_image_0', 'action_image_1', 'action_image_2', 'action_image_3', 'action_image_4', 'action_image_5', 'action_image_6', 'action_image_7', 'action_image_8', 'action_image_9', 'action_image_10', 'action_image_11', 'action_image_12', 'action_image_13', 'action_image_14', 'action_image_15', 'action_image_16', 'action_image_17', 'action_image_18', 'action_image_19', 'action_image_20', 'action_image_21', 'action_image_22', 'action_image_23', 'action_image_24', 'action_image_25', 'action_image_26', 'action_image_27', 'action_image_28', 'action_image_29', 'action_image_30', 'action_image_31']
States: ['sat_props.omega_BP_P_normd[0]', 'sat_props.omega_BP_P_normd[1]', 'sat_props.omega_BP_P_normd[2]', 'sat_props.c_hat_P[0]', 'sat_props.c_hat_P[1]', 'sat_props.c_hat_P[2]', 'sat_props.r_BN_P_normd[0]', 'sat_props.r_BN_P_normd[1]', 'sat_props.r_BN_P_normd[2]', 'sat_props.v_BN_P_normd[0]', 'sat_props.v_BN_P_normd[1]', 'sat_props.v_BN_P_normd[2]', 'sat_props.battery_charge_fraction', 'sat_props.solar_angle_norm', 'ground_station.ground_station_0.opportunity_open_normd', 'ground_station.ground_station_0.opportunity_close_normd', 'eclipse[0]', 'eclipse[1]', 'target.target_0.priority', 'target.target_0.prop_1', 'target.target_0.prop_2', 'target.target_1.priority', 'target.target_1.prop_1', 'target.target_1.prop_2', 'target.target_2.priority', 'target.target_2.prop_1', 'target.target_2.prop_2', 'target.target_3.priority', 'target.target_3.prop_1', 'target.target_3.prop_2', 'target.target_4.priority', 'target.target_4.prop_1', 'target.target_4.prop_2', 'target.target_5.priority', 'target.target_5.prop_1', 'target.target_5.prop_2', 'target.target_6.priority', 'target.target_6.prop_1', 'target.target_6.prop_2', 'target.target_7.priority', 'target.target_7.prop_1', 'target.target_7.prop_2', 'target.target_8.priority', 'target.target_8.prop_1', 'target.target_8.prop_2', 'target.target_9.priority', 'target.target_9.prop_1', 'target.target_9.prop_2', 'target.target_10.priority', 'target.target_10.prop_1', 'target.target_10.prop_2', 'target.target_11.priority', 'target.target_11.prop_1', 'target.target_11.prop_2', 'target.target_12.priority', 'target.target_12.prop_1', 'target.target_12.prop_2', 'target.target_13.priority', 'target.target_13.prop_1', 'target.target_13.prop_2', 'target.target_14.priority', 'target.target_14.prop_1', 'target.target_14.prop_2', 'target.target_15.priority', 'target.target_15.prop_1', 'target.target_15.prop_2', 'target.target_16.priority', 'target.target_16.prop_1', 'target.target_16.prop_2', 'target.target_17.priority', 'target.target_17.prop_1', 'target.target_17.prop_2', 'target.target_18.priority', 'target.target_18.prop_1', 'target.target_18.prop_2', 'target.target_19.priority', 'target.target_19.prop_1', 'target.target_19.prop_2', 'target.target_20.priority', 'target.target_20.prop_1', 'target.target_20.prop_2', 'target.target_21.priority', 'target.target_21.prop_1', 'target.target_21.prop_2', 'target.target_22.priority', 'target.target_22.prop_1', 'target.target_22.prop_2', 'target.target_23.priority', 'target.target_23.prop_1', 'target.target_23.prop_2', 'target.target_24.priority', 'target.target_24.prop_1', 'target.target_24.prop_2', 'target.target_25.priority', 'target.target_25.prop_1', 'target.target_25.prop_2', 'target.target_26.priority', 'target.target_26.prop_1', 'target.target_26.prop_2', 'target.target_27.priority', 'target.target_27.prop_1', 'target.target_27.prop_2', 'target.target_28.priority', 'target.target_28.prop_1', 'target.target_28.prop_2', 'target.target_29.priority', 'target.target_29.prop_1', 'target.target_29.prop_2', 'target.target_30.priority', 'target.target_30.prop_1', 'target.target_30.prop_2', 'target.target_31.priority', 'target.target_31.prop_1', 'target.target_31.prop_2', 'time']

sat_props:  {'omega_BP_P_normd': array([-0.00024411, -0.00134208, -0.00198803]), 'c_hat_P': array([-0.89544206, -0.168058  , -0.41223784]), 'r_BN_P_normd': array([-0.10657487,  0.75926752,  0.75675204]), 'v_BN_P_normd': array([-0.92573069, -0.21286484,  0.08319995]), 'battery_charge_fraction': 0.41362955348761493, 'solar_angle_norm': 0.36095740527133613}
ground_station:  {'ground_station_0': {'opportunity_open_normd': 0.5239724373284539, 'opportunity_close_normd': 0.5789268531870276}}
eclipse:  [780.0, 2610.0]
target:  {'target_0': {'priority': 0.35799287916193745, 'prop_1': 0.18732617744449528, 'prop_2': 0.015441775700651368}, 'target_1': {'priority': 0.7956708188805034, 'prop_1': 0.690268078705084, 'prop_2': 0.029740842575974626}, 'target_2': {'priority': 0.47724764256917596, 'prop_1': 0.8213303453744604, 'prop_2': 0.01804408674589266}, 'target_3': {'priority': 0.4338736557976496, 'prop_1': 0.8563272608725011, 'prop_2': 0.047588146360893355}, 'target_4': {'priority': 0.9814543556395275, 'prop_1': 0.8631604140362873, 'prop_2': 0.011674378986940712}, 'target_5': {'priority': 0.7942650253959778, 'prop_1': 0.01015316385183474, 'prop_2': 0.03921899469565209}, 'target_6': {'priority': 0.49338342577868843, 'prop_1': 0.8511665835560023, 'prop_2': 0.046014925256409135}, 'target_7': {'priority': 0.27089996509965464, 'prop_1': 0.38154306003579114, 'prop_2': 0.04767648650306338}, 'target_8': {'priority': 0.2826304755357292, 'prop_1': 0.3489789891331716, 'prop_2': 0.026808599843887053}, 'target_9': {'priority': 0.12389400404867856, 'prop_1': 1.0, 'prop_2': 0.02788337603137992}, 'target_10': {'priority': 0.9932910043253891, 'prop_1': 0.6950141206369852, 'prop_2': 0.049018265786707635}, 'target_11': {'priority': 0.7564906195577824, 'prop_1': 0.9983459163643871, 'prop_2': 0.04569404032267256}, 'target_12': {'priority': 0.7444452092201004, 'prop_1': 0.9681290502720129, 'prop_2': 0.027314330058718944}, 'target_13': {'priority': 0.2636882604601113, 'prop_1': 0.870778715256736, 'prop_2': 0.04416045334992624}, 'target_14': {'priority': 0.248310541142008, 'prop_1': 0.7698113181871278, 'prop_2': 0.045298061442644935}, 'target_15': {'priority': 0.6806511540818309, 'prop_1': 0.9623552940750132, 'prop_2': 0.027072300714261234}, 'target_16': {'priority': 0.929280452382046, 'prop_1': 0.9828462633169273, 'prop_2': 0.04660416590043983}, 'target_17': {'priority': 0.7752981170184967, 'prop_1': 0.0, 'prop_2': 0.04314367313238974}, 'target_18': {'priority': 0.0926971311914182, 'prop_1': 0.10028332438249099, 'prop_2': 0.014675933906358952}, 'target_19': {'priority': 0.6004457980912233, 'prop_1': 0.9753239499132759, 'prop_2': 0.016639140523782653}, 'target_20': {'priority': 0.45305636745872835, 'prop_1': 0.4415736864728513, 'prop_2': 0.014438106667803253}, 'target_21': {'priority': 0.4104504187098065, 'prop_1': 0.42176142091320595, 'prop_2': 0.03738850657711221}, 'target_22': {'priority': 0.2817738215183342, 'prop_1': 0.5667693622116196, 'prop_2': 0.03294545339082754}, 'target_23': {'priority': 0.9681156338062515, 'prop_1': 0.6103254893756423, 'prop_2': 0.015276096739788967}, 'target_24': {'priority': 0.348206804810428, 'prop_1': 0.9792299073625499, 'prop_2': 0.03555376418462278}, 'target_25': {'priority': 0.8514993239532047, 'prop_1': 0.41851541977900913, 'prop_2': 0.030686176325074865}, 'target_26': {'priority': 0.39612121845119197, 'prop_1': 0.7450528103733399, 'prop_2': 0.03526315180335297}, 'target_27': {'priority': 0.1554068368603777, 'prop_1': 0.1837038919814267, 'prop_2': 0.016663514938739393}, 'target_28': {'priority': 0.8240398029706025, 'prop_1': 0.15539991723335303, 'prop_2': 0.047887479978929316}, 'target_29': {'priority': 0.9047200828734902, 'prop_1': 0.8111759624117715, 'prop_2': 0.010756586279688403}, 'target_30': {'priority': 0.6697085145240956, 'prop_1': 0.6700598695572187, 'prop_2': 0.01970058172066188}, 'target_31': {'priority': 0.2652927373869285, 'prop_1': 0.05396448514325962, 'prop_2': 0.010514918684288953}}
time:  0.0

Then, run the simulation until timeout or agent failure.

[71]:
count = 0
while True:

    if count == 0:
        # Vector with an action for each satellite (we can pass different actions for each satellite)
        # Tasking all satellites to charge (tasking None as the first action will raise a warning)
        action_vector = [0]
    elif count == 1:
        # None will continue the last action, but will also raise a warning
        action_vector = [None]
    elif count == 2:
        # Tasking different actions for each satellite
        action_vector = [1]
    else:
        # Tasking random actions
        action_vector = env.action_space.sample()
    count += 1

    observation, reward, terminated, truncated, info = env.step(action_vector)

    # Show the custom normalized observation vector
    # print("\tObservation:", observation)

    if terminated or truncated:
        print("Episode complete.")
        break
2024-07-19 09:54:47,608 gym                            INFO       <0.00> === STARTING STEP ===
2024-07-19 09:54:47,614 sats.satellite.EO              INFO       <0.00> EO: action_charge tasked for 60.0 seconds
2024-07-19 09:54:47,614 sats.satellite.EO              INFO       <0.00> EO: setting timed terminal event at 60.0
2024-07-19 09:54:47,627 sim.simulator                  INFO       <0.00> Running simulation at most to 300.00 seconds
2024-07-19 09:54:47,656 sats.satellite.EO              INFO       <60.00> EO: timed termination at 60.0 for action_charge
2024-07-19 09:54:47,661 data.base                      INFO       <60.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:47,664 gym                            INFO       <60.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:47,664 gym                            INFO       <60.00> Step reward: 0.0
2024-07-19 09:54:47,666 gym                            INFO       <60.00> === STARTING STEP ===
2024-07-19 09:54:47,666 gym                            WARNING    <60.00> Satellite EO requires retasking but received no task.
2024-07-19 09:54:47,667 sim.simulator                  INFO       <60.00> Running simulation at most to 360.00 seconds
2024-07-19 09:54:47,771 data.base                      INFO       <360.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:47,773 gym                            INFO       <360.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:47,773 gym                            INFO       <360.00> Step reward: 0.0
2024-07-19 09:54:47,774 gym                            INFO       <360.00> === STARTING STEP ===
2024-07-19 09:54:47,774 sats.satellite.EO              INFO       <360.00> EO: target index 0 tasked
2024-07-19 09:54:47,775 sats.satellite.EO              INFO       <360.00> EO: Target(tgt-1188) tasked for imaging
2024-07-19 09:54:47,778 sats.satellite.EO              INFO       <360.00> EO: Target(tgt-1188) window enabled: 326.0 to 375.3
2024-07-19 09:54:47,778 sats.satellite.EO              INFO       <360.00> EO: setting timed terminal event at 375.3
2024-07-19 09:54:47,779 sim.simulator                  INFO       <360.00> Running simulation at most to 660.00 seconds
2024-07-19 09:54:47,785 sats.satellite.EO              INFO       <375.50> EO: timed termination at 375.3 for Target(tgt-1188) window
2024-07-19 09:54:47,788 data.base                      INFO       <375.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:47,790 gym                            INFO       <375.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:47,790 gym                            INFO       <375.50> Step reward: 0.0
2024-07-19 09:54:47,791 gym                            INFO       <375.50> === STARTING STEP ===
2024-07-19 09:54:47,791 sats.satellite.EO              INFO       <375.50> EO: target index 1 tasked
2024-07-19 09:54:47,791 sats.satellite.EO              INFO       <375.50> EO: Target(tgt-3852) tasked for imaging
2024-07-19 09:54:47,795 sats.satellite.EO              INFO       <375.50> EO: Target(tgt-3852) window enabled: 334.4 to 393.9
2024-07-19 09:54:47,795 sats.satellite.EO              INFO       <375.50> EO: setting timed terminal event at 393.9
2024-07-19 09:54:47,795 sim.simulator                  INFO       <375.50> Running simulation at most to 675.50 seconds
2024-07-19 09:54:47,804 sats.satellite.EO              INFO       <394.00> EO: timed termination at 393.9 for Target(tgt-3852) window
2024-07-19 09:54:47,806 data.base                      INFO       <394.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:47,808 gym                            INFO       <394.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:47,808 gym                            INFO       <394.00> Step reward: 0.0
2024-07-19 09:54:47,809 gym                            INFO       <394.00> === STARTING STEP ===
2024-07-19 09:54:47,809 sats.satellite.EO              INFO       <394.00> EO: target index 16 tasked
2024-07-19 09:54:47,810 sats.satellite.EO              INFO       <394.00> EO: Target(tgt-64) tasked for imaging
2024-07-19 09:54:47,813 sats.satellite.EO              INFO       <394.00> EO: Target(tgt-64) window enabled: 641.0 to 707.8
2024-07-19 09:54:47,813 sats.satellite.EO              INFO       <394.00> EO: setting timed terminal event at 707.8
2024-07-19 09:54:47,814 sim.simulator                  INFO       <394.00> Running simulation at most to 694.00 seconds
2024-07-19 09:54:47,915 sats.satellite.EO              INFO       <642.50> EO: imaged Target(tgt-64)
2024-07-19 09:54:47,918 data.base                      INFO       <642.50> Data reward: {'EO': 0.3754721142626522}
2024-07-19 09:54:47,920 gym                            INFO       <642.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:47,921 gym                            INFO       <642.50> Step reward: 0.3754721142626522
2024-07-19 09:54:47,921 gym                            INFO       <642.50> === STARTING STEP ===
2024-07-19 09:54:47,922 sats.satellite.EO              INFO       <642.50> EO: target index 23 tasked
2024-07-19 09:54:47,922 sats.satellite.EO              INFO       <642.50> EO: Target(tgt-3463) tasked for imaging
2024-07-19 09:54:47,925 sats.satellite.EO              INFO       <642.50> EO: Target(tgt-3463) window enabled: 1316.0 to 1427.9
2024-07-19 09:54:47,925 sats.satellite.EO              INFO       <642.50> EO: setting timed terminal event at 1427.9
2024-07-19 09:54:47,926 sim.simulator                  INFO       <642.50> Running simulation at most to 942.50 seconds
2024-07-19 09:54:48,027 data.base                      INFO       <942.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,029 gym                            INFO       <942.50> Step reward: 0.0
2024-07-19 09:54:48,030 gym                            INFO       <942.50> === STARTING STEP ===
2024-07-19 09:54:48,030 sats.satellite.EO              INFO       <942.50> EO: target index 7 tasked
2024-07-19 09:54:48,030 sats.satellite.EO              INFO       <942.50> EO: Target(tgt-3502) tasked for imaging
2024-07-19 09:54:48,033 sats.satellite.EO              INFO       <942.50> EO: Target(tgt-3502) window enabled: 1121.6 to 1253.3
2024-07-19 09:54:48,034 sats.satellite.EO              INFO       <942.50> EO: setting timed terminal event at 1253.3
2024-07-19 09:54:48,034 sim.simulator                  INFO       <942.50> Running simulation at most to 1242.50 seconds
2024-07-19 09:54:48,090 sats.satellite.EO              INFO       <1123.00> EO: imaged Target(tgt-3502)
2024-07-19 09:54:48,093 data.base                      INFO       <1123.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,095 gym                            INFO       <1123.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,095 gym                            INFO       <1123.00> Step reward: 0.0
2024-07-19 09:54:48,096 gym                            INFO       <1123.00> === STARTING STEP ===
2024-07-19 09:54:48,096 sats.satellite.EO              INFO       <1123.00> EO: target index 8 tasked
2024-07-19 09:54:48,096 sats.satellite.EO              INFO       <1123.00> EO: Target(tgt-601) tasked for imaging
2024-07-19 09:54:48,100 sats.satellite.EO              INFO       <1123.00> EO: Target(tgt-601) window enabled: 1259.0 to 1387.1
2024-07-19 09:54:48,100 sats.satellite.EO              INFO       <1123.00> EO: setting timed terminal event at 1387.1
2024-07-19 09:54:48,100 sim.simulator                  INFO       <1123.00> Running simulation at most to 1423.00 seconds
2024-07-19 09:54:48,141 sats.satellite.EO              INFO       <1260.50> EO: imaged Target(tgt-601)
2024-07-19 09:54:48,144 data.base                      INFO       <1260.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,146 gym                            INFO       <1260.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,146 gym                            INFO       <1260.50> Step reward: 0.0
2024-07-19 09:54:48,147 gym                            INFO       <1260.50> === STARTING STEP ===
2024-07-19 09:54:48,148 sats.satellite.EO              INFO       <1260.50> EO: target index 28 tasked
2024-07-19 09:54:48,148 sats.satellite.EO              INFO       <1260.50> EO: Target(tgt-1375) tasked for imaging
2024-07-19 09:54:48,151 sats.satellite.EO              INFO       <1260.50> EO: Target(tgt-1375) window enabled: 1937.0 to 2049.4
2024-07-19 09:54:48,151 sats.satellite.EO              INFO       <1260.50> EO: setting timed terminal event at 2049.4
2024-07-19 09:54:48,152 sim.simulator                  INFO       <1260.50> Running simulation at most to 1560.50 seconds
2024-07-19 09:54:48,362 data.base                      INFO       <1560.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,364 gym                            INFO       <1560.50> Step reward: 0.0
2024-07-19 09:54:48,365 gym                            INFO       <1560.50> === STARTING STEP ===
2024-07-19 09:54:48,365 sats.satellite.EO              INFO       <1560.50> EO: target index 30 tasked
2024-07-19 09:54:48,365 sats.satellite.EO              INFO       <1560.50> EO: Target(tgt-1612) tasked for imaging
2024-07-19 09:54:48,368 sats.satellite.EO              INFO       <1560.50> EO: Target(tgt-1612) window enabled: 2331.2 to 2450.7
2024-07-19 09:54:48,369 sats.satellite.EO              INFO       <1560.50> EO: setting timed terminal event at 2450.7
2024-07-19 09:54:48,369 sim.simulator                  INFO       <1560.50> Running simulation at most to 1860.50 seconds
2024-07-19 09:54:48,465 data.base                      INFO       <1860.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,467 gym                            INFO       <1860.50> Step reward: 0.0
2024-07-19 09:54:48,468 gym                            INFO       <1860.50> === STARTING STEP ===
2024-07-19 09:54:48,468 sats.satellite.EO              INFO       <1860.50> EO: target index 3 tasked
2024-07-19 09:54:48,468 sats.satellite.EO              INFO       <1860.50> EO: Target(tgt-180) tasked for imaging
2024-07-19 09:54:48,472 sats.satellite.EO              INFO       <1860.50> EO: Target(tgt-180) window enabled: 1914.6 to 1964.6
2024-07-19 09:54:48,472 sats.satellite.EO              INFO       <1860.50> EO: setting timed terminal event at 1964.6
2024-07-19 09:54:48,473 sim.simulator                  INFO       <1860.50> Running simulation at most to 2160.50 seconds
2024-07-19 09:54:48,508 sats.satellite.EO              INFO       <1916.00> EO: imaged Target(tgt-180)
2024-07-19 09:54:48,511 data.base                      INFO       <1916.00> Data reward: {'EO': 0.0620457304795331}
2024-07-19 09:54:48,513 gym                            INFO       <1916.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,513 gym                            INFO       <1916.00> Step reward: 0.0620457304795331
2024-07-19 09:54:48,514 gym                            INFO       <1916.00> === STARTING STEP ===
2024-07-19 09:54:48,514 sats.satellite.EO              INFO       <1916.00> EO: target index 20 tasked
2024-07-19 09:54:48,515 sats.satellite.EO              INFO       <1916.00> EO: Target(tgt-3401) tasked for imaging
2024-07-19 09:54:48,518 sats.satellite.EO              INFO       <1916.00> EO: Target(tgt-3401) window enabled: 2326.6 to 2447.8
2024-07-19 09:54:48,518 sats.satellite.EO              INFO       <1916.00> EO: setting timed terminal event at 2447.8
2024-07-19 09:54:48,519 sim.simulator                  INFO       <1916.00> Running simulation at most to 2216.00 seconds
2024-07-19 09:54:48,616 data.base                      INFO       <2216.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,618 gym                            INFO       <2216.00> Step reward: 0.0
2024-07-19 09:54:48,619 gym                            INFO       <2216.00> === STARTING STEP ===
2024-07-19 09:54:48,619 sats.satellite.EO              INFO       <2216.00> EO: target index 20 tasked
2024-07-19 09:54:48,620 sats.satellite.EO              INFO       <2216.00> EO: Target(tgt-3186) tasked for imaging
2024-07-19 09:54:48,623 sats.satellite.EO              INFO       <2216.00> EO: Target(tgt-3186) window enabled: 2687.4 to 2733.6
2024-07-19 09:54:48,623 sats.satellite.EO              INFO       <2216.00> EO: setting timed terminal event at 2733.6
2024-07-19 09:54:48,624 sim.simulator                  INFO       <2216.00> Running simulation at most to 2516.00 seconds
2024-07-19 09:54:48,721 data.base                      INFO       <2516.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,723 gym                            INFO       <2516.00> Step reward: 0.0
2024-07-19 09:54:48,724 gym                            INFO       <2516.00> === STARTING STEP ===
2024-07-19 09:54:48,725 sats.satellite.EO              INFO       <2516.00> EO: target index 1 tasked
2024-07-19 09:54:48,725 sats.satellite.EO              INFO       <2516.00> EO: Target(tgt-791) tasked for imaging
2024-07-19 09:54:48,728 sats.satellite.EO              INFO       <2516.00> EO: Target(tgt-791) window enabled: 2436.2 to 2561.6
2024-07-19 09:54:48,729 sats.satellite.EO              INFO       <2516.00> EO: setting timed terminal event at 2561.6
2024-07-19 09:54:48,729 sim.simulator                  INFO       <2516.00> Running simulation at most to 2816.00 seconds
2024-07-19 09:54:48,747 sats.satellite.EO              INFO       <2562.00> EO: timed termination at 2561.6 for Target(tgt-791) window
2024-07-19 09:54:48,750 data.base                      INFO       <2562.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,752 gym                            INFO       <2562.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,752 gym                            INFO       <2562.00> Step reward: 0.0
2024-07-19 09:54:48,753 gym                            INFO       <2562.00> === STARTING STEP ===
2024-07-19 09:54:48,753 sats.satellite.EO              INFO       <2562.00> EO: target index 4 tasked
2024-07-19 09:54:48,753 sats.satellite.EO              INFO       <2562.00> EO: Target(tgt-2792) tasked for imaging
2024-07-19 09:54:48,757 sats.satellite.EO              INFO       <2562.00> EO: Target(tgt-2792) window enabled: 2532.4 to 2658.5
2024-07-19 09:54:48,757 sats.satellite.EO              INFO       <2562.00> EO: setting timed terminal event at 2658.5
2024-07-19 09:54:48,758 sim.simulator                  INFO       <2562.00> Running simulation at most to 2862.00 seconds
2024-07-19 09:54:48,776 sats.satellite.EO              INFO       <2606.50> EO: imaged Target(tgt-2792)
2024-07-19 09:54:48,780 data.base                      INFO       <2606.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,781 gym                            INFO       <2606.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,782 gym                            INFO       <2606.50> Step reward: 0.0
2024-07-19 09:54:48,783 gym                            INFO       <2606.50> === STARTING STEP ===
2024-07-19 09:54:48,783 sats.satellite.EO              INFO       <2606.50> EO: target index 28 tasked
2024-07-19 09:54:48,783 sats.satellite.EO              INFO       <2606.50> EO: Target(tgt-1293) tasked for imaging
2024-07-19 09:54:48,787 sats.satellite.EO              INFO       <2606.50> EO: Target(tgt-1293) window enabled: 3271.6 to 3327.9
2024-07-19 09:54:48,787 sats.satellite.EO              INFO       <2606.50> EO: setting timed terminal event at 3327.9
2024-07-19 09:54:48,788 sim.simulator                  INFO       <2606.50> Running simulation at most to 2906.50 seconds
2024-07-19 09:54:48,895 data.base                      INFO       <2906.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,897 gym                            INFO       <2906.50> Step reward: 0.0
2024-07-19 09:54:48,898 gym                            INFO       <2906.50> === STARTING STEP ===
2024-07-19 09:54:48,898 sats.satellite.EO              INFO       <2906.50> EO: target index 0 tasked
2024-07-19 09:54:48,899 sats.satellite.EO              INFO       <2906.50> EO: Target(tgt-3342) tasked for imaging
2024-07-19 09:54:48,902 sats.satellite.EO              INFO       <2906.50> EO: Target(tgt-3342) window enabled: 2842.5 to 2923.2
2024-07-19 09:54:48,903 sats.satellite.EO              INFO       <2906.50> EO: setting timed terminal event at 2923.2
2024-07-19 09:54:48,903 sim.simulator                  INFO       <2906.50> Running simulation at most to 3206.50 seconds
2024-07-19 09:54:48,910 sats.satellite.EO              INFO       <2923.50> EO: timed termination at 2923.2 for Target(tgt-3342) window
2024-07-19 09:54:48,913 data.base                      INFO       <2923.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:48,914 gym                            INFO       <2923.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,915 gym                            INFO       <2923.50> Step reward: 0.0
2024-07-19 09:54:48,915 gym                            INFO       <2923.50> === STARTING STEP ===
2024-07-19 09:54:48,916 sats.satellite.EO              INFO       <2923.50> EO: target index 8 tasked
2024-07-19 09:54:48,916 sats.satellite.EO              INFO       <2923.50> EO: Target(tgt-2542) tasked for imaging
2024-07-19 09:54:48,919 sats.satellite.EO              INFO       <2923.50> EO: Target(tgt-2542) window enabled: 3062.6 to 3175.1
2024-07-19 09:54:48,919 sats.satellite.EO              INFO       <2923.50> EO: setting timed terminal event at 3175.1
2024-07-19 09:54:48,920 sim.simulator                  INFO       <2923.50> Running simulation at most to 3223.50 seconds
2024-07-19 09:54:48,968 sats.satellite.EO              INFO       <3064.00> EO: imaged Target(tgt-2542)
2024-07-19 09:54:48,971 data.base                      INFO       <3064.00> Data reward: {'EO': 0.17047349108051557}
2024-07-19 09:54:48,973 gym                            INFO       <3064.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:48,974 gym                            INFO       <3064.00> Step reward: 0.17047349108051557
2024-07-19 09:54:48,974 gym                            INFO       <3064.00> === STARTING STEP ===
2024-07-19 09:54:48,975 sats.satellite.EO              INFO       <3064.00> EO: target index 16 tasked
2024-07-19 09:54:48,975 sats.satellite.EO              INFO       <3064.00> EO: Target(tgt-3368) tasked for imaging
2024-07-19 09:54:48,978 sats.satellite.EO              INFO       <3064.00> EO: Target(tgt-3368) window enabled: 3281.9 to 3394.3
2024-07-19 09:54:48,979 sats.satellite.EO              INFO       <3064.00> EO: setting timed terminal event at 3394.3
2024-07-19 09:54:48,979 sim.simulator                  INFO       <3064.00> Running simulation at most to 3364.00 seconds
2024-07-19 09:54:49,049 sats.satellite.EO              INFO       <3283.00> EO: imaged Target(tgt-3368)
2024-07-19 09:54:49,052 data.base                      INFO       <3283.00> Data reward: {'EO': 0.5480829099495642}
2024-07-19 09:54:49,054 gym                            INFO       <3283.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,054 gym                            INFO       <3283.00> Step reward: 0.5480829099495642
2024-07-19 09:54:49,055 gym                            INFO       <3283.00> === STARTING STEP ===
2024-07-19 09:54:49,055 sats.satellite.EO              INFO       <3283.00> EO: target index 1 tasked
2024-07-19 09:54:49,056 sats.satellite.EO              INFO       <3283.00> EO: Target(tgt-3190) tasked for imaging
2024-07-19 09:54:49,059 sats.satellite.EO              INFO       <3283.00> EO: Target(tgt-3190) window enabled: 3204.3 to 3285.7
2024-07-19 09:54:49,060 sats.satellite.EO              INFO       <3283.00> EO: setting timed terminal event at 3285.7
2024-07-19 09:54:49,060 sim.simulator                  INFO       <3283.00> Running simulation at most to 3583.00 seconds
2024-07-19 09:54:49,063 sats.satellite.EO              INFO       <3286.00> EO: timed termination at 3285.7 for Target(tgt-3190) window
2024-07-19 09:54:49,066 data.base                      INFO       <3286.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,067 gym                            INFO       <3286.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,068 gym                            INFO       <3286.00> Step reward: 0.0
2024-07-19 09:54:49,069 gym                            INFO       <3286.00> === STARTING STEP ===
2024-07-19 09:54:49,069 sats.satellite.EO              INFO       <3286.00> EO: target index 26 tasked
2024-07-19 09:54:49,069 sats.satellite.EO              INFO       <3286.00> EO: Target(tgt-3658) tasked for imaging
2024-07-19 09:54:49,073 sats.satellite.EO              INFO       <3286.00> EO: Target(tgt-3658) window enabled: 3671.1 to 3795.2
2024-07-19 09:54:49,135 sats.satellite.EO              INFO       <3286.00> EO: setting timed terminal event at 3795.2
2024-07-19 09:54:49,155 sim.simulator                  INFO       <3286.00> Running simulation at most to 3586.00 seconds
2024-07-19 09:54:49,304 data.base                      INFO       <3586.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,305 gym                            INFO       <3586.00> Step reward: 0.0
2024-07-19 09:54:49,306 gym                            INFO       <3586.00> === STARTING STEP ===
2024-07-19 09:54:49,306 sats.satellite.EO              INFO       <3586.00> EO: target index 11 tasked
2024-07-19 09:54:49,307 sats.satellite.EO              INFO       <3586.00> EO: Target(tgt-530) tasked for imaging
2024-07-19 09:54:49,310 sats.satellite.EO              INFO       <3586.00> EO: Target(tgt-530) window enabled: 3700.7 to 3795.3
2024-07-19 09:54:49,311 sats.satellite.EO              INFO       <3586.00> EO: setting timed terminal event at 3795.3
2024-07-19 09:54:49,311 sim.simulator                  INFO       <3586.00> Running simulation at most to 3886.00 seconds
2024-07-19 09:54:49,349 sats.satellite.EO              INFO       <3702.00> EO: imaged Target(tgt-530)
2024-07-19 09:54:49,353 data.base                      INFO       <3702.00> Data reward: {'EO': 0.17160945565918637}
2024-07-19 09:54:49,355 gym                            INFO       <3702.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,355 gym                            INFO       <3702.00> Step reward: 0.17160945565918637
2024-07-19 09:54:49,356 gym                            INFO       <3702.00> === STARTING STEP ===
2024-07-19 09:54:49,356 sats.satellite.EO              INFO       <3702.00> EO: target index 23 tasked
2024-07-19 09:54:49,357 sats.satellite.EO              INFO       <3702.00> EO: Target(tgt-2787) tasked for imaging
2024-07-19 09:54:49,360 sats.satellite.EO              INFO       <3702.00> EO: Target(tgt-2787) window enabled: 4338.6 to 4449.4
2024-07-19 09:54:49,360 sats.satellite.EO              INFO       <3702.00> EO: setting timed terminal event at 4449.4
2024-07-19 09:54:49,361 sim.simulator                  INFO       <3702.00> Running simulation at most to 4002.00 seconds
2024-07-19 09:54:49,456 data.base                      INFO       <4002.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,458 gym                            INFO       <4002.00> Step reward: 0.0
2024-07-19 09:54:49,459 gym                            INFO       <4002.00> === STARTING STEP ===
2024-07-19 09:54:49,459 sats.satellite.EO              INFO       <4002.00> EO: target index 8 tasked
2024-07-19 09:54:49,460 sats.satellite.EO              INFO       <4002.00> EO: Target(tgt-3589) tasked for imaging
2024-07-19 09:54:49,463 sats.satellite.EO              INFO       <4002.00> EO: Target(tgt-3589) window enabled: 4207.7 to 4321.5
2024-07-19 09:54:49,463 sats.satellite.EO              INFO       <4002.00> EO: setting timed terminal event at 4321.5
2024-07-19 09:54:49,464 sim.simulator                  INFO       <4002.00> Running simulation at most to 4302.00 seconds
2024-07-19 09:54:49,529 sats.satellite.EO              INFO       <4209.00> EO: imaged Target(tgt-3589)
2024-07-19 09:54:49,532 data.base                      INFO       <4209.00> Data reward: {'EO': 0.15403143413322856}
2024-07-19 09:54:49,534 gym                            INFO       <4209.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,534 gym                            INFO       <4209.00> Step reward: 0.15403143413322856
2024-07-19 09:54:49,535 gym                            INFO       <4209.00> === STARTING STEP ===
2024-07-19 09:54:49,536 sats.satellite.EO              INFO       <4209.00> EO: target index 25 tasked
2024-07-19 09:54:49,536 sats.satellite.EO              INFO       <4209.00> EO: Target(tgt-1515) tasked for imaging
2024-07-19 09:54:49,539 sats.satellite.EO              INFO       <4209.00> EO: Target(tgt-1515) window enabled: 4574.8 to 4706.3
2024-07-19 09:54:49,539 sats.satellite.EO              INFO       <4209.00> EO: setting timed terminal event at 4706.3
2024-07-19 09:54:49,540 sim.simulator                  INFO       <4209.00> Running simulation at most to 4509.00 seconds
2024-07-19 09:54:49,633 data.base                      INFO       <4509.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,635 gym                            INFO       <4509.00> Step reward: 0.0
2024-07-19 09:54:49,636 gym                            INFO       <4509.00> === STARTING STEP ===
2024-07-19 09:54:49,636 sats.satellite.EO              INFO       <4509.00> EO: target index 8 tasked
2024-07-19 09:54:49,637 sats.satellite.EO              INFO       <4509.00> EO: Target(tgt-3174) tasked for imaging
2024-07-19 09:54:49,640 sats.satellite.EO              INFO       <4509.00> EO: Target(tgt-3174) window enabled: 4542.1 to 4650.9
2024-07-19 09:54:49,640 sats.satellite.EO              INFO       <4509.00> EO: setting timed terminal event at 4650.9
2024-07-19 09:54:49,641 sim.simulator                  INFO       <4509.00> Running simulation at most to 4809.00 seconds
2024-07-19 09:54:49,652 sats.satellite.EO              INFO       <4543.50> EO: imaged Target(tgt-3174)
2024-07-19 09:54:49,655 data.base                      INFO       <4543.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,657 gym                            INFO       <4543.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,657 gym                            INFO       <4543.50> Step reward: 0.0
2024-07-19 09:54:49,658 gym                            INFO       <4543.50> === STARTING STEP ===
2024-07-19 09:54:49,658 sats.satellite.EO              INFO       <4543.50> EO: target index 3 tasked
2024-07-19 09:54:49,658 sats.satellite.EO              INFO       <4543.50> EO: Target(tgt-2210) tasked for imaging
2024-07-19 09:54:49,662 sats.satellite.EO              INFO       <4543.50> EO: Target(tgt-2210) window enabled: 4516.6 to 4587.1
2024-07-19 09:54:49,662 sats.satellite.EO              INFO       <4543.50> EO: setting timed terminal event at 4587.1
2024-07-19 09:54:49,663 sim.simulator                  INFO       <4543.50> Running simulation at most to 4843.50 seconds
2024-07-19 09:54:49,681 sats.satellite.EO              INFO       <4587.50> EO: timed termination at 4587.1 for Target(tgt-2210) window
2024-07-19 09:54:49,685 data.base                      INFO       <4587.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,687 gym                            INFO       <4587.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,688 gym                            INFO       <4587.50> Step reward: 0.0
2024-07-19 09:54:49,688 gym                            INFO       <4587.50> === STARTING STEP ===
2024-07-19 09:54:49,689 sats.satellite.EO              INFO       <4587.50> EO: target index 20 tasked
2024-07-19 09:54:49,689 sats.satellite.EO              INFO       <4587.50> EO: Target(tgt-3128) tasked for imaging
2024-07-19 09:54:49,693 sats.satellite.EO              INFO       <4587.50> EO: Target(tgt-3128) window enabled: 5019.4 to 5132.1
2024-07-19 09:54:49,693 sats.satellite.EO              INFO       <4587.50> EO: setting timed terminal event at 5132.1
2024-07-19 09:54:49,693 sim.simulator                  INFO       <4587.50> Running simulation at most to 4887.50 seconds
2024-07-19 09:54:49,808 data.base                      INFO       <4887.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,809 gym                            INFO       <4887.50> Step reward: 0.0
2024-07-19 09:54:49,810 gym                            INFO       <4887.50> === STARTING STEP ===
2024-07-19 09:54:49,811 sats.satellite.EO              INFO       <4887.50> EO: target index 6 tasked
2024-07-19 09:54:49,811 sats.satellite.EO              INFO       <4887.50> EO: Target(tgt-220) tasked for imaging
2024-07-19 09:54:49,814 sats.satellite.EO              INFO       <4887.50> EO: Target(tgt-220) window enabled: 5029.1 to 5135.4
2024-07-19 09:54:49,815 sats.satellite.EO              INFO       <4887.50> EO: setting timed terminal event at 5135.4
2024-07-19 09:54:49,815 sim.simulator                  INFO       <4887.50> Running simulation at most to 5187.50 seconds
2024-07-19 09:54:49,894 sats.satellite.EO              INFO       <5135.50> EO: timed termination at 5135.4 for Target(tgt-220) window
2024-07-19 09:54:49,897 data.base                      INFO       <5135.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:49,899 gym                            INFO       <5135.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:49,899 gym                            INFO       <5135.50> Step reward: 0.0
2024-07-19 09:54:49,900 gym                            INFO       <5135.50> === STARTING STEP ===
2024-07-19 09:54:49,900 sats.satellite.EO              INFO       <5135.50> EO: target index 31 tasked
2024-07-19 09:54:49,901 sats.satellite.EO              INFO       <5135.50> EO: Target(tgt-2914) tasked for imaging
2024-07-19 09:54:49,904 sats.satellite.EO              INFO       <5135.50> EO: Target(tgt-2914) window enabled: 5909.0 to 6040.2
2024-07-19 09:54:49,905 sats.satellite.EO              INFO       <5135.50> EO: setting timed terminal event at 6040.2
2024-07-19 09:54:49,905 sim.simulator                  INFO       <5135.50> Running simulation at most to 5435.50 seconds
2024-07-19 09:54:50,002 data.base                      INFO       <5435.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,004 gym                            INFO       <5435.50> Step reward: 0.0
2024-07-19 09:54:50,005 gym                            INFO       <5435.50> === STARTING STEP ===
2024-07-19 09:54:50,006 sats.satellite.EO              INFO       <5435.50> EO: target index 18 tasked
2024-07-19 09:54:50,006 sats.satellite.EO              INFO       <5435.50> EO: Target(tgt-3303) tasked for imaging
2024-07-19 09:54:50,010 sats.satellite.EO              INFO       <5435.50> EO: Target(tgt-3303) window enabled: 5622.2 to 5736.4
2024-07-19 09:54:50,011 sats.satellite.EO              INFO       <5435.50> EO: setting timed terminal event at 5736.4
2024-07-19 09:54:50,011 sim.simulator                  INFO       <5435.50> Running simulation at most to 5735.50 seconds
2024-07-19 09:54:50,113 data.base                      INFO       <5735.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,115 gym                            INFO       <5735.50> Step reward: 0.0
2024-07-19 09:54:50,115 gym                            INFO       <5735.50> === STARTING STEP ===
2024-07-19 09:54:50,116 sats.satellite.EO              INFO       <5735.50> EO: target index 26 tasked
2024-07-19 09:54:50,116 sats.satellite.EO              INFO       <5735.50> EO: Target(tgt-2841) tasked for imaging
2024-07-19 09:54:50,120 sats.satellite.EO              INFO       <5735.50> EO: Target(tgt-2841) window enabled: 6391.7 to 6521.6
2024-07-19 09:54:50,120 sats.satellite.EO              INFO       <5735.50> EO: setting timed terminal event at 6521.6
2024-07-19 09:54:50,120 sim.simulator                  INFO       <5735.50> Running simulation at most to 6035.50 seconds
2024-07-19 09:54:50,233 data.base                      INFO       <6035.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,235 gym                            INFO       <6035.50> Step reward: 0.0
2024-07-19 09:54:50,236 gym                            INFO       <6035.50> === STARTING STEP ===
2024-07-19 09:54:50,236 sats.satellite.EO              INFO       <6035.50> EO: target index 27 tasked
2024-07-19 09:54:50,237 sats.satellite.EO              INFO       <6035.50> EO: Target(tgt-905) tasked for imaging
2024-07-19 09:54:50,240 sats.satellite.EO              INFO       <6035.50> EO: Target(tgt-905) window enabled: 6526.4 to 6598.6
2024-07-19 09:54:50,240 sats.satellite.EO              INFO       <6035.50> EO: setting timed terminal event at 6598.6
2024-07-19 09:54:50,257 sim.simulator                  INFO       <6035.50> Running simulation at most to 6335.50 seconds
2024-07-19 09:54:50,472 data.base                      INFO       <6335.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,474 gym                            INFO       <6335.50> Step reward: 0.0
2024-07-19 09:54:50,475 gym                            INFO       <6335.50> === STARTING STEP ===
2024-07-19 09:54:50,475 sats.satellite.EO              INFO       <6335.50> EO: target index 29 tasked
2024-07-19 09:54:50,476 sats.satellite.EO              INFO       <6335.50> EO: Target(tgt-372) tasked for imaging
2024-07-19 09:54:50,479 sats.satellite.EO              INFO       <6335.50> EO: Target(tgt-372) window enabled: 6824.9 to 6949.1
2024-07-19 09:54:50,480 sats.satellite.EO              INFO       <6335.50> EO: setting timed terminal event at 6949.1
2024-07-19 09:54:50,480 sim.simulator                  INFO       <6335.50> Running simulation at most to 6635.50 seconds
2024-07-19 09:54:50,594 data.base                      INFO       <6635.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,596 gym                            INFO       <6635.50> Step reward: 0.0
2024-07-19 09:54:50,597 gym                            INFO       <6635.50> === STARTING STEP ===
2024-07-19 09:54:50,597 sats.satellite.EO              INFO       <6635.50> EO: target index 15 tasked
2024-07-19 09:54:50,598 sats.satellite.EO              INFO       <6635.50> EO: Target(tgt-225) tasked for imaging
2024-07-19 09:54:50,601 sats.satellite.EO              INFO       <6635.50> EO: Target(tgt-225) window enabled: 6896.2 to 7014.1
2024-07-19 09:54:50,601 sats.satellite.EO              INFO       <6635.50> EO: setting timed terminal event at 7014.1
2024-07-19 09:54:50,602 sim.simulator                  INFO       <6635.50> Running simulation at most to 6935.50 seconds
2024-07-19 09:54:50,692 data.base                      INFO       <6935.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,694 gym                            INFO       <6935.50> Step reward: 0.0
2024-07-19 09:54:50,695 gym                            INFO       <6935.50> === STARTING STEP ===
2024-07-19 09:54:50,695 sats.satellite.EO              INFO       <6935.50> EO: target index 13 tasked
2024-07-19 09:54:50,695 sats.satellite.EO              INFO       <6935.50> EO: Target(tgt-2274) tasked for imaging
2024-07-19 09:54:50,699 sats.satellite.EO              INFO       <6935.50> EO: Target(tgt-2274) window enabled: 7136.7 to 7268.7
2024-07-19 09:54:50,699 sats.satellite.EO              INFO       <6935.50> EO: setting timed terminal event at 7268.7
2024-07-19 09:54:50,699 sim.simulator                  INFO       <6935.50> Running simulation at most to 7235.50 seconds
2024-07-19 09:54:50,790 data.base                      INFO       <7235.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,792 gym                            INFO       <7235.50> Step reward: 0.0
2024-07-19 09:54:50,793 gym                            INFO       <7235.50> === STARTING STEP ===
2024-07-19 09:54:50,793 sats.satellite.EO              INFO       <7235.50> EO: target index 9 tasked
2024-07-19 09:54:50,793 sats.satellite.EO              INFO       <7235.50> EO: Target(tgt-1090) tasked for imaging
2024-07-19 09:54:50,796 sats.satellite.EO              INFO       <7235.50> EO: Target(tgt-1090) window enabled: 7409.2 to 7535.7
2024-07-19 09:54:50,796 sats.satellite.EO              INFO       <7235.50> EO: setting timed terminal event at 7535.7
2024-07-19 09:54:50,797 sim.simulator                  INFO       <7235.50> Running simulation at most to 7535.50 seconds
2024-07-19 09:54:50,890 data.base                      INFO       <7535.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,892 gym                            INFO       <7535.50> Step reward: 0.0
2024-07-19 09:54:50,893 gym                            INFO       <7535.50> === STARTING STEP ===
2024-07-19 09:54:50,893 sats.satellite.EO              INFO       <7535.50> EO: target index 7 tasked
2024-07-19 09:54:50,894 sats.satellite.EO              INFO       <7535.50> EO: Target(tgt-61) tasked for imaging
2024-07-19 09:54:50,897 sats.satellite.EO              INFO       <7535.50> EO: Target(tgt-61) window enabled: 7502.4 to 7631.0
2024-07-19 09:54:50,897 sats.satellite.EO              INFO       <7535.50> EO: setting timed terminal event at 7631.0
2024-07-19 09:54:50,898 sim.simulator                  INFO       <7535.50> Running simulation at most to 7835.50 seconds
2024-07-19 09:54:50,926 sats.satellite.EO              INFO       <7631.50> EO: timed termination at 7631.0 for Target(tgt-61) window
2024-07-19 09:54:50,929 data.base                      INFO       <7631.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,931 gym                            INFO       <7631.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:50,932 gym                            INFO       <7631.50> Step reward: 0.0
2024-07-19 09:54:50,932 gym                            INFO       <7631.50> === STARTING STEP ===
2024-07-19 09:54:50,933 sats.satellite.EO              INFO       <7631.50> EO: target index 1 tasked
2024-07-19 09:54:50,933 sats.satellite.EO              INFO       <7631.50> EO: Target(tgt-2115) tasked for imaging
2024-07-19 09:54:50,936 sats.satellite.EO              INFO       <7631.50> EO: Target(tgt-2115) window enabled: 7549.9 to 7671.6
2024-07-19 09:54:50,936 sats.satellite.EO              INFO       <7631.50> EO: setting timed terminal event at 7671.6
2024-07-19 09:54:50,937 sim.simulator                  INFO       <7631.50> Running simulation at most to 7931.50 seconds
2024-07-19 09:54:50,950 sats.satellite.EO              INFO       <7672.00> EO: timed termination at 7671.6 for Target(tgt-2115) window
2024-07-19 09:54:50,953 data.base                      INFO       <7672.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,955 gym                            INFO       <7672.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:50,955 gym                            INFO       <7672.00> Step reward: 0.0
2024-07-19 09:54:50,956 gym                            INFO       <7672.00> === STARTING STEP ===
2024-07-19 09:54:50,956 sats.satellite.EO              INFO       <7672.00> EO: target index 0 tasked
2024-07-19 09:54:50,956 sats.satellite.EO              INFO       <7672.00> EO: Target(tgt-2814) tasked for imaging
2024-07-19 09:54:50,959 sats.satellite.EO              INFO       <7672.00> EO: Target(tgt-2814) window enabled: 7604.9 to 7683.7
2024-07-19 09:54:50,960 sats.satellite.EO              INFO       <7672.00> EO: setting timed terminal event at 7683.7
2024-07-19 09:54:50,960 sim.simulator                  INFO       <7672.00> Running simulation at most to 7972.00 seconds
2024-07-19 09:54:50,964 sats.satellite.EO              INFO       <7684.00> EO: timed termination at 7683.7 for Target(tgt-2814) window
2024-07-19 09:54:50,967 data.base                      INFO       <7684.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:50,969 gym                            INFO       <7684.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:50,969 gym                            INFO       <7684.00> Step reward: 0.0
2024-07-19 09:54:50,969 gym                            INFO       <7684.00> === STARTING STEP ===
2024-07-19 09:54:50,970 sats.satellite.EO              INFO       <7684.00> EO: target index 4 tasked
2024-07-19 09:54:50,970 sats.satellite.EO              INFO       <7684.00> EO: Target(tgt-1353) tasked for imaging
2024-07-19 09:54:50,987 sats.satellite.EO              INFO       <7684.00> EO: Target(tgt-1353) window enabled: 7641.8 to 7763.4
2024-07-19 09:54:50,990 sats.satellite.EO              INFO       <7684.00> EO: setting timed terminal event at 7763.4
2024-07-19 09:54:50,991 sim.simulator                  INFO       <7684.00> Running simulation at most to 7984.00 seconds
2024-07-19 09:54:51,021 sats.satellite.EO              INFO       <7763.50> EO: timed termination at 7763.4 for Target(tgt-1353) window
2024-07-19 09:54:51,024 data.base                      INFO       <7763.50> Data reward: {'EO': 0.0}
2024-07-19 09:54:51,026 gym                            INFO       <7763.50> Satellites requiring retasking: ['EO']
2024-07-19 09:54:51,026 gym                            INFO       <7763.50> Step reward: 0.0
2024-07-19 09:54:51,027 gym                            INFO       <7763.50> === STARTING STEP ===
2024-07-19 09:54:51,027 sats.satellite.EO              INFO       <7763.50> EO: target index 0 tasked
2024-07-19 09:54:51,028 sats.satellite.EO              INFO       <7763.50> EO: Target(tgt-3760) tasked for imaging
2024-07-19 09:54:51,031 sats.satellite.EO              INFO       <7763.50> EO: Target(tgt-3760) window enabled: 7706.4 to 7785.7
2024-07-19 09:54:51,031 sats.satellite.EO              INFO       <7763.50> EO: setting timed terminal event at 7785.7
2024-07-19 09:54:51,032 sim.simulator                  INFO       <7763.50> Running simulation at most to 8063.50 seconds
2024-07-19 09:54:51,041 sats.satellite.EO              INFO       <7786.00> EO: timed termination at 7785.7 for Target(tgt-3760) window
2024-07-19 09:54:51,044 data.base                      INFO       <7786.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:51,046 gym                            INFO       <7786.00> Satellites requiring retasking: ['EO']
2024-07-19 09:54:51,046 gym                            INFO       <7786.00> Step reward: 0.0
2024-07-19 09:54:51,047 gym                            INFO       <7786.00> === STARTING STEP ===
2024-07-19 09:54:51,047 sats.satellite.EO              INFO       <7786.00> EO: target index 17 tasked
2024-07-19 09:54:51,047 sats.satellite.EO              INFO       <7786.00> EO: Target(tgt-1791) tasked for imaging
2024-07-19 09:54:51,050 sats.satellite.EO              INFO       <7786.00> EO: Target(tgt-1791) window enabled: 8270.2 to 8394.8
2024-07-19 09:54:51,050 sats.satellite.EO              INFO       <7786.00> EO: setting timed terminal event at 8394.8
2024-07-19 09:54:51,051 sim.simulator                  INFO       <7786.00> Running simulation at most to 8086.00 seconds
2024-07-19 09:54:51,147 data.base                      INFO       <8086.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:51,149 gym                            INFO       <8086.00> Step reward: 0.0
2024-07-19 09:54:51,150 gym                            INFO       <8086.00> === STARTING STEP ===
2024-07-19 09:54:51,150 sats.satellite.EO              INFO       <8086.00> EO: target index 26 tasked
2024-07-19 09:54:51,151 sats.satellite.EO              INFO       <8086.00> EO: Target(tgt-1316) tasked for imaging
2024-07-19 09:54:51,154 sats.satellite.EO              INFO       <8086.00> EO: Target(tgt-1316) window enabled: 8623.5 to 8739.8
2024-07-19 09:54:51,154 sats.satellite.EO              INFO       <8086.00> EO: setting timed terminal event at 8739.8
2024-07-19 09:54:51,155 sim.simulator                  INFO       <8086.00> Running simulation at most to 8386.00 seconds
2024-07-19 09:54:51,264 data.base                      INFO       <8386.00> Data reward: {'EO': 0.0}
2024-07-19 09:54:51,265 sats.satellite.EO              WARNING    <8386.00> EO: failed battery_valid check
2024-07-19 09:54:51,266 gym                            INFO       <8386.00> Step reward: 0.0
2024-07-19 09:54:51,266 gym                            INFO       <8386.00> Episode terminated: True
2024-07-19 09:54:51,266 gym                            INFO       <8386.00> Episode truncated: False
Episode complete.

After the running the simulation, we can check the reward, number of imaged targets that were covered by clouds and that were not covered by clouds (according to the threshold set in the rewarder).

[78]:
print("Total reward:", env.unwrapped.rewarder.cum_reward)
print("Covered by clouds:", env.unwrapped.rewarder.data.cloud_covered)
print("Not covered by clouds:", env.unwrapped.rewarder.data.cloud_free)
Total reward: {'EO': 1.4817151355646798}
Covered by clouds: [Target(tgt-3174), Target(tgt-3502), Target(tgt-601), Target(tgt-2792)]
Not covered by clouds: [Target(tgt-530), Target(tgt-64), Target(tgt-180), Target(tgt-3368), Target(tgt-3589), Target(tgt-2542)]