Training with RLlib PPO

RLlib is a high-performance, distributed reinforcement learning library. It is preferable to other RL libraries (e.g. Stable Baselines

  1. for bsk_rl environments because it steps environments copies asynchronously; because of the variable step lengths, variable episode step counts, and long episode reset times, stepping each environment independently can increase step throughput by 2-5 times.

Warning: RLlib had a bug that results in an undesirable timeout which stops training. It has since been resolved: https://github.com/ray-project/ray/pull/45147

RLlib is actively developed and can change significantly from version to version. For this script, the following version is used:

[1]:
from importlib.metadata import version
version("ray")  # Parent package of RLlib
[1]:
'2.35.0'

Define the Environment

A nadir-scanning environment is created, to the one used in this paper. The satellite has to collect data while managing the data buffer level and battery level.

First, the satellite class is defined. A custom dynamics model is created that defines a few additional properties to use in the state.

[2]:
import numpy as np
from bsk_rl import act, data, obs, sats, scene
from bsk_rl.sim import dyn, fsw

class ScanningDownlinkDynModel(dyn.ContinuousImagingDynModel, dyn.GroundStationDynModel):
    # Define some custom properties to be accessed in the state
    @property
    def instrument_pointing_error(self) -> float:
        r_BN_P_unit = self.r_BN_P/np.linalg.norm(self.r_BN_P)
        c_hat_P = self.satellite.fsw.c_hat_P
        return np.arccos(np.dot(-r_BN_P_unit, c_hat_P))

    @property
    def solar_pointing_error(self) -> float:
        a = self.world.gravFactory.spiceObject.planetStateOutMsgs[
            self.world.sun_index
        ].read().PositionVector
        a_hat_N = a / np.linalg.norm(a)
        nHat_B = self.satellite.sat_args["nHat_B"]
        NB = np.transpose(self.BN)
        nHat_N = NB @ nHat_B
        return np.arccos(np.dot(nHat_N, a_hat_N))

class ScanningSatellite(sats.AccessSatellite):
    observation_spec = [
        obs.SatProperties(
            dict(prop="storage_level_fraction"),
            dict(prop="battery_charge_fraction"),
            dict(prop="wheel_speeds_fraction"),
            dict(prop="instrument_pointing_error", norm=np.pi),
            dict(prop="solar_pointing_error", norm=np.pi)
        ),
        obs.OpportunityProperties(
            dict(prop="opportunity_open", norm=5700),
            dict(prop="opportunity_close", norm=5700),
            type="ground_station",
            n_ahead_observe=1,
        ),
        obs.Eclipse(norm=5700),
        obs.Time(),
    ]
    action_spec = [
        act.Scan(duration=180.0),
        act.Charge(duration=120.0),
        act.Downlink(duration=60.0),
        act.Desat(duration=60.0),
    ]
    dyn_type = ScanningDownlinkDynModel
    fsw_type = fsw.ContinuousImagingFSWModel

Next, parameters are set. Since this scenario is focused on maintaining acceptable data and power levels, these are tuned to create a sufficiently interesting mission.

[3]:
sat = ScanningSatellite(
    "Scanner-1",
    sat_args=dict(
        # Data
        dataStorageCapacity=5000 * 8e6,  # bits
        storageInit=lambda: np.random.uniform(0.0, 0.8) * 5000 * 8e6,
        instrumentBaudRate=0.5 * 8e6,
        transmitterBaudRate=-50 * 8e6,
        # Power
        batteryStorageCapacity=200 * 3600,  # W*s
        storedCharge_Init=lambda: np.random.uniform(0.3, 1.0) * 200 * 3600,
        basePowerDraw=-10.0,  # W
        instrumentPowerDraw=-30.0,  # W
        transmitterPowerDraw=-25.0,  # W
        thrusterPowerDraw=-80.0,  # W
        panelArea=0.25,
        # Attitude
        imageAttErrorRequirement=0.1,
        imageRateErrorRequirement=0.1,
        disturbance_vector=lambda: np.random.normal(scale=0.0001, size=3),  # N*m
        maxWheelSpeed=6000.0,  # RPM
        wheelSpeeds=lambda: np.random.uniform(-3000, 3000, 3),
        desatAttitude="nadir",
    )
)

Finally, the environment arguments are set. Stepping through this environment is demonstrated at the bottom of the page.

[4]:
duration = 5 * 5700.0  # About 5 orbits
env_args = dict(
    satellite=sat,
    scenario=scene.UniformNadirScanning(value_per_second=1/duration),
    rewarder=data.ScanningTimeReward(),
    time_limit=duration,
    failure_penalty=-1.0,
    terminate_on_time_limit=True,
)

Set Up Custom Logging

The bsk_rl package supplies a utility to make logging information at the end of episodes easier. This is useful to see how an agent’s policy is changing over time, using a monitoring program such as TensorBoard. The callback is configured by writing a function that takes the environment as an input and returns a dictionary with values to be logged.

[5]:
def episode_data_callback(env):
    reward = env.rewarder.cum_reward
    reward = sum(reward.values()) / len(reward)
    orbits = env.simulator.sim_time / (95 * 60)

    data = dict(
        reward=reward,
        # Are satellites dying, and how and when?
        alive=float(env.satellite.is_alive()),
        rw_status_valid=float(env.satellite.dynamics.rw_speeds_valid()),
        battery_status_valid=float(env.satellite.dynamics.battery_valid()),
        orbits_complete=orbits,
    )
    if orbits > 0:
        data["reward_per_orbit"] = reward / orbits
    if not env.satellite.is_alive():
        data["orbits_complete_partial_only"] = orbits

    return data

Configure Ray and PPO

PPO (or some other algorithm) can be configured. Of particular importance are setting sample_timeout_s and metrics_episode_collection_timeout_s to appropriately high values for this environment. The episode_data_callback is included in the environment arguments, and the WrappedEpisodeDataCallbacks must be included in training to trigger logging.

[6]:
import bsk_rl.utils.rllib  # noqa To access "SatelliteTasking-RLlib"
from ray.rllib.algorithms.ppo import PPOConfig
from bsk_rl.utils.rllib.callbacks import WrappedEpisodeDataCallbacks

N_CPUS = 3

training_args = dict(
    lr=0.00003,
    gamma=0.999,
    train_batch_size=250,  # usually a larger number, like 2500
    num_sgd_iter=10,
    model=dict(fcnet_hiddens=[512, 512], vf_share_layers=False),
    lambda_=0.95,
    use_kl_loss=False,
    clip_param=0.1,
    grad_clip=0.5,
)

config = (
    PPOConfig()
    .training(**training_args)
    .env_runners(num_env_runners=N_CPUS-1, sample_timeout_s=1000.0)
    .environment(
        env="SatelliteTasking-RLlib",
        env_config=dict(**env_args, episode_data_callback=episode_data_callback),
    )
    .reporting(
        metrics_num_episodes_for_smoothing=1,
        metrics_episode_collection_timeout_s=180,
    )
    .checkpointing(export_native_model_files=True)
    .framework(framework="torch")
    .api_stack(
        enable_rl_module_and_learner=True,
        enable_env_runner_and_connector_v2=True,
    )
    .callbacks(WrappedEpisodeDataCallbacks)
)

Once the PPO configuration has been set, ray can be started and the agent can be trained.

Training on a reasonably modern machine, we can achieve 5M steps over 32 processors in 6 to 18 hours, depending on specific environment configurations.

Note that the custom logging metrics are reported under env_runners.

[7]:
import ray
from ray import tune

ray.init(
    ignore_reinit_error=True,
    num_cpus=N_CPUS,
    object_store_memory=2_000_000_000,  # 2 GB
)

# Run the training
tune.run(
    "PPO",
    config=config.to_dict(),
    stop={"training_iteration": 10},  # Adjust the number of iterations as needed
    checkpoint_freq=10,
    checkpoint_at_end=True
)

# Shutdown Ray
ray.shutdown()
2026-03-09 19:08:58,164 INFO worker.py:1783 -- Started a local Ray instance.
2026-03-09 19:09:01,995 INFO tune.py:616 -- [output] This uses the legacy output and progress reporter, as Jupyter notebooks are not supported by the new engine, yet. For more information, please see https://github.com/ray-project/ray/issues/36949
/opt/hostedtoolcache/Python/3.11.14/x64/lib/python3.11/site-packages/gymnasium/spaces/box.py:130: UserWarning: WARN: Box bound precision lowered by casting to float32
  gym.logger.warn(f"Box bound precision lowered by casting to {self.dtype}")
/opt/hostedtoolcache/Python/3.11.14/x64/lib/python3.11/site-packages/gymnasium/utils/passive_env_checker.py:164: UserWarning: WARN: The obs returned by the `reset()` method was expecting numpy array dtype to be float32, actual type: float64
  logger.warn(
/opt/hostedtoolcache/Python/3.11.14/x64/lib/python3.11/site-packages/gymnasium/utils/passive_env_checker.py:188: UserWarning: WARN: The obs returned by the `reset()` method is not within the observation space.
  logger.warn(f"{pre} is not within the observation space.")

Tune Status

Current time:2026-03-09 19:09:34
Running for: 00:00:32.82
Memory: 4.7/15.6 GiB

System Info

Using FIFO scheduling algorithm.
Logical resource usage: 3.0/3 CPUs, 0/0 GPUs

Trial Status

Trial name status loc iter total time (s) num_env_steps_sample d_lifetime num_episodes_lifetim e num_env_steps_traine d_lifetime
PPO_SatelliteTasking-RLlib_6f167_00000TERMINATED10.1.0.88:4470 10 16.45912500132500
(PPO pid=4470) Install gputil for GPU system monitoring.

Trial Progress

Trial name env_runners fault_tolerance learners num_agent_steps_sampled_lifetime num_env_steps_sampled_lifetime num_env_steps_trained_lifetime num_episodes_lifetimeperf timers
PPO_SatelliteTasking-RLlib_6f167_00000{'num_agent_steps_sampled': {'default_agent': 250}, 'num_module_steps_sampled_lifetime': {'default_policy': 13750}, 'num_env_steps_sampled_lifetime': 25000, 'num_episodes': 2, 'num_env_steps_sampled': 250, 'sample': np.float64(1.2419511940470127), 'num_agent_steps_sampled_lifetime': {'default_agent': 13750}, 'num_module_steps_sampled': {'default_policy': 250}, 'episode_len_mean': 94.0, 'episode_return_min': -0.8965964912280702, 'module_episode_returns_mean': {'default_policy': -0.8915438596491229}, 'agent_episode_returns_mean': {'default_agent': -0.8915438596491229}, 'episode_len_max': 103, 'episode_return_mean': -0.8915438596491229, 'episode_duration_sec_mean': 0.9611612034999553, 'episode_len_min': 85, 'time_between_sampling': np.float64(0.17344434441114168), 'episode_return_max': -0.8864912280701756, 'rw_status_valid': np.float64(1.0), 'orbits_complete_partial_only': np.float64(1.6105263157894738), 'reward_per_orbit': np.float64(0.06768504140786748), 'alive': np.float64(0.0), 'orbits_complete': np.float64(1.6105263157894738), 'reward': np.float64(0.10845614035087717), 'battery_status_valid': np.float64(0.0)}{'num_healthy_workers': 2, 'num_in_flight_async_reqs': 0, 'num_remote_worker_restarts': 0}{'default_policy': {'num_trainable_parameters': 139525.0, 'default_optimizer_learning_rate': 3e-05, 'vf_explained_var': 0.4198366403579712, 'vf_loss': 0.039562344551086426, 'policy_loss': -0.12642794847488403, 'curr_entropy_coeff': 0.0, 'num_module_steps_trained': 250, 'vf_loss_unclipped': 0.039562344551086426, 'entropy': 1.3558659553527832, 'mean_kl_loss': 0.0, 'total_loss': -0.08686559647321701, 'num_non_trainable_parameters': 0.0, 'gradients_default_optimizer_global_norm': 0.344684898853302}, '__all_modules__': {'num_env_steps_trained': 250, 'num_module_steps_trained': 250, 'num_non_trainable_parameters': 0.0, 'total_loss': -0.08686559647321701, 'num_trainable_parameters': 139525.0}}{'default_agent': 2500} 2500 2500 13{'cpu_util_percent': np.float64(46.8), 'ram_util_percent': np.float64(30.4)}{'env_runner_sampling_timer': 1.2870921620511548, 'learner_update_timer': 0.11638625431135838, 'synch_weights': 0.005897468845428144, 'synch_env_connectors': 0.006292492911540798}
(SingleAgentEnvRunner pid=4516) 2026-03-09 19:09:19,557 sats.satellite.Scanner-1       WARNING    <12420.00> Scanner-1: failed battery_valid check
(SingleAgentEnvRunner pid=4516) 2026-03-09 19:09:24,661 sats.satellite.Scanner-1       WARNING    <25440.00> Scanner-1: failed battery_valid check [repeated 4x across cluster] (Ray deduplicates logs by default. Set RAY_DEDUP_LOGS=0 to disable log deduplication, or see https://docs.ray.io/en/master/ray-observability/user-guides/configure-logging.html#log-deduplication for more options.)
(SingleAgentEnvRunner pid=4516) 2026-03-09 19:09:30,517 sats.satellite.Scanner-1       WARNING    <24300.00> Scanner-1: failed battery_valid check [repeated 2x across cluster]
2026-03-09 19:09:34,854 INFO tune.py:1009 -- Wrote the latest version of all result files and experiment state to '/home/runner/ray_results/PPO_2026-03-09_19-09-02' in 0.0223s.
(PPO pid=4470) Checkpoint successfully created at: Checkpoint(filesystem=local, path=/home/runner/ray_results/PPO_2026-03-09_19-09-02/PPO_SatelliteTasking-RLlib_6f167_00000_0_2026-03-09_19-09-02/checkpoint_000000)
2026-03-09 19:09:34,941 INFO tune.py:1041 -- Total run time: 32.95 seconds (32.80 seconds for the tuning loop).
(SingleAgentEnvRunner pid=4516) 2026-03-09 19:09:33,838 sats.satellite.Scanner-1       WARNING    <8280.00> Scanner-1: failed battery_valid check [repeated 3x across cluster]

Loading the Policy Network

The policy network can be found in the p0 subdirectory of the checkpoint output, if using the torch backend, and the model subdirectory of the checkpoint output. Use bsk_rl.utils.rllib.load_torch_mlp_policy to load torch policies.

Stepping Through the Environment

The environment is stepped through with random actions to give a sense of how it acts.

[8]:
from bsk_rl import SatelliteTasking

env = SatelliteTasking(**env_args, log_level="INFO")
env.reset()
terminated = False
while not terminated:
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)
2026-03-09 19:09:36,372 gym                            INFO       Resetting environment with seed=3319497136
2026-03-09 19:09:36,456 sats.satellite.Scanner-1       INFO       <0.00> Scanner-1: Finding opportunity windows from 0.00 to 28800.00 seconds
2026-03-09 19:09:36,514 gym                            INFO       <0.00> Environment reset
2026-03-09 19:09:36,515 gym                            INFO       <0.00> === STARTING STEP ===
2026-03-09 19:09:36,516 sats.satellite.Scanner-1       INFO       <0.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,516 sats.satellite.Scanner-1       INFO       <0.00> Scanner-1: setting timed terminal event at 60.0
2026-03-09 19:09:36,524 sats.satellite.Scanner-1       INFO       <60.00> Scanner-1: timed termination at 60.0 for action_downlink
2026-03-09 19:09:36,525 data.base                      INFO       <60.00> Total reward: {}
2026-03-09 19:09:36,525 comm.communication             INFO       <60.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,526 sats.satellite.Scanner-1       INFO       <60.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,528 gym                            INFO       <60.00> Step reward: 0.0
2026-03-09 19:09:36,528 gym                            INFO       <60.00> === STARTING STEP ===
2026-03-09 19:09:36,529 sats.satellite.Scanner-1       INFO       <60.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,530 sats.satellite.Scanner-1       INFO       <60.00> Scanner-1: setting timed terminal event at 120.0
2026-03-09 19:09:36,535 sats.satellite.Scanner-1       INFO       <120.00> Scanner-1: timed termination at 120.0 for action_downlink
2026-03-09 19:09:36,535 data.base                      INFO       <120.00> Total reward: {}
2026-03-09 19:09:36,536 comm.communication             INFO       <120.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,537 sats.satellite.Scanner-1       INFO       <120.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,538 gym                            INFO       <120.00> Step reward: 0.0
2026-03-09 19:09:36,539 gym                            INFO       <120.00> === STARTING STEP ===
2026-03-09 19:09:36,540 sats.satellite.Scanner-1       INFO       <120.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,540 sats.satellite.Scanner-1       INFO       <120.00> Scanner-1: setting timed terminal event at 300.0
2026-03-09 19:09:36,552 sats.satellite.Scanner-1       INFO       <300.00> Scanner-1: timed termination at 300.0 for action_nadir_scan
2026-03-09 19:09:36,553 data.base                      INFO       <300.00> Total reward: {'Scanner-1': 0.0009122807017543858}
2026-03-09 19:09:36,554 comm.communication             INFO       <300.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,554 sats.satellite.Scanner-1       INFO       <300.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,557 gym                            INFO       <300.00> Step reward: 0.0009122807017543858
2026-03-09 19:09:36,557 gym                            INFO       <300.00> === STARTING STEP ===
2026-03-09 19:09:36,558 sats.satellite.Scanner-1       INFO       <300.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,558 sats.satellite.Scanner-1       INFO       <300.00> Scanner-1: setting timed terminal event at 480.0
2026-03-09 19:09:36,570 sats.satellite.Scanner-1       INFO       <480.00> Scanner-1: timed termination at 480.0 for action_nadir_scan
2026-03-09 19:09:36,571 data.base                      INFO       <480.00> Total reward: {'Scanner-1': 0.00631578947368421}
2026-03-09 19:09:36,572 comm.communication             INFO       <480.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,572 sats.satellite.Scanner-1       INFO       <480.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,574 gym                            INFO       <480.00> Step reward: 0.00631578947368421
2026-03-09 19:09:36,575 gym                            INFO       <480.00> === STARTING STEP ===
2026-03-09 19:09:36,576 sats.satellite.Scanner-1       INFO       <480.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:36,576 sats.satellite.Scanner-1       INFO       <480.00> Scanner-1: setting timed terminal event at 600.0
2026-03-09 19:09:36,585 sats.satellite.Scanner-1       INFO       <600.00> Scanner-1: timed termination at 600.0 for action_charge
2026-03-09 19:09:36,585 data.base                      INFO       <600.00> Total reward: {}
2026-03-09 19:09:36,586 comm.communication             INFO       <600.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,587 sats.satellite.Scanner-1       INFO       <600.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,590 gym                            INFO       <600.00> Step reward: 0.0
2026-03-09 19:09:36,590 gym                            INFO       <600.00> === STARTING STEP ===
2026-03-09 19:09:36,591 sats.satellite.Scanner-1       INFO       <600.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:36,592 sats.satellite.Scanner-1       INFO       <600.00> Scanner-1: setting timed terminal event at 720.0
2026-03-09 19:09:36,601 sats.satellite.Scanner-1       INFO       <720.00> Scanner-1: timed termination at 720.0 for action_charge
2026-03-09 19:09:36,602 data.base                      INFO       <720.00> Total reward: {}
2026-03-09 19:09:36,602 comm.communication             INFO       <720.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,603 sats.satellite.Scanner-1       INFO       <720.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,605 gym                            INFO       <720.00> Step reward: 0.0
2026-03-09 19:09:36,606 gym                            INFO       <720.00> === STARTING STEP ===
2026-03-09 19:09:36,606 sats.satellite.Scanner-1       INFO       <720.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,607 sats.satellite.Scanner-1       INFO       <720.00> Scanner-1: setting timed terminal event at 900.0
2026-03-09 19:09:36,623 sats.satellite.Scanner-1       INFO       <900.00> Scanner-1: timed termination at 900.0 for action_nadir_scan
2026-03-09 19:09:36,624 data.base                      INFO       <900.00> Total reward: {'Scanner-1': 0.00287719298245614}
2026-03-09 19:09:36,624 comm.communication             INFO       <900.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,625 sats.satellite.Scanner-1       INFO       <900.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,627 gym                            INFO       <900.00> Step reward: 0.00287719298245614
2026-03-09 19:09:36,627 gym                            INFO       <900.00> === STARTING STEP ===
2026-03-09 19:09:36,628 sats.satellite.Scanner-1       INFO       <900.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:36,629 sats.satellite.Scanner-1       INFO       <900.00> Scanner-1: setting timed terminal event at 1020.0
2026-03-09 19:09:36,638 sats.satellite.Scanner-1       INFO       <1020.00> Scanner-1: timed termination at 1020.0 for action_charge
2026-03-09 19:09:36,639 data.base                      INFO       <1020.00> Total reward: {}
2026-03-09 19:09:36,639 comm.communication             INFO       <1020.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,640 sats.satellite.Scanner-1       INFO       <1020.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,643 gym                            INFO       <1020.00> Step reward: 0.0
2026-03-09 19:09:36,643 gym                            INFO       <1020.00> === STARTING STEP ===
2026-03-09 19:09:36,644 sats.satellite.Scanner-1       INFO       <1020.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,644 sats.satellite.Scanner-1       INFO       <1020.00> Scanner-1: setting timed terminal event at 1080.0
2026-03-09 19:09:36,650 sats.satellite.Scanner-1       INFO       <1080.00> Scanner-1: timed termination at 1080.0 for action_desat
2026-03-09 19:09:36,650 data.base                      INFO       <1080.00> Total reward: {}
2026-03-09 19:09:36,651 comm.communication             INFO       <1080.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,652 sats.satellite.Scanner-1       INFO       <1080.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,654 gym                            INFO       <1080.00> Step reward: 0.0
2026-03-09 19:09:36,654 gym                            INFO       <1080.00> === STARTING STEP ===
2026-03-09 19:09:36,655 sats.satellite.Scanner-1       INFO       <1080.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,656 sats.satellite.Scanner-1       INFO       <1080.00> Scanner-1: setting timed terminal event at 1260.0
2026-03-09 19:09:36,668 sats.satellite.Scanner-1       INFO       <1260.00> Scanner-1: timed termination at 1260.0 for action_nadir_scan
2026-03-09 19:09:36,669 data.base                      INFO       <1260.00> Total reward: {'Scanner-1': 0.002421052631578947}
2026-03-09 19:09:36,669 comm.communication             INFO       <1260.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,670 sats.satellite.Scanner-1       INFO       <1260.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,672 gym                            INFO       <1260.00> Step reward: 0.002421052631578947
2026-03-09 19:09:36,673 gym                            INFO       <1260.00> === STARTING STEP ===
2026-03-09 19:09:36,673 sats.satellite.Scanner-1       INFO       <1260.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,674 sats.satellite.Scanner-1       INFO       <1260.00> Scanner-1: setting timed terminal event at 1320.0
2026-03-09 19:09:36,679 sats.satellite.Scanner-1       INFO       <1320.00> Scanner-1: timed termination at 1320.0 for action_desat
2026-03-09 19:09:36,680 data.base                      INFO       <1320.00> Total reward: {}
2026-03-09 19:09:36,680 comm.communication             INFO       <1320.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,681 sats.satellite.Scanner-1       INFO       <1320.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,682 gym                            INFO       <1320.00> Step reward: 0.0
2026-03-09 19:09:36,683 gym                            INFO       <1320.00> === STARTING STEP ===
2026-03-09 19:09:36,683 sats.satellite.Scanner-1       INFO       <1320.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,684 sats.satellite.Scanner-1       INFO       <1320.00> Scanner-1: setting timed terminal event at 1380.0
2026-03-09 19:09:36,689 sats.satellite.Scanner-1       INFO       <1380.00> Scanner-1: timed termination at 1380.0 for action_desat
2026-03-09 19:09:36,690 data.base                      INFO       <1380.00> Total reward: {}
2026-03-09 19:09:36,690 comm.communication             INFO       <1380.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,691 sats.satellite.Scanner-1       INFO       <1380.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,693 gym                            INFO       <1380.00> Step reward: 0.0
2026-03-09 19:09:36,693 gym                            INFO       <1380.00> === STARTING STEP ===
2026-03-09 19:09:36,694 sats.satellite.Scanner-1       INFO       <1380.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:36,694 sats.satellite.Scanner-1       INFO       <1380.00> Scanner-1: setting timed terminal event at 1500.0
2026-03-09 19:09:36,703 sats.satellite.Scanner-1       INFO       <1500.00> Scanner-1: timed termination at 1500.0 for action_charge
2026-03-09 19:09:36,703 data.base                      INFO       <1500.00> Total reward: {}
2026-03-09 19:09:36,704 comm.communication             INFO       <1500.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,704 sats.satellite.Scanner-1       INFO       <1500.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,706 gym                            INFO       <1500.00> Step reward: 0.0
2026-03-09 19:09:36,707 gym                            INFO       <1500.00> === STARTING STEP ===
2026-03-09 19:09:36,707 sats.satellite.Scanner-1       INFO       <1500.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,707 sats.satellite.Scanner-1       INFO       <1500.00> Scanner-1: setting timed terminal event at 1560.0
2026-03-09 19:09:36,713 sats.satellite.Scanner-1       INFO       <1560.00> Scanner-1: timed termination at 1560.0 for action_downlink
2026-03-09 19:09:36,713 data.base                      INFO       <1560.00> Total reward: {}
2026-03-09 19:09:36,714 comm.communication             INFO       <1560.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,715 sats.satellite.Scanner-1       INFO       <1560.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,717 gym                            INFO       <1560.00> Step reward: 0.0
2026-03-09 19:09:36,717 gym                            INFO       <1560.00> === STARTING STEP ===
2026-03-09 19:09:36,718 sats.satellite.Scanner-1       INFO       <1560.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,718 sats.satellite.Scanner-1       INFO       <1560.00> Scanner-1: setting timed terminal event at 1620.0
2026-03-09 19:09:36,724 sats.satellite.Scanner-1       INFO       <1620.00> Scanner-1: timed termination at 1620.0 for action_desat
2026-03-09 19:09:36,724 data.base                      INFO       <1620.00> Total reward: {}
2026-03-09 19:09:36,725 comm.communication             INFO       <1620.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,725 sats.satellite.Scanner-1       INFO       <1620.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,727 gym                            INFO       <1620.00> Step reward: 0.0
2026-03-09 19:09:36,727 gym                            INFO       <1620.00> === STARTING STEP ===
2026-03-09 19:09:36,728 sats.satellite.Scanner-1       INFO       <1620.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:36,729 sats.satellite.Scanner-1       INFO       <1620.00> Scanner-1: setting timed terminal event at 1740.0
2026-03-09 19:09:36,737 sats.satellite.Scanner-1       INFO       <1740.00> Scanner-1: timed termination at 1740.0 for action_charge
2026-03-09 19:09:36,738 data.base                      INFO       <1740.00> Total reward: {}
2026-03-09 19:09:36,738 comm.communication             INFO       <1740.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,739 sats.satellite.Scanner-1       INFO       <1740.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,741 gym                            INFO       <1740.00> Step reward: 0.0
2026-03-09 19:09:36,741 gym                            INFO       <1740.00> === STARTING STEP ===
2026-03-09 19:09:36,742 sats.satellite.Scanner-1       INFO       <1740.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,742 sats.satellite.Scanner-1       INFO       <1740.00> Scanner-1: setting timed terminal event at 1920.0
2026-03-09 19:09:36,754 sats.satellite.Scanner-1       INFO       <1920.00> Scanner-1: timed termination at 1920.0 for action_nadir_scan
2026-03-09 19:09:36,755 data.base                      INFO       <1920.00> Total reward: {'Scanner-1': 0.004947368421052631}
2026-03-09 19:09:36,755 comm.communication             INFO       <1920.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,756 sats.satellite.Scanner-1       INFO       <1920.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,758 gym                            INFO       <1920.00> Step reward: 0.004947368421052631
2026-03-09 19:09:36,758 gym                            INFO       <1920.00> === STARTING STEP ===
2026-03-09 19:09:36,759 sats.satellite.Scanner-1       INFO       <1920.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,759 sats.satellite.Scanner-1       INFO       <1920.00> Scanner-1: setting timed terminal event at 1980.0
2026-03-09 19:09:36,764 sats.satellite.Scanner-1       INFO       <1980.00> Scanner-1: timed termination at 1980.0 for action_downlink
2026-03-09 19:09:36,765 data.base                      INFO       <1980.00> Total reward: {}
2026-03-09 19:09:36,765 comm.communication             INFO       <1980.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,766 sats.satellite.Scanner-1       INFO       <1980.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,768 gym                            INFO       <1980.00> Step reward: 0.0
2026-03-09 19:09:36,768 gym                            INFO       <1980.00> === STARTING STEP ===
2026-03-09 19:09:36,769 sats.satellite.Scanner-1       INFO       <1980.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,769 sats.satellite.Scanner-1       INFO       <1980.00> Scanner-1: setting timed terminal event at 2160.0
2026-03-09 19:09:36,782 sats.satellite.Scanner-1       INFO       <2160.00> Scanner-1: timed termination at 2160.0 for action_nadir_scan
2026-03-09 19:09:36,783 data.base                      INFO       <2160.00> Total reward: {'Scanner-1': 0.00287719298245614}
2026-03-09 19:09:36,783 comm.communication             INFO       <2160.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,784 sats.satellite.Scanner-1       INFO       <2160.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,786 gym                            INFO       <2160.00> Step reward: 0.00287719298245614
2026-03-09 19:09:36,787 gym                            INFO       <2160.00> === STARTING STEP ===
2026-03-09 19:09:36,787 sats.satellite.Scanner-1       INFO       <2160.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,788 sats.satellite.Scanner-1       INFO       <2160.00> Scanner-1: setting timed terminal event at 2220.0
2026-03-09 19:09:36,793 sats.satellite.Scanner-1       INFO       <2220.00> Scanner-1: timed termination at 2220.0 for action_desat
2026-03-09 19:09:36,794 data.base                      INFO       <2220.00> Total reward: {}
2026-03-09 19:09:36,794 comm.communication             INFO       <2220.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,794 sats.satellite.Scanner-1       INFO       <2220.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,796 gym                            INFO       <2220.00> Step reward: 0.0
2026-03-09 19:09:36,797 gym                            INFO       <2220.00> === STARTING STEP ===
2026-03-09 19:09:36,797 sats.satellite.Scanner-1       INFO       <2220.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,798 sats.satellite.Scanner-1       INFO       <2220.00> Scanner-1: setting timed terminal event at 2280.0
2026-03-09 19:09:36,803 sats.satellite.Scanner-1       INFO       <2280.00> Scanner-1: timed termination at 2280.0 for action_downlink
2026-03-09 19:09:36,803 data.base                      INFO       <2280.00> Total reward: {}
2026-03-09 19:09:36,804 comm.communication             INFO       <2280.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,805 sats.satellite.Scanner-1       INFO       <2280.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,807 gym                            INFO       <2280.00> Step reward: 0.0
2026-03-09 19:09:36,807 gym                            INFO       <2280.00> === STARTING STEP ===
2026-03-09 19:09:36,808 sats.satellite.Scanner-1       INFO       <2280.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,808 sats.satellite.Scanner-1       INFO       <2280.00> Scanner-1: setting timed terminal event at 2340.0
2026-03-09 19:09:36,813 sats.satellite.Scanner-1       INFO       <2340.00> Scanner-1: timed termination at 2340.0 for action_downlink
2026-03-09 19:09:36,814 data.base                      INFO       <2340.00> Total reward: {}
2026-03-09 19:09:36,815 comm.communication             INFO       <2340.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,815 sats.satellite.Scanner-1       INFO       <2340.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,817 gym                            INFO       <2340.00> Step reward: 0.0
2026-03-09 19:09:36,818 gym                            INFO       <2340.00> === STARTING STEP ===
2026-03-09 19:09:36,818 sats.satellite.Scanner-1       INFO       <2340.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,819 sats.satellite.Scanner-1       INFO       <2340.00> Scanner-1: setting timed terminal event at 2400.0
2026-03-09 19:09:36,824 sats.satellite.Scanner-1       INFO       <2400.00> Scanner-1: timed termination at 2400.0 for action_downlink
2026-03-09 19:09:36,825 data.base                      INFO       <2400.00> Total reward: {}
2026-03-09 19:09:36,825 comm.communication             INFO       <2400.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,826 sats.satellite.Scanner-1       INFO       <2400.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,827 gym                            INFO       <2400.00> Step reward: 0.0
2026-03-09 19:09:36,828 gym                            INFO       <2400.00> === STARTING STEP ===
2026-03-09 19:09:36,828 sats.satellite.Scanner-1       INFO       <2400.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:36,829 sats.satellite.Scanner-1       INFO       <2400.00> Scanner-1: setting timed terminal event at 2520.0
2026-03-09 19:09:36,839 sats.satellite.Scanner-1       INFO       <2520.00> Scanner-1: timed termination at 2520.0 for action_charge
2026-03-09 19:09:36,839 data.base                      INFO       <2520.00> Total reward: {}
2026-03-09 19:09:36,840 comm.communication             INFO       <2520.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,841 sats.satellite.Scanner-1       INFO       <2520.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,842 gym                            INFO       <2520.00> Step reward: 0.0
2026-03-09 19:09:36,843 gym                            INFO       <2520.00> === STARTING STEP ===
2026-03-09 19:09:36,844 sats.satellite.Scanner-1       INFO       <2520.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,844 sats.satellite.Scanner-1       INFO       <2520.00> Scanner-1: setting timed terminal event at 2580.0
2026-03-09 19:09:36,849 sats.satellite.Scanner-1       INFO       <2580.00> Scanner-1: timed termination at 2580.0 for action_desat
2026-03-09 19:09:36,850 data.base                      INFO       <2580.00> Total reward: {}
2026-03-09 19:09:36,851 comm.communication             INFO       <2580.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,851 sats.satellite.Scanner-1       INFO       <2580.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,854 gym                            INFO       <2580.00> Step reward: 0.0
2026-03-09 19:09:36,854 gym                            INFO       <2580.00> === STARTING STEP ===
2026-03-09 19:09:36,855 sats.satellite.Scanner-1       INFO       <2580.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,855 sats.satellite.Scanner-1       INFO       <2580.00> Scanner-1: setting timed terminal event at 2640.0
2026-03-09 19:09:36,861 sats.satellite.Scanner-1       INFO       <2640.00> Scanner-1: timed termination at 2640.0 for action_downlink
2026-03-09 19:09:36,861 data.base                      INFO       <2640.00> Total reward: {}
2026-03-09 19:09:36,862 comm.communication             INFO       <2640.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,863 sats.satellite.Scanner-1       INFO       <2640.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,865 gym                            INFO       <2640.00> Step reward: 0.0
2026-03-09 19:09:36,866 gym                            INFO       <2640.00> === STARTING STEP ===
2026-03-09 19:09:36,866 sats.satellite.Scanner-1       INFO       <2640.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,867 sats.satellite.Scanner-1       INFO       <2640.00> Scanner-1: setting timed terminal event at 2820.0
2026-03-09 19:09:36,880 sats.satellite.Scanner-1       INFO       <2820.00> Scanner-1: timed termination at 2820.0 for action_nadir_scan
2026-03-09 19:09:36,881 data.base                      INFO       <2820.00> Total reward: {'Scanner-1': 0.0048070175438596485}
2026-03-09 19:09:36,881 comm.communication             INFO       <2820.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,882 sats.satellite.Scanner-1       INFO       <2820.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,884 gym                            INFO       <2820.00> Step reward: 0.0048070175438596485
2026-03-09 19:09:36,885 gym                            INFO       <2820.00> === STARTING STEP ===
2026-03-09 19:09:36,885 sats.satellite.Scanner-1       INFO       <2820.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,886 sats.satellite.Scanner-1       INFO       <2820.00> Scanner-1: setting timed terminal event at 2880.0
2026-03-09 19:09:36,891 sats.satellite.Scanner-1       INFO       <2880.00> Scanner-1: timed termination at 2880.0 for action_desat
2026-03-09 19:09:36,892 data.base                      INFO       <2880.00> Total reward: {}
2026-03-09 19:09:36,892 comm.communication             INFO       <2880.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,893 sats.satellite.Scanner-1       INFO       <2880.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,895 gym                            INFO       <2880.00> Step reward: 0.0
2026-03-09 19:09:36,896 gym                            INFO       <2880.00> === STARTING STEP ===
2026-03-09 19:09:36,896 sats.satellite.Scanner-1       INFO       <2880.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,897 sats.satellite.Scanner-1       INFO       <2880.00> Scanner-1: setting timed terminal event at 3060.0
2026-03-09 19:09:36,909 sats.satellite.Scanner-1       INFO       <3060.00> Scanner-1: timed termination at 3060.0 for action_nadir_scan
2026-03-09 19:09:36,910 data.base                      INFO       <3060.00> Total reward: {'Scanner-1': 0.004771929824561403}
2026-03-09 19:09:36,910 comm.communication             INFO       <3060.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,911 sats.satellite.Scanner-1       INFO       <3060.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,913 gym                            INFO       <3060.00> Step reward: 0.004771929824561403
2026-03-09 19:09:36,913 gym                            INFO       <3060.00> === STARTING STEP ===
2026-03-09 19:09:36,914 sats.satellite.Scanner-1       INFO       <3060.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,914 sats.satellite.Scanner-1       INFO       <3060.00> Scanner-1: setting timed terminal event at 3120.0
2026-03-09 19:09:36,920 sats.satellite.Scanner-1       INFO       <3120.00> Scanner-1: timed termination at 3120.0 for action_downlink
2026-03-09 19:09:36,920 data.base                      INFO       <3120.00> Total reward: {}
2026-03-09 19:09:36,921 comm.communication             INFO       <3120.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,921 sats.satellite.Scanner-1       INFO       <3120.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,923 gym                            INFO       <3120.00> Step reward: 0.0
2026-03-09 19:09:36,924 gym                            INFO       <3120.00> === STARTING STEP ===
2026-03-09 19:09:36,924 sats.satellite.Scanner-1       INFO       <3120.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,925 sats.satellite.Scanner-1       INFO       <3120.00> Scanner-1: setting timed terminal event at 3180.0
2026-03-09 19:09:36,931 sats.satellite.Scanner-1       INFO       <3180.00> Scanner-1: timed termination at 3180.0 for action_desat
2026-03-09 19:09:36,931 data.base                      INFO       <3180.00> Total reward: {}
2026-03-09 19:09:36,932 comm.communication             INFO       <3180.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,932 sats.satellite.Scanner-1       INFO       <3180.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,934 gym                            INFO       <3180.00> Step reward: 0.0
2026-03-09 19:09:36,935 gym                            INFO       <3180.00> === STARTING STEP ===
2026-03-09 19:09:36,935 sats.satellite.Scanner-1       INFO       <3180.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,936 sats.satellite.Scanner-1       INFO       <3180.00> Scanner-1: setting timed terminal event at 3240.0
2026-03-09 19:09:36,942 sats.satellite.Scanner-1       INFO       <3240.00> Scanner-1: timed termination at 3240.0 for action_desat
2026-03-09 19:09:36,942 data.base                      INFO       <3240.00> Total reward: {}
2026-03-09 19:09:36,943 comm.communication             INFO       <3240.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,943 sats.satellite.Scanner-1       INFO       <3240.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,945 gym                            INFO       <3240.00> Step reward: 0.0
2026-03-09 19:09:36,946 gym                            INFO       <3240.00> === STARTING STEP ===
2026-03-09 19:09:36,947 sats.satellite.Scanner-1       INFO       <3240.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,947 sats.satellite.Scanner-1       INFO       <3240.00> Scanner-1: setting timed terminal event at 3420.0
2026-03-09 19:09:36,959 sats.satellite.Scanner-1       INFO       <3420.00> Scanner-1: timed termination at 3420.0 for action_nadir_scan
2026-03-09 19:09:36,960 data.base                      INFO       <3420.00> Total reward: {'Scanner-1': 0.004842105263157894}
2026-03-09 19:09:36,960 comm.communication             INFO       <3420.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,961 sats.satellite.Scanner-1       INFO       <3420.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,963 gym                            INFO       <3420.00> Step reward: 0.004842105263157894
2026-03-09 19:09:36,963 gym                            INFO       <3420.00> === STARTING STEP ===
2026-03-09 19:09:36,964 sats.satellite.Scanner-1       INFO       <3420.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:36,964 sats.satellite.Scanner-1       INFO       <3420.00> Scanner-1: setting timed terminal event at 3480.0
2026-03-09 19:09:36,970 sats.satellite.Scanner-1       INFO       <3480.00> Scanner-1: timed termination at 3480.0 for action_desat
2026-03-09 19:09:36,971 data.base                      INFO       <3480.00> Total reward: {}
2026-03-09 19:09:36,971 comm.communication             INFO       <3480.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,972 sats.satellite.Scanner-1       INFO       <3480.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,974 gym                            INFO       <3480.00> Step reward: 0.0
2026-03-09 19:09:36,974 gym                            INFO       <3480.00> === STARTING STEP ===
2026-03-09 19:09:36,975 sats.satellite.Scanner-1       INFO       <3480.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:36,975 sats.satellite.Scanner-1       INFO       <3480.00> Scanner-1: setting timed terminal event at 3660.0
2026-03-09 19:09:36,988 sats.satellite.Scanner-1       INFO       <3660.00> Scanner-1: timed termination at 3660.0 for action_nadir_scan
2026-03-09 19:09:36,988 data.base                      INFO       <3660.00> Total reward: {'Scanner-1': 0.0048070175438596485}
2026-03-09 19:09:36,989 comm.communication             INFO       <3660.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:36,990 sats.satellite.Scanner-1       INFO       <3660.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:36,992 gym                            INFO       <3660.00> Step reward: 0.0048070175438596485
2026-03-09 19:09:36,992 gym                            INFO       <3660.00> === STARTING STEP ===
2026-03-09 19:09:36,993 sats.satellite.Scanner-1       INFO       <3660.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:36,993 sats.satellite.Scanner-1       INFO       <3660.00> Scanner-1: setting timed terminal event at 3720.0
2026-03-09 19:09:36,999 sats.satellite.Scanner-1       INFO       <3720.00> Scanner-1: timed termination at 3720.0 for action_downlink
2026-03-09 19:09:37,000 data.base                      INFO       <3720.00> Total reward: {}
2026-03-09 19:09:37,000 comm.communication             INFO       <3720.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,001 sats.satellite.Scanner-1       INFO       <3720.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,003 gym                            INFO       <3720.00> Step reward: 0.0
2026-03-09 19:09:37,004 gym                            INFO       <3720.00> === STARTING STEP ===
2026-03-09 19:09:37,004 sats.satellite.Scanner-1       INFO       <3720.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,005 sats.satellite.Scanner-1       INFO       <3720.00> Scanner-1: setting timed terminal event at 3900.0
2026-03-09 19:09:37,017 sats.satellite.Scanner-1       INFO       <3900.00> Scanner-1: timed termination at 3900.0 for action_nadir_scan
2026-03-09 19:09:37,018 data.base                      INFO       <3900.00> Total reward: {'Scanner-1': 0.0048070175438596485}
2026-03-09 19:09:37,018 comm.communication             INFO       <3900.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,019 sats.satellite.Scanner-1       INFO       <3900.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,021 gym                            INFO       <3900.00> Step reward: 0.0048070175438596485
2026-03-09 19:09:37,022 gym                            INFO       <3900.00> === STARTING STEP ===
2026-03-09 19:09:37,022 sats.satellite.Scanner-1       INFO       <3900.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,023 sats.satellite.Scanner-1       INFO       <3900.00> Scanner-1: setting timed terminal event at 4020.0
2026-03-09 19:09:37,031 sats.satellite.Scanner-1       INFO       <4020.00> Scanner-1: timed termination at 4020.0 for action_charge
2026-03-09 19:09:37,032 data.base                      INFO       <4020.00> Total reward: {}
2026-03-09 19:09:37,033 comm.communication             INFO       <4020.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,033 sats.satellite.Scanner-1       INFO       <4020.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,035 gym                            INFO       <4020.00> Step reward: 0.0
2026-03-09 19:09:37,036 gym                            INFO       <4020.00> === STARTING STEP ===
2026-03-09 19:09:37,036 sats.satellite.Scanner-1       INFO       <4020.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,037 sats.satellite.Scanner-1       INFO       <4020.00> Scanner-1: setting timed terminal event at 4200.0
2026-03-09 19:09:37,049 sats.satellite.Scanner-1       INFO       <4200.00> Scanner-1: timed termination at 4200.0 for action_nadir_scan
2026-03-09 19:09:37,049 data.base                      INFO       <4200.00> Total reward: {'Scanner-1': 0.004947368421052631}
2026-03-09 19:09:37,050 comm.communication             INFO       <4200.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,050 sats.satellite.Scanner-1       INFO       <4200.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,053 gym                            INFO       <4200.00> Step reward: 0.004947368421052631
2026-03-09 19:09:37,053 gym                            INFO       <4200.00> === STARTING STEP ===
2026-03-09 19:09:37,054 sats.satellite.Scanner-1       INFO       <4200.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,054 sats.satellite.Scanner-1       INFO       <4200.00> Scanner-1: setting timed terminal event at 4380.0
2026-03-09 19:09:37,066 sats.satellite.Scanner-1       INFO       <4380.00> Scanner-1: timed termination at 4380.0 for action_nadir_scan
2026-03-09 19:09:37,067 data.base                      INFO       <4380.00> Total reward: {'Scanner-1': 0.00631578947368421}
2026-03-09 19:09:37,068 comm.communication             INFO       <4380.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,068 sats.satellite.Scanner-1       INFO       <4380.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,071 gym                            INFO       <4380.00> Step reward: 0.00631578947368421
2026-03-09 19:09:37,071 gym                            INFO       <4380.00> === STARTING STEP ===
2026-03-09 19:09:37,072 sats.satellite.Scanner-1       INFO       <4380.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,072 sats.satellite.Scanner-1       INFO       <4380.00> Scanner-1: setting timed terminal event at 4500.0
2026-03-09 19:09:37,081 sats.satellite.Scanner-1       INFO       <4500.00> Scanner-1: timed termination at 4500.0 for action_charge
2026-03-09 19:09:37,081 data.base                      INFO       <4500.00> Total reward: {}
2026-03-09 19:09:37,082 comm.communication             INFO       <4500.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,082 sats.satellite.Scanner-1       INFO       <4500.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,085 gym                            INFO       <4500.00> Step reward: 0.0
2026-03-09 19:09:37,085 gym                            INFO       <4500.00> === STARTING STEP ===
2026-03-09 19:09:37,086 sats.satellite.Scanner-1       INFO       <4500.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,086 sats.satellite.Scanner-1       INFO       <4500.00> Scanner-1: setting timed terminal event at 4560.0
2026-03-09 19:09:37,092 sats.satellite.Scanner-1       INFO       <4560.00> Scanner-1: timed termination at 4560.0 for action_desat
2026-03-09 19:09:37,092 data.base                      INFO       <4560.00> Total reward: {}
2026-03-09 19:09:37,093 comm.communication             INFO       <4560.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,093 sats.satellite.Scanner-1       INFO       <4560.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,095 gym                            INFO       <4560.00> Step reward: 0.0
2026-03-09 19:09:37,096 gym                            INFO       <4560.00> === STARTING STEP ===
2026-03-09 19:09:37,097 sats.satellite.Scanner-1       INFO       <4560.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,097 sats.satellite.Scanner-1       INFO       <4560.00> Scanner-1: setting timed terminal event at 4620.0
2026-03-09 19:09:37,103 sats.satellite.Scanner-1       INFO       <4620.00> Scanner-1: timed termination at 4620.0 for action_desat
2026-03-09 19:09:37,103 data.base                      INFO       <4620.00> Total reward: {}
2026-03-09 19:09:37,104 comm.communication             INFO       <4620.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,104 sats.satellite.Scanner-1       INFO       <4620.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,107 gym                            INFO       <4620.00> Step reward: 0.0
2026-03-09 19:09:37,107 gym                            INFO       <4620.00> === STARTING STEP ===
2026-03-09 19:09:37,108 sats.satellite.Scanner-1       INFO       <4620.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,108 sats.satellite.Scanner-1       INFO       <4620.00> Scanner-1: setting timed terminal event at 4680.0
2026-03-09 19:09:37,114 sats.satellite.Scanner-1       INFO       <4680.00> Scanner-1: timed termination at 4680.0 for action_desat
2026-03-09 19:09:37,114 data.base                      INFO       <4680.00> Total reward: {}
2026-03-09 19:09:37,115 comm.communication             INFO       <4680.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,115 sats.satellite.Scanner-1       INFO       <4680.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,117 gym                            INFO       <4680.00> Step reward: 0.0
2026-03-09 19:09:37,117 gym                            INFO       <4680.00> === STARTING STEP ===
2026-03-09 19:09:37,118 sats.satellite.Scanner-1       INFO       <4680.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,118 sats.satellite.Scanner-1       INFO       <4680.00> Scanner-1: setting timed terminal event at 4860.0
2026-03-09 19:09:37,130 sats.satellite.Scanner-1       INFO       <4860.00> Scanner-1: timed termination at 4860.0 for action_nadir_scan
2026-03-09 19:09:37,131 data.base                      INFO       <4860.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-03-09 19:09:37,131 comm.communication             INFO       <4860.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,132 sats.satellite.Scanner-1       INFO       <4860.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,134 gym                            INFO       <4860.00> Step reward: 0.004912280701754385
2026-03-09 19:09:37,134 gym                            INFO       <4860.00> === STARTING STEP ===
2026-03-09 19:09:37,135 sats.satellite.Scanner-1       INFO       <4860.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,135 sats.satellite.Scanner-1       INFO       <4860.00> Scanner-1: setting timed terminal event at 5040.0
2026-03-09 19:09:37,147 sats.satellite.Scanner-1       INFO       <5040.00> Scanner-1: timed termination at 5040.0 for action_nadir_scan
2026-03-09 19:09:37,148 data.base                      INFO       <5040.00> Total reward: {'Scanner-1': 0.00631578947368421}
2026-03-09 19:09:37,148 comm.communication             INFO       <5040.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,149 sats.satellite.Scanner-1       INFO       <5040.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,151 gym                            INFO       <5040.00> Step reward: 0.00631578947368421
2026-03-09 19:09:37,151 gym                            INFO       <5040.00> === STARTING STEP ===
2026-03-09 19:09:37,152 sats.satellite.Scanner-1       INFO       <5040.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,152 sats.satellite.Scanner-1       INFO       <5040.00> Scanner-1: setting timed terminal event at 5100.0
2026-03-09 19:09:37,158 sats.satellite.Scanner-1       INFO       <5100.00> Scanner-1: timed termination at 5100.0 for action_desat
2026-03-09 19:09:37,159 data.base                      INFO       <5100.00> Total reward: {}
2026-03-09 19:09:37,160 comm.communication             INFO       <5100.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,160 sats.satellite.Scanner-1       INFO       <5100.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,163 gym                            INFO       <5100.00> Step reward: 0.0
2026-03-09 19:09:37,163 gym                            INFO       <5100.00> === STARTING STEP ===
2026-03-09 19:09:37,164 sats.satellite.Scanner-1       INFO       <5100.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,164 sats.satellite.Scanner-1       INFO       <5100.00> Scanner-1: setting timed terminal event at 5280.0
2026-03-09 19:09:37,176 sats.satellite.Scanner-1       INFO       <5280.00> Scanner-1: timed termination at 5280.0 for action_nadir_scan
2026-03-09 19:09:37,177 data.base                      INFO       <5280.00> Total reward: {'Scanner-1': 0.00487719298245614}
2026-03-09 19:09:37,177 comm.communication             INFO       <5280.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,178 sats.satellite.Scanner-1       INFO       <5280.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,179 gym                            INFO       <5280.00> Step reward: 0.00487719298245614
2026-03-09 19:09:37,180 gym                            INFO       <5280.00> === STARTING STEP ===
2026-03-09 19:09:37,181 sats.satellite.Scanner-1       INFO       <5280.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,181 sats.satellite.Scanner-1       INFO       <5280.00> Scanner-1: setting timed terminal event at 5400.0
2026-03-09 19:09:37,190 sats.satellite.Scanner-1       INFO       <5400.00> Scanner-1: timed termination at 5400.0 for action_charge
2026-03-09 19:09:37,191 data.base                      INFO       <5400.00> Total reward: {}
2026-03-09 19:09:37,191 comm.communication             INFO       <5400.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,192 sats.satellite.Scanner-1       INFO       <5400.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,194 gym                            INFO       <5400.00> Step reward: 0.0
2026-03-09 19:09:37,194 gym                            INFO       <5400.00> === STARTING STEP ===
2026-03-09 19:09:37,195 sats.satellite.Scanner-1       INFO       <5400.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,195 sats.satellite.Scanner-1       INFO       <5400.00> Scanner-1: setting timed terminal event at 5460.0
2026-03-09 19:09:37,201 sats.satellite.Scanner-1       INFO       <5460.00> Scanner-1: timed termination at 5460.0 for action_downlink
2026-03-09 19:09:37,202 data.base                      INFO       <5460.00> Total reward: {}
2026-03-09 19:09:37,203 comm.communication             INFO       <5460.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,203 sats.satellite.Scanner-1       INFO       <5460.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,205 gym                            INFO       <5460.00> Step reward: 0.0
2026-03-09 19:09:37,206 gym                            INFO       <5460.00> === STARTING STEP ===
2026-03-09 19:09:37,206 sats.satellite.Scanner-1       INFO       <5460.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,207 sats.satellite.Scanner-1       INFO       <5460.00> Scanner-1: setting timed terminal event at 5520.0
2026-03-09 19:09:37,212 sats.satellite.Scanner-1       INFO       <5520.00> Scanner-1: timed termination at 5520.0 for action_desat
2026-03-09 19:09:37,213 data.base                      INFO       <5520.00> Total reward: {}
2026-03-09 19:09:37,213 comm.communication             INFO       <5520.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,214 sats.satellite.Scanner-1       INFO       <5520.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,216 gym                            INFO       <5520.00> Step reward: 0.0
2026-03-09 19:09:37,217 gym                            INFO       <5520.00> === STARTING STEP ===
2026-03-09 19:09:37,218 sats.satellite.Scanner-1       INFO       <5520.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,218 sats.satellite.Scanner-1       INFO       <5520.00> Scanner-1: setting timed terminal event at 5700.0
2026-03-09 19:09:37,231 sats.satellite.Scanner-1       INFO       <5700.00> Scanner-1: timed termination at 5700.0 for action_nadir_scan
2026-03-09 19:09:37,231 data.base                      INFO       <5700.00> Total reward: {'Scanner-1': 0.004947368421052631}
2026-03-09 19:09:37,232 comm.communication             INFO       <5700.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,232 sats.satellite.Scanner-1       INFO       <5700.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,234 gym                            INFO       <5700.00> Step reward: 0.004947368421052631
2026-03-09 19:09:37,235 gym                            INFO       <5700.00> === STARTING STEP ===
2026-03-09 19:09:37,235 sats.satellite.Scanner-1       INFO       <5700.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,236 sats.satellite.Scanner-1       INFO       <5700.00> Scanner-1: setting timed terminal event at 5760.0
2026-03-09 19:09:37,242 sats.satellite.Scanner-1       INFO       <5760.00> Scanner-1: timed termination at 5760.0 for action_desat
2026-03-09 19:09:37,243 data.base                      INFO       <5760.00> Total reward: {}
2026-03-09 19:09:37,244 comm.communication             INFO       <5760.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,244 sats.satellite.Scanner-1       INFO       <5760.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,246 gym                            INFO       <5760.00> Step reward: 0.0
2026-03-09 19:09:37,247 gym                            INFO       <5760.00> === STARTING STEP ===
2026-03-09 19:09:37,248 sats.satellite.Scanner-1       INFO       <5760.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,248 sats.satellite.Scanner-1       INFO       <5760.00> Scanner-1: setting timed terminal event at 5820.0
2026-03-09 19:09:37,253 sats.satellite.Scanner-1       INFO       <5820.00> Scanner-1: timed termination at 5820.0 for action_downlink
2026-03-09 19:09:37,254 data.base                      INFO       <5820.00> Total reward: {}
2026-03-09 19:09:37,254 comm.communication             INFO       <5820.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,254 sats.satellite.Scanner-1       INFO       <5820.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,257 gym                            INFO       <5820.00> Step reward: 0.0
2026-03-09 19:09:37,257 gym                            INFO       <5820.00> === STARTING STEP ===
2026-03-09 19:09:37,258 sats.satellite.Scanner-1       INFO       <5820.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,258 sats.satellite.Scanner-1       INFO       <5820.00> Scanner-1: setting timed terminal event at 5940.0
2026-03-09 19:09:37,267 sats.satellite.Scanner-1       INFO       <5940.00> Scanner-1: timed termination at 5940.0 for action_charge
2026-03-09 19:09:37,268 data.base                      INFO       <5940.00> Total reward: {}
2026-03-09 19:09:37,268 comm.communication             INFO       <5940.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,269 sats.satellite.Scanner-1       INFO       <5940.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,271 gym                            INFO       <5940.00> Step reward: 0.0
2026-03-09 19:09:37,272 gym                            INFO       <5940.00> === STARTING STEP ===
2026-03-09 19:09:37,272 sats.satellite.Scanner-1       INFO       <5940.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,273 sats.satellite.Scanner-1       INFO       <5940.00> Scanner-1: setting timed terminal event at 6000.0
2026-03-09 19:09:37,278 sats.satellite.Scanner-1       INFO       <6000.00> Scanner-1: timed termination at 6000.0 for action_desat
2026-03-09 19:09:37,279 data.base                      INFO       <6000.00> Total reward: {}
2026-03-09 19:09:37,279 comm.communication             INFO       <6000.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,280 sats.satellite.Scanner-1       INFO       <6000.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,282 gym                            INFO       <6000.00> Step reward: 0.0
2026-03-09 19:09:37,283 gym                            INFO       <6000.00> === STARTING STEP ===
2026-03-09 19:09:37,284 sats.satellite.Scanner-1       INFO       <6000.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,284 sats.satellite.Scanner-1       INFO       <6000.00> Scanner-1: setting timed terminal event at 6180.0
2026-03-09 19:09:37,297 sats.satellite.Scanner-1       INFO       <6180.00> Scanner-1: timed termination at 6180.0 for action_nadir_scan
2026-03-09 19:09:37,298 data.base                      INFO       <6180.00> Total reward: {'Scanner-1': 0.004666666666666666}
2026-03-09 19:09:37,298 comm.communication             INFO       <6180.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,299 sats.satellite.Scanner-1       INFO       <6180.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,301 gym                            INFO       <6180.00> Step reward: 0.004666666666666666
2026-03-09 19:09:37,301 gym                            INFO       <6180.00> === STARTING STEP ===
2026-03-09 19:09:37,302 sats.satellite.Scanner-1       INFO       <6180.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,302 sats.satellite.Scanner-1       INFO       <6180.00> Scanner-1: setting timed terminal event at 6300.0
2026-03-09 19:09:37,311 sats.satellite.Scanner-1       INFO       <6300.00> Scanner-1: timed termination at 6300.0 for action_charge
2026-03-09 19:09:37,311 data.base                      INFO       <6300.00> Total reward: {}
2026-03-09 19:09:37,312 comm.communication             INFO       <6300.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,312 sats.satellite.Scanner-1       INFO       <6300.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,314 gym                            INFO       <6300.00> Step reward: 0.0
2026-03-09 19:09:37,315 gym                            INFO       <6300.00> === STARTING STEP ===
2026-03-09 19:09:37,315 sats.satellite.Scanner-1       INFO       <6300.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,316 sats.satellite.Scanner-1       INFO       <6300.00> Scanner-1: setting timed terminal event at 6420.0
2026-03-09 19:09:37,324 sats.satellite.Scanner-1       INFO       <6420.00> Scanner-1: timed termination at 6420.0 for action_charge
2026-03-09 19:09:37,324 data.base                      INFO       <6420.00> Total reward: {}
2026-03-09 19:09:37,325 comm.communication             INFO       <6420.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,326 sats.satellite.Scanner-1       INFO       <6420.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,328 gym                            INFO       <6420.00> Step reward: 0.0
2026-03-09 19:09:37,328 gym                            INFO       <6420.00> === STARTING STEP ===
2026-03-09 19:09:37,329 sats.satellite.Scanner-1       INFO       <6420.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,329 sats.satellite.Scanner-1       INFO       <6420.00> Scanner-1: setting timed terminal event at 6480.0
2026-03-09 19:09:37,335 sats.satellite.Scanner-1       INFO       <6480.00> Scanner-1: timed termination at 6480.0 for action_downlink
2026-03-09 19:09:37,335 data.base                      INFO       <6480.00> Total reward: {}
2026-03-09 19:09:37,336 comm.communication             INFO       <6480.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,336 sats.satellite.Scanner-1       INFO       <6480.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,338 gym                            INFO       <6480.00> Step reward: 0.0
2026-03-09 19:09:37,339 gym                            INFO       <6480.00> === STARTING STEP ===
2026-03-09 19:09:37,339 sats.satellite.Scanner-1       INFO       <6480.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,340 sats.satellite.Scanner-1       INFO       <6480.00> Scanner-1: setting timed terminal event at 6540.0
2026-03-09 19:09:37,345 sats.satellite.Scanner-1       INFO       <6540.00> Scanner-1: timed termination at 6540.0 for action_downlink
2026-03-09 19:09:37,345 data.base                      INFO       <6540.00> Total reward: {}
2026-03-09 19:09:37,346 comm.communication             INFO       <6540.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,346 sats.satellite.Scanner-1       INFO       <6540.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,348 gym                            INFO       <6540.00> Step reward: 0.0
2026-03-09 19:09:37,349 gym                            INFO       <6540.00> === STARTING STEP ===
2026-03-09 19:09:37,349 sats.satellite.Scanner-1       INFO       <6540.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,350 sats.satellite.Scanner-1       INFO       <6540.00> Scanner-1: setting timed terminal event at 6720.0
2026-03-09 19:09:37,362 sats.satellite.Scanner-1       INFO       <6720.00> Scanner-1: timed termination at 6720.0 for action_nadir_scan
2026-03-09 19:09:37,362 data.base                      INFO       <6720.00> Total reward: {'Scanner-1': 0.004947368421052631}
2026-03-09 19:09:37,363 comm.communication             INFO       <6720.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,363 sats.satellite.Scanner-1       INFO       <6720.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,365 gym                            INFO       <6720.00> Step reward: 0.004947368421052631
2026-03-09 19:09:37,366 gym                            INFO       <6720.00> === STARTING STEP ===
2026-03-09 19:09:37,366 sats.satellite.Scanner-1       INFO       <6720.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,367 sats.satellite.Scanner-1       INFO       <6720.00> Scanner-1: setting timed terminal event at 6780.0
2026-03-09 19:09:37,372 sats.satellite.Scanner-1       INFO       <6780.00> Scanner-1: timed termination at 6780.0 for action_desat
2026-03-09 19:09:37,373 data.base                      INFO       <6780.00> Total reward: {}
2026-03-09 19:09:37,374 comm.communication             INFO       <6780.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,374 sats.satellite.Scanner-1       INFO       <6780.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,376 gym                            INFO       <6780.00> Step reward: 0.0
2026-03-09 19:09:37,377 gym                            INFO       <6780.00> === STARTING STEP ===
2026-03-09 19:09:37,377 sats.satellite.Scanner-1       INFO       <6780.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,377 sats.satellite.Scanner-1       INFO       <6780.00> Scanner-1: setting timed terminal event at 6840.0
2026-03-09 19:09:37,383 sats.satellite.Scanner-1       INFO       <6840.00> Scanner-1: timed termination at 6840.0 for action_downlink
2026-03-09 19:09:37,383 data.base                      INFO       <6840.00> Total reward: {}
2026-03-09 19:09:37,384 comm.communication             INFO       <6840.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,384 sats.satellite.Scanner-1       INFO       <6840.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,386 gym                            INFO       <6840.00> Step reward: 0.0
2026-03-09 19:09:37,387 gym                            INFO       <6840.00> === STARTING STEP ===
2026-03-09 19:09:37,387 sats.satellite.Scanner-1       INFO       <6840.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,387 sats.satellite.Scanner-1       INFO       <6840.00> Scanner-1: setting timed terminal event at 6960.0
2026-03-09 19:09:37,397 sats.satellite.Scanner-1       INFO       <6960.00> Scanner-1: timed termination at 6960.0 for action_charge
2026-03-09 19:09:37,397 data.base                      INFO       <6960.00> Total reward: {}
2026-03-09 19:09:37,398 comm.communication             INFO       <6960.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,398 sats.satellite.Scanner-1       INFO       <6960.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,400 gym                            INFO       <6960.00> Step reward: 0.0
2026-03-09 19:09:37,401 gym                            INFO       <6960.00> === STARTING STEP ===
2026-03-09 19:09:37,401 sats.satellite.Scanner-1       INFO       <6960.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,402 sats.satellite.Scanner-1       INFO       <6960.00> Scanner-1: setting timed terminal event at 7080.0
2026-03-09 19:09:37,411 sats.satellite.Scanner-1       INFO       <7080.00> Scanner-1: timed termination at 7080.0 for action_charge
2026-03-09 19:09:37,411 data.base                      INFO       <7080.00> Total reward: {}
2026-03-09 19:09:37,412 comm.communication             INFO       <7080.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,412 sats.satellite.Scanner-1       INFO       <7080.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,414 gym                            INFO       <7080.00> Step reward: 0.0
2026-03-09 19:09:37,415 gym                            INFO       <7080.00> === STARTING STEP ===
2026-03-09 19:09:37,415 sats.satellite.Scanner-1       INFO       <7080.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,415 sats.satellite.Scanner-1       INFO       <7080.00> Scanner-1: setting timed terminal event at 7140.0
2026-03-09 19:09:37,421 sats.satellite.Scanner-1       INFO       <7140.00> Scanner-1: timed termination at 7140.0 for action_desat
2026-03-09 19:09:37,422 data.base                      INFO       <7140.00> Total reward: {}
2026-03-09 19:09:37,423 comm.communication             INFO       <7140.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,423 sats.satellite.Scanner-1       INFO       <7140.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,425 gym                            INFO       <7140.00> Step reward: 0.0
2026-03-09 19:09:37,425 gym                            INFO       <7140.00> === STARTING STEP ===
2026-03-09 19:09:37,426 sats.satellite.Scanner-1       INFO       <7140.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,426 sats.satellite.Scanner-1       INFO       <7140.00> Scanner-1: setting timed terminal event at 7200.0
2026-03-09 19:09:37,432 sats.satellite.Scanner-1       INFO       <7200.00> Scanner-1: timed termination at 7200.0 for action_desat
2026-03-09 19:09:37,432 data.base                      INFO       <7200.00> Total reward: {}
2026-03-09 19:09:37,433 comm.communication             INFO       <7200.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,434 sats.satellite.Scanner-1       INFO       <7200.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,436 gym                            INFO       <7200.00> Step reward: 0.0
2026-03-09 19:09:37,436 gym                            INFO       <7200.00> === STARTING STEP ===
2026-03-09 19:09:37,437 sats.satellite.Scanner-1       INFO       <7200.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,437 sats.satellite.Scanner-1       INFO       <7200.00> Scanner-1: setting timed terminal event at 7260.0
2026-03-09 19:09:37,442 sats.satellite.Scanner-1       INFO       <7260.00> Scanner-1: timed termination at 7260.0 for action_downlink
2026-03-09 19:09:37,443 data.base                      INFO       <7260.00> Total reward: {}
2026-03-09 19:09:37,443 comm.communication             INFO       <7260.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,444 sats.satellite.Scanner-1       INFO       <7260.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,446 gym                            INFO       <7260.00> Step reward: 0.0
2026-03-09 19:09:37,446 gym                            INFO       <7260.00> === STARTING STEP ===
2026-03-09 19:09:37,447 sats.satellite.Scanner-1       INFO       <7260.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,447 sats.satellite.Scanner-1       INFO       <7260.00> Scanner-1: setting timed terminal event at 7320.0
2026-03-09 19:09:37,452 sats.satellite.Scanner-1       INFO       <7320.00> Scanner-1: timed termination at 7320.0 for action_downlink
2026-03-09 19:09:37,453 data.base                      INFO       <7320.00> Total reward: {}
2026-03-09 19:09:37,453 comm.communication             INFO       <7320.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,454 sats.satellite.Scanner-1       INFO       <7320.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,456 gym                            INFO       <7320.00> Step reward: 0.0
2026-03-09 19:09:37,456 gym                            INFO       <7320.00> === STARTING STEP ===
2026-03-09 19:09:37,457 sats.satellite.Scanner-1       INFO       <7320.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,457 sats.satellite.Scanner-1       INFO       <7320.00> Scanner-1: setting timed terminal event at 7380.0
2026-03-09 19:09:37,463 sats.satellite.Scanner-1       INFO       <7380.00> Scanner-1: timed termination at 7380.0 for action_desat
2026-03-09 19:09:37,464 data.base                      INFO       <7380.00> Total reward: {}
2026-03-09 19:09:37,464 comm.communication             INFO       <7380.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,465 sats.satellite.Scanner-1       INFO       <7380.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,467 gym                            INFO       <7380.00> Step reward: 0.0
2026-03-09 19:09:37,467 gym                            INFO       <7380.00> === STARTING STEP ===
2026-03-09 19:09:37,468 sats.satellite.Scanner-1       INFO       <7380.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,468 sats.satellite.Scanner-1       INFO       <7380.00> Scanner-1: setting timed terminal event at 7560.0
2026-03-09 19:09:37,481 sats.satellite.Scanner-1       INFO       <7560.00> Scanner-1: timed termination at 7560.0 for action_nadir_scan
2026-03-09 19:09:37,482 data.base                      INFO       <7560.00> Total reward: {'Scanner-1': 0.004947368421052631}
2026-03-09 19:09:37,482 comm.communication             INFO       <7560.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,483 sats.satellite.Scanner-1       INFO       <7560.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,485 gym                            INFO       <7560.00> Step reward: 0.004947368421052631
2026-03-09 19:09:37,485 gym                            INFO       <7560.00> === STARTING STEP ===
2026-03-09 19:09:37,486 sats.satellite.Scanner-1       INFO       <7560.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,487 sats.satellite.Scanner-1       INFO       <7560.00> Scanner-1: setting timed terminal event at 7680.0
2026-03-09 19:09:37,495 sats.satellite.Scanner-1       INFO       <7680.00> Scanner-1: timed termination at 7680.0 for action_charge
2026-03-09 19:09:37,496 data.base                      INFO       <7680.00> Total reward: {}
2026-03-09 19:09:37,496 comm.communication             INFO       <7680.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,497 sats.satellite.Scanner-1       INFO       <7680.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,499 gym                            INFO       <7680.00> Step reward: 0.0
2026-03-09 19:09:37,499 gym                            INFO       <7680.00> === STARTING STEP ===
2026-03-09 19:09:37,500 sats.satellite.Scanner-1       INFO       <7680.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,500 sats.satellite.Scanner-1       INFO       <7680.00> Scanner-1: setting timed terminal event at 7860.0
2026-03-09 19:09:37,513 sats.satellite.Scanner-1       INFO       <7860.00> Scanner-1: timed termination at 7860.0 for action_nadir_scan
2026-03-09 19:09:37,514 data.base                      INFO       <7860.00> Total reward: {'Scanner-1': 0.004947368421052631}
2026-03-09 19:09:37,514 comm.communication             INFO       <7860.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,515 sats.satellite.Scanner-1       INFO       <7860.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,517 gym                            INFO       <7860.00> Step reward: 0.004947368421052631
2026-03-09 19:09:37,517 gym                            INFO       <7860.00> === STARTING STEP ===
2026-03-09 19:09:37,517 sats.satellite.Scanner-1       INFO       <7860.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,518 sats.satellite.Scanner-1       INFO       <7860.00> Scanner-1: setting timed terminal event at 7920.0
2026-03-09 19:09:37,524 sats.satellite.Scanner-1       INFO       <7920.00> Scanner-1: timed termination at 7920.0 for action_desat
2026-03-09 19:09:37,524 data.base                      INFO       <7920.00> Total reward: {}
2026-03-09 19:09:37,524 comm.communication             INFO       <7920.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,525 sats.satellite.Scanner-1       INFO       <7920.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,527 gym                            INFO       <7920.00> Step reward: 0.0
2026-03-09 19:09:37,527 gym                            INFO       <7920.00> === STARTING STEP ===
2026-03-09 19:09:37,528 sats.satellite.Scanner-1       INFO       <7920.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,529 sats.satellite.Scanner-1       INFO       <7920.00> Scanner-1: setting timed terminal event at 7980.0
2026-03-09 19:09:37,534 sats.satellite.Scanner-1       INFO       <7980.00> Scanner-1: timed termination at 7980.0 for action_desat
2026-03-09 19:09:37,534 data.base                      INFO       <7980.00> Total reward: {}
2026-03-09 19:09:37,535 comm.communication             INFO       <7980.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,535 sats.satellite.Scanner-1       INFO       <7980.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,538 gym                            INFO       <7980.00> Step reward: 0.0
2026-03-09 19:09:37,538 gym                            INFO       <7980.00> === STARTING STEP ===
2026-03-09 19:09:37,539 sats.satellite.Scanner-1       INFO       <7980.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,539 sats.satellite.Scanner-1       INFO       <7980.00> Scanner-1: setting timed terminal event at 8040.0
2026-03-09 19:09:37,545 sats.satellite.Scanner-1       INFO       <8040.00> Scanner-1: timed termination at 8040.0 for action_downlink
2026-03-09 19:09:37,545 data.base                      INFO       <8040.00> Total reward: {}
2026-03-09 19:09:37,546 comm.communication             INFO       <8040.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,546 sats.satellite.Scanner-1       INFO       <8040.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,548 gym                            INFO       <8040.00> Step reward: 0.0
2026-03-09 19:09:37,548 gym                            INFO       <8040.00> === STARTING STEP ===
2026-03-09 19:09:37,549 sats.satellite.Scanner-1       INFO       <8040.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,549 sats.satellite.Scanner-1       INFO       <8040.00> Scanner-1: setting timed terminal event at 8100.0
2026-03-09 19:09:37,555 sats.satellite.Scanner-1       INFO       <8100.00> Scanner-1: timed termination at 8100.0 for action_desat
2026-03-09 19:09:37,556 data.base                      INFO       <8100.00> Total reward: {}
2026-03-09 19:09:37,556 comm.communication             INFO       <8100.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,557 sats.satellite.Scanner-1       INFO       <8100.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,559 gym                            INFO       <8100.00> Step reward: 0.0
2026-03-09 19:09:37,559 gym                            INFO       <8100.00> === STARTING STEP ===
2026-03-09 19:09:37,560 sats.satellite.Scanner-1       INFO       <8100.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,560 sats.satellite.Scanner-1       INFO       <8100.00> Scanner-1: setting timed terminal event at 8280.0
2026-03-09 19:09:37,572 sats.satellite.Scanner-1       INFO       <8280.00> Scanner-1: timed termination at 8280.0 for action_nadir_scan
2026-03-09 19:09:37,573 data.base                      INFO       <8280.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-03-09 19:09:37,573 comm.communication             INFO       <8280.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,574 sats.satellite.Scanner-1       INFO       <8280.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,576 gym                            INFO       <8280.00> Step reward: 0.004912280701754385
2026-03-09 19:09:37,576 gym                            INFO       <8280.00> === STARTING STEP ===
2026-03-09 19:09:37,577 sats.satellite.Scanner-1       INFO       <8280.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,578 sats.satellite.Scanner-1       INFO       <8280.00> Scanner-1: setting timed terminal event at 8460.0
2026-03-09 19:09:37,589 sats.satellite.Scanner-1       INFO       <8460.00> Scanner-1: timed termination at 8460.0 for action_nadir_scan
2026-03-09 19:09:37,590 data.base                      INFO       <8460.00> Total reward: {'Scanner-1': 0.00631578947368421}
2026-03-09 19:09:37,590 comm.communication             INFO       <8460.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,591 sats.satellite.Scanner-1       INFO       <8460.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,592 gym                            INFO       <8460.00> Step reward: 0.00631578947368421
2026-03-09 19:09:37,593 gym                            INFO       <8460.00> === STARTING STEP ===
2026-03-09 19:09:37,593 sats.satellite.Scanner-1       INFO       <8460.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,594 sats.satellite.Scanner-1       INFO       <8460.00> Scanner-1: setting timed terminal event at 8580.0
2026-03-09 19:09:37,603 sats.satellite.Scanner-1       INFO       <8580.00> Scanner-1: timed termination at 8580.0 for action_charge
2026-03-09 19:09:37,604 data.base                      INFO       <8580.00> Total reward: {}
2026-03-09 19:09:37,604 comm.communication             INFO       <8580.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,605 sats.satellite.Scanner-1       INFO       <8580.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,607 gym                            INFO       <8580.00> Step reward: 0.0
2026-03-09 19:09:37,608 gym                            INFO       <8580.00> === STARTING STEP ===
2026-03-09 19:09:37,608 sats.satellite.Scanner-1       INFO       <8580.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-03-09 19:09:37,609 sats.satellite.Scanner-1       INFO       <8580.00> Scanner-1: setting timed terminal event at 8700.0
2026-03-09 19:09:37,617 sats.satellite.Scanner-1       INFO       <8700.00> Scanner-1: timed termination at 8700.0 for action_charge
2026-03-09 19:09:37,618 data.base                      INFO       <8700.00> Total reward: {}
2026-03-09 19:09:37,618 comm.communication             INFO       <8700.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,619 sats.satellite.Scanner-1       INFO       <8700.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,621 gym                            INFO       <8700.00> Step reward: 0.0
2026-03-09 19:09:37,621 gym                            INFO       <8700.00> === STARTING STEP ===
2026-03-09 19:09:37,622 sats.satellite.Scanner-1       INFO       <8700.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-03-09 19:09:37,622 sats.satellite.Scanner-1       INFO       <8700.00> Scanner-1: setting timed terminal event at 8880.0
2026-03-09 19:09:37,635 sats.satellite.Scanner-1       INFO       <8880.00> Scanner-1: timed termination at 8880.0 for action_nadir_scan
2026-03-09 19:09:37,635 data.base                      INFO       <8880.00> Total reward: {'Scanner-1': 0.0048070175438596485}
2026-03-09 19:09:37,636 comm.communication             INFO       <8880.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,636 sats.satellite.Scanner-1       INFO       <8880.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,638 gym                            INFO       <8880.00> Step reward: 0.0048070175438596485
2026-03-09 19:09:37,639 gym                            INFO       <8880.00> === STARTING STEP ===
2026-03-09 19:09:37,639 sats.satellite.Scanner-1       INFO       <8880.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,640 sats.satellite.Scanner-1       INFO       <8880.00> Scanner-1: setting timed terminal event at 8940.0
2026-03-09 19:09:37,645 sats.satellite.Scanner-1       INFO       <8940.00> Scanner-1: timed termination at 8940.0 for action_desat
2026-03-09 19:09:37,646 data.base                      INFO       <8940.00> Total reward: {}
2026-03-09 19:09:37,646 comm.communication             INFO       <8940.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,647 sats.satellite.Scanner-1       INFO       <8940.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,649 gym                            INFO       <8940.00> Step reward: 0.0
2026-03-09 19:09:37,650 gym                            INFO       <8940.00> === STARTING STEP ===
2026-03-09 19:09:37,650 sats.satellite.Scanner-1       INFO       <8940.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,651 sats.satellite.Scanner-1       INFO       <8940.00> Scanner-1: setting timed terminal event at 9000.0
2026-03-09 19:09:37,656 sats.satellite.Scanner-1       INFO       <9000.00> Scanner-1: timed termination at 9000.0 for action_desat
2026-03-09 19:09:37,657 data.base                      INFO       <9000.00> Total reward: {}
2026-03-09 19:09:37,657 comm.communication             INFO       <9000.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,658 sats.satellite.Scanner-1       INFO       <9000.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,660 gym                            INFO       <9000.00> Step reward: 0.0
2026-03-09 19:09:37,660 gym                            INFO       <9000.00> === STARTING STEP ===
2026-03-09 19:09:37,661 sats.satellite.Scanner-1       INFO       <9000.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,661 sats.satellite.Scanner-1       INFO       <9000.00> Scanner-1: setting timed terminal event at 9060.0
2026-03-09 19:09:37,667 sats.satellite.Scanner-1       INFO       <9060.00> Scanner-1: timed termination at 9060.0 for action_desat
2026-03-09 19:09:37,667 data.base                      INFO       <9060.00> Total reward: {}
2026-03-09 19:09:37,668 comm.communication             INFO       <9060.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,668 sats.satellite.Scanner-1       INFO       <9060.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,670 gym                            INFO       <9060.00> Step reward: 0.0
2026-03-09 19:09:37,671 gym                            INFO       <9060.00> === STARTING STEP ===
2026-03-09 19:09:37,671 sats.satellite.Scanner-1       INFO       <9060.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-03-09 19:09:37,672 sats.satellite.Scanner-1       INFO       <9060.00> Scanner-1: setting timed terminal event at 9120.0
2026-03-09 19:09:37,678 sats.satellite.Scanner-1       INFO       <9120.00> Scanner-1: timed termination at 9120.0 for action_downlink
2026-03-09 19:09:37,678 data.base                      INFO       <9120.00> Total reward: {}
2026-03-09 19:09:37,679 comm.communication             INFO       <9120.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,679 sats.satellite.Scanner-1       INFO       <9120.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,682 gym                            INFO       <9120.00> Step reward: 0.0
2026-03-09 19:09:37,682 gym                            INFO       <9120.00> === STARTING STEP ===
2026-03-09 19:09:37,683 sats.satellite.Scanner-1       INFO       <9120.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-03-09 19:09:37,683 sats.satellite.Scanner-1       INFO       <9120.00> Scanner-1: setting timed terminal event at 9180.0
2026-03-09 19:09:37,689 sats.satellite.Scanner-1       INFO       <9180.00> Scanner-1: timed termination at 9180.0 for action_desat
2026-03-09 19:09:37,690 data.base                      INFO       <9180.00> Total reward: {}
2026-03-09 19:09:37,690 comm.communication             INFO       <9180.00> Optimizing data communication between all pairs of satellites
2026-03-09 19:09:37,691 sats.satellite.Scanner-1       INFO       <9180.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-03-09 19:09:37,692 sats.satellite.Scanner-1       WARNING    <9180.00> Scanner-1: failed battery_valid check
2026-03-09 19:09:37,693 gym                            INFO       <9180.00> Step reward: -1.0
2026-03-09 19:09:37,693 gym                            INFO       <9180.00> Episode terminated: True
2026-03-09 19:09:37,694 gym                            INFO       <9180.00> Episode truncated: False