Training with RLlib PPO
RLlib is a high-performance, distributed reinforcement learning library. It is preferable to other RL libraries (e.g. Stable Baselines
for
bsk_rlenvironments 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-05-19 20:29:39,154 INFO worker.py:1783 -- Started a local Ray instance.
2026-05-19 20:29:42,912 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.15/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.15/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.15/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-05-19 20:30:11 |
| Running for: | 00:00:28.85 |
| Memory: | 3.8/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_77d39_00000 | TERMINATED | 10.1.0.241:4829 | 10 | 14.492 | 2500 | 18 | 2500 |
(PPO pid=4829) 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_lifetime | perf | timers |
|---|---|---|---|---|---|---|---|---|---|
| PPO_SatelliteTasking-RLlib_77d39_00000 | {'num_env_steps_sampled_lifetime': 25000, 'num_agent_steps_sampled_lifetime': {'default_agent': 13750}, 'num_module_steps_sampled': {'default_policy': 250}, 'num_env_steps_sampled': 250, 'num_agent_steps_sampled': {'default_agent': 250}, 'num_episodes': 3, 'num_module_steps_sampled_lifetime': {'default_policy': 13750}, 'sample': np.float64(1.265064408255281), 'time_between_sampling': np.float64(0.16097796398309586), 'episode_duration_sec_mean': 0.7820465210000123, 'episode_return_max': -0.9051228070175439, 'agent_episode_returns_mean': {'default_agent': -0.9206315789473685}, 'episode_len_min': 54, 'module_episode_returns_mean': {'default_policy': -0.9206315789473685}, 'episode_return_min': -0.9361403508771929, 'episode_len_max': 97, 'episode_len_mean': 75.5, 'episode_return_mean': -0.9206315789473685, 'orbits_complete_partial_only': np.float64(1.8373157894736842), 'reward_per_orbit': np.float64(0.0659936457456193), 'rw_status_valid': np.float64(1.0), 'reward': np.float64(0.1226157894736842), 'alive': np.float64(0.0), 'orbits_complete': np.float64(1.8373157894736842), 'battery_status_valid': np.float64(0.0)} | {'num_healthy_workers': 2, 'num_in_flight_async_reqs': 0, 'num_remote_worker_restarts': 0} | {'default_policy': {'curr_entropy_coeff': 0.0, 'num_non_trainable_parameters': 0.0, 'num_trainable_parameters': 139525.0, 'policy_loss': 0.1378113180398941, 'vf_explained_var': 0.7631635665893555, 'mean_kl_loss': 0.0, 'vf_loss_unclipped': 0.008333547040820122, 'default_optimizer_learning_rate': 3e-05, 'gradients_default_optimizer_global_norm': 0.2519424855709076, 'num_module_steps_trained': 250, 'vf_loss': 0.008333547040820122, 'entropy': 1.3795812129974365, 'total_loss': 0.14614486694335938}, '__all_modules__': {'num_module_steps_trained': 250, 'total_loss': 0.14614486694335938, 'num_non_trainable_parameters': 0.0, 'num_trainable_parameters': 139525.0, 'num_env_steps_trained': 250}} | {'default_agent': 2500} | 2500 | 2500 | 18 | {'cpu_util_percent': np.float64(48.45), 'ram_util_percent': np.float64(30.9)} | {'env_runner_sampling_timer': 1.2919652574163336, 'learner_update_timer': 0.10903971965433981, 'synch_weights': 0.0055418949934662514, 'synch_env_connectors': 0.005773225219512286} |
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:29:58,593 sats.satellite.Scanner-1 WARNING <14700.00> Scanner-1: failed battery_valid check
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:29:59,059 sats.satellite.Scanner-1 WARNING <4860.00> Scanner-1: failed battery_valid check
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:03,905 sats.satellite.Scanner-1 WARNING <7560.00> Scanner-1: failed battery_valid check [repeated 7x 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=4877) 2026-05-19 20:30:09,241 sats.satellite.Scanner-1 WARNING <19320.00> Scanner-1: failed battery_valid check [repeated 5x across cluster]
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,409 utils.orbital WARNING <0.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,419 utils.orbital WARNING <120.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,426 utils.orbital WARNING <180.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,439 utils.orbital WARNING <360.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,452 utils.orbital WARNING <540.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,464 utils.orbital WARNING <720.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,470 utils.orbital WARNING <780.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,477 utils.orbital WARNING <840.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,483 utils.orbital WARNING <900.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,489 utils.orbital WARNING <960.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,496 utils.orbital WARNING <1020.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,505 utils.orbital WARNING <1140.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,519 utils.orbital WARNING <1320.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,528 utils.orbital WARNING <1440.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,537 utils.orbital WARNING <1560.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,544 utils.orbital WARNING <1620.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,550 utils.orbital WARNING <1680.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,557 utils.orbital WARNING <1740.00> Could not find eclipse transitions in next 12000.0 seconds
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,566 utils.orbital WARNING <1860.00> Could not find eclipse transitions in next 12000.0 seconds
2026-05-19 20:30:11,791 INFO tune.py:1009 -- Wrote the latest version of all result files and experiment state to '/home/runner/ray_results/PPO_2026-05-19_20-29-42' in 0.0412s.
2026-05-19 20:30:11,795 INFO tune.py:1041 -- Total run time: 28.88 seconds (28.80 seconds for the tuning loop).
(SingleAgentEnvRunner pid=4878) 2026-05-19 20:30:11,349 sats.satellite.Scanner-1 WARNING <5760.00> Scanner-1: failed battery_valid check [repeated 4x 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-05-19 20:30:13,190 gym INFO Resetting environment with seed=999121591
2026-05-19 20:30:13,244 sats.satellite.Scanner-1 INFO <0.00> Scanner-1: Finding opportunity windows from 0.00 to 28800.00 seconds
2026-05-19 20:30:13,291 gym INFO <0.00> Environment reset
2026-05-19 20:30:13,292 gym INFO <0.00> === STARTING STEP ===
2026-05-19 20:30:13,292 sats.satellite.Scanner-1 INFO <0.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,293 sats.satellite.Scanner-1 INFO <0.00> Scanner-1: setting timed terminal event at 60.0
2026-05-19 20:30:13,298 sats.satellite.Scanner-1 INFO <60.00> Scanner-1: timed termination at 60.0 for action_downlink
2026-05-19 20:30:13,298 data.base INFO <60.00> Total reward: {}
2026-05-19 20:30:13,299 comm.communication INFO <60.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,299 sats.satellite.Scanner-1 INFO <60.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,301 gym INFO <60.00> Step reward: 0.0
2026-05-19 20:30:13,302 gym INFO <60.00> === STARTING STEP ===
2026-05-19 20:30:13,302 sats.satellite.Scanner-1 INFO <60.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,303 sats.satellite.Scanner-1 INFO <60.00> Scanner-1: setting timed terminal event at 120.0
2026-05-19 20:30:13,308 sats.satellite.Scanner-1 INFO <120.00> Scanner-1: timed termination at 120.0 for action_desat
2026-05-19 20:30:13,308 data.base INFO <120.00> Total reward: {}
2026-05-19 20:30:13,309 comm.communication INFO <120.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,309 sats.satellite.Scanner-1 INFO <120.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,311 gym INFO <120.00> Step reward: 0.0
2026-05-19 20:30:13,311 gym INFO <120.00> === STARTING STEP ===
2026-05-19 20:30:13,312 sats.satellite.Scanner-1 INFO <120.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,312 sats.satellite.Scanner-1 INFO <120.00> Scanner-1: setting timed terminal event at 180.0
2026-05-19 20:30:13,317 sats.satellite.Scanner-1 INFO <180.00> Scanner-1: timed termination at 180.0 for action_desat
2026-05-19 20:30:13,317 data.base INFO <180.00> Total reward: {}
2026-05-19 20:30:13,317 comm.communication INFO <180.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,318 sats.satellite.Scanner-1 INFO <180.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,320 gym INFO <180.00> Step reward: 0.0
2026-05-19 20:30:13,320 gym INFO <180.00> === STARTING STEP ===
2026-05-19 20:30:13,321 sats.satellite.Scanner-1 INFO <180.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,321 sats.satellite.Scanner-1 INFO <180.00> Scanner-1: setting timed terminal event at 360.0
2026-05-19 20:30:13,332 sats.satellite.Scanner-1 INFO <360.00> Scanner-1: timed termination at 360.0 for action_nadir_scan
2026-05-19 20:30:13,332 data.base INFO <360.00> Total reward: {'Scanner-1': 0.005368421052631579}
2026-05-19 20:30:13,332 comm.communication INFO <360.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,333 sats.satellite.Scanner-1 INFO <360.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,335 gym INFO <360.00> Step reward: 0.005368421052631579
2026-05-19 20:30:13,335 gym INFO <360.00> === STARTING STEP ===
2026-05-19 20:30:13,336 sats.satellite.Scanner-1 INFO <360.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,336 sats.satellite.Scanner-1 INFO <360.00> Scanner-1: setting timed terminal event at 420.0
2026-05-19 20:30:13,341 sats.satellite.Scanner-1 INFO <420.00> Scanner-1: timed termination at 420.0 for action_downlink
2026-05-19 20:30:13,341 data.base INFO <420.00> Total reward: {}
2026-05-19 20:30:13,341 comm.communication INFO <420.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,342 sats.satellite.Scanner-1 INFO <420.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,344 gym INFO <420.00> Step reward: 0.0
2026-05-19 20:30:13,345 gym INFO <420.00> === STARTING STEP ===
2026-05-19 20:30:13,345 sats.satellite.Scanner-1 INFO <420.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,345 sats.satellite.Scanner-1 INFO <420.00> Scanner-1: setting timed terminal event at 480.0
2026-05-19 20:30:13,350 sats.satellite.Scanner-1 INFO <480.00> Scanner-1: timed termination at 480.0 for action_desat
2026-05-19 20:30:13,350 data.base INFO <480.00> Total reward: {}
2026-05-19 20:30:13,351 comm.communication INFO <480.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,351 sats.satellite.Scanner-1 INFO <480.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,353 gym INFO <480.00> Step reward: 0.0
2026-05-19 20:30:13,353 gym INFO <480.00> === STARTING STEP ===
2026-05-19 20:30:13,354 sats.satellite.Scanner-1 INFO <480.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,354 sats.satellite.Scanner-1 INFO <480.00> Scanner-1: setting timed terminal event at 540.0
2026-05-19 20:30:13,359 sats.satellite.Scanner-1 INFO <540.00> Scanner-1: timed termination at 540.0 for action_desat
2026-05-19 20:30:13,359 data.base INFO <540.00> Total reward: {}
2026-05-19 20:30:13,360 comm.communication INFO <540.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,360 sats.satellite.Scanner-1 INFO <540.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,362 gym INFO <540.00> Step reward: 0.0
2026-05-19 20:30:13,363 gym INFO <540.00> === STARTING STEP ===
2026-05-19 20:30:13,363 sats.satellite.Scanner-1 INFO <540.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,364 sats.satellite.Scanner-1 INFO <540.00> Scanner-1: setting timed terminal event at 600.0
2026-05-19 20:30:13,368 sats.satellite.Scanner-1 INFO <600.00> Scanner-1: timed termination at 600.0 for action_desat
2026-05-19 20:30:13,369 data.base INFO <600.00> Total reward: {}
2026-05-19 20:30:13,369 comm.communication INFO <600.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,370 sats.satellite.Scanner-1 INFO <600.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,372 gym INFO <600.00> Step reward: 0.0
2026-05-19 20:30:13,372 gym INFO <600.00> === STARTING STEP ===
2026-05-19 20:30:13,373 sats.satellite.Scanner-1 INFO <600.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,373 sats.satellite.Scanner-1 INFO <600.00> Scanner-1: setting timed terminal event at 660.0
2026-05-19 20:30:13,377 sats.satellite.Scanner-1 INFO <660.00> Scanner-1: timed termination at 660.0 for action_desat
2026-05-19 20:30:13,378 data.base INFO <660.00> Total reward: {}
2026-05-19 20:30:13,378 comm.communication INFO <660.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,379 sats.satellite.Scanner-1 INFO <660.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,381 gym INFO <660.00> Step reward: 0.0
2026-05-19 20:30:13,381 gym INFO <660.00> === STARTING STEP ===
2026-05-19 20:30:13,382 sats.satellite.Scanner-1 INFO <660.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,382 sats.satellite.Scanner-1 INFO <660.00> Scanner-1: setting timed terminal event at 720.0
2026-05-19 20:30:13,387 sats.satellite.Scanner-1 INFO <720.00> Scanner-1: timed termination at 720.0 for action_desat
2026-05-19 20:30:13,387 data.base INFO <720.00> Total reward: {}
2026-05-19 20:30:13,388 comm.communication INFO <720.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,388 sats.satellite.Scanner-1 INFO <720.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,390 gym INFO <720.00> Step reward: 0.0
2026-05-19 20:30:13,391 gym INFO <720.00> === STARTING STEP ===
2026-05-19 20:30:13,391 sats.satellite.Scanner-1 INFO <720.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,391 sats.satellite.Scanner-1 INFO <720.00> Scanner-1: setting timed terminal event at 840.0
2026-05-19 20:30:13,399 sats.satellite.Scanner-1 INFO <840.00> Scanner-1: timed termination at 840.0 for action_charge
2026-05-19 20:30:13,399 data.base INFO <840.00> Total reward: {}
2026-05-19 20:30:13,399 comm.communication INFO <840.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,400 sats.satellite.Scanner-1 INFO <840.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,402 gym INFO <840.00> Step reward: 0.0
2026-05-19 20:30:13,402 gym INFO <840.00> === STARTING STEP ===
2026-05-19 20:30:13,403 sats.satellite.Scanner-1 INFO <840.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,403 sats.satellite.Scanner-1 INFO <840.00> Scanner-1: setting timed terminal event at 1020.0
2026-05-19 20:30:13,414 sats.satellite.Scanner-1 INFO <1020.00> Scanner-1: timed termination at 1020.0 for action_nadir_scan
2026-05-19 20:30:13,414 data.base INFO <1020.00> Total reward: {'Scanner-1': 0.004}
2026-05-19 20:30:13,415 comm.communication INFO <1020.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,415 sats.satellite.Scanner-1 INFO <1020.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,417 gym INFO <1020.00> Step reward: 0.004
2026-05-19 20:30:13,417 gym INFO <1020.00> === STARTING STEP ===
2026-05-19 20:30:13,419 sats.satellite.Scanner-1 INFO <1020.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,419 sats.satellite.Scanner-1 INFO <1020.00> Scanner-1: setting timed terminal event at 1080.0
2026-05-19 20:30:13,423 sats.satellite.Scanner-1 INFO <1080.00> Scanner-1: timed termination at 1080.0 for action_desat
2026-05-19 20:30:13,424 data.base INFO <1080.00> Total reward: {}
2026-05-19 20:30:13,424 comm.communication INFO <1080.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,425 sats.satellite.Scanner-1 INFO <1080.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,426 gym INFO <1080.00> Step reward: 0.0
2026-05-19 20:30:13,427 gym INFO <1080.00> === STARTING STEP ===
2026-05-19 20:30:13,427 sats.satellite.Scanner-1 INFO <1080.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,428 sats.satellite.Scanner-1 INFO <1080.00> Scanner-1: setting timed terminal event at 1260.0
2026-05-19 20:30:13,438 sats.satellite.Scanner-1 INFO <1260.00> Scanner-1: timed termination at 1260.0 for action_nadir_scan
2026-05-19 20:30:13,439 data.base INFO <1260.00> Total reward: {'Scanner-1': 0.0038596491228070173}
2026-05-19 20:30:13,440 comm.communication INFO <1260.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,440 sats.satellite.Scanner-1 INFO <1260.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,442 gym INFO <1260.00> Step reward: 0.0038596491228070173
2026-05-19 20:30:13,442 gym INFO <1260.00> === STARTING STEP ===
2026-05-19 20:30:13,443 sats.satellite.Scanner-1 INFO <1260.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,443 sats.satellite.Scanner-1 INFO <1260.00> Scanner-1: setting timed terminal event at 1320.0
2026-05-19 20:30:13,448 sats.satellite.Scanner-1 INFO <1320.00> Scanner-1: timed termination at 1320.0 for action_downlink
2026-05-19 20:30:13,448 data.base INFO <1320.00> Total reward: {}
2026-05-19 20:30:13,448 comm.communication INFO <1320.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,449 sats.satellite.Scanner-1 INFO <1320.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,450 gym INFO <1320.00> Step reward: 0.0
2026-05-19 20:30:13,451 gym INFO <1320.00> === STARTING STEP ===
2026-05-19 20:30:13,451 sats.satellite.Scanner-1 INFO <1320.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,452 sats.satellite.Scanner-1 INFO <1320.00> Scanner-1: setting timed terminal event at 1500.0
2026-05-19 20:30:13,463 sats.satellite.Scanner-1 INFO <1500.00> Scanner-1: timed termination at 1500.0 for action_nadir_scan
2026-05-19 20:30:13,463 data.base INFO <1500.00> Total reward: {'Scanner-1': 0.005052631578947368}
2026-05-19 20:30:13,464 comm.communication INFO <1500.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,464 sats.satellite.Scanner-1 INFO <1500.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,467 gym INFO <1500.00> Step reward: 0.005052631578947368
2026-05-19 20:30:13,467 gym INFO <1500.00> === STARTING STEP ===
2026-05-19 20:30:13,467 sats.satellite.Scanner-1 INFO <1500.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,468 sats.satellite.Scanner-1 INFO <1500.00> Scanner-1: setting timed terminal event at 1560.0
2026-05-19 20:30:13,473 sats.satellite.Scanner-1 INFO <1560.00> Scanner-1: timed termination at 1560.0 for action_desat
2026-05-19 20:30:13,473 data.base INFO <1560.00> Total reward: {}
2026-05-19 20:30:13,474 comm.communication INFO <1560.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,474 sats.satellite.Scanner-1 INFO <1560.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,476 gym INFO <1560.00> Step reward: 0.0
2026-05-19 20:30:13,476 gym INFO <1560.00> === STARTING STEP ===
2026-05-19 20:30:13,477 sats.satellite.Scanner-1 INFO <1560.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,477 sats.satellite.Scanner-1 INFO <1560.00> Scanner-1: setting timed terminal event at 1680.0
2026-05-19 20:30:13,485 sats.satellite.Scanner-1 INFO <1680.00> Scanner-1: timed termination at 1680.0 for action_charge
2026-05-19 20:30:13,485 data.base INFO <1680.00> Total reward: {}
2026-05-19 20:30:13,486 comm.communication INFO <1680.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,486 sats.satellite.Scanner-1 INFO <1680.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,488 gym INFO <1680.00> Step reward: 0.0
2026-05-19 20:30:13,488 gym INFO <1680.00> === STARTING STEP ===
2026-05-19 20:30:13,489 sats.satellite.Scanner-1 INFO <1680.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,489 sats.satellite.Scanner-1 INFO <1680.00> Scanner-1: setting timed terminal event at 1740.0
2026-05-19 20:30:13,494 sats.satellite.Scanner-1 INFO <1740.00> Scanner-1: timed termination at 1740.0 for action_downlink
2026-05-19 20:30:13,494 data.base INFO <1740.00> Total reward: {}
2026-05-19 20:30:13,495 comm.communication INFO <1740.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,495 sats.satellite.Scanner-1 INFO <1740.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,497 gym INFO <1740.00> Step reward: 0.0
2026-05-19 20:30:13,498 gym INFO <1740.00> === STARTING STEP ===
2026-05-19 20:30:13,498 sats.satellite.Scanner-1 INFO <1740.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,498 sats.satellite.Scanner-1 INFO <1740.00> Scanner-1: setting timed terminal event at 1860.0
2026-05-19 20:30:13,506 sats.satellite.Scanner-1 INFO <1860.00> Scanner-1: timed termination at 1860.0 for action_charge
2026-05-19 20:30:13,506 data.base INFO <1860.00> Total reward: {}
2026-05-19 20:30:13,507 comm.communication INFO <1860.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,507 sats.satellite.Scanner-1 INFO <1860.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,509 gym INFO <1860.00> Step reward: 0.0
2026-05-19 20:30:13,509 gym INFO <1860.00> === STARTING STEP ===
2026-05-19 20:30:13,510 sats.satellite.Scanner-1 INFO <1860.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,510 sats.satellite.Scanner-1 INFO <1860.00> Scanner-1: setting timed terminal event at 1980.0
2026-05-19 20:30:13,517 sats.satellite.Scanner-1 INFO <1980.00> Scanner-1: timed termination at 1980.0 for action_charge
2026-05-19 20:30:13,518 data.base INFO <1980.00> Total reward: {}
2026-05-19 20:30:13,518 comm.communication INFO <1980.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,519 sats.satellite.Scanner-1 INFO <1980.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,521 gym INFO <1980.00> Step reward: 0.0
2026-05-19 20:30:13,521 gym INFO <1980.00> === STARTING STEP ===
2026-05-19 20:30:13,522 sats.satellite.Scanner-1 INFO <1980.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,522 sats.satellite.Scanner-1 INFO <1980.00> Scanner-1: setting timed terminal event at 2160.0
2026-05-19 20:30:13,532 sats.satellite.Scanner-1 INFO <2160.00> Scanner-1: timed termination at 2160.0 for action_nadir_scan
2026-05-19 20:30:13,533 data.base INFO <2160.00> Total reward: {'Scanner-1': 0.005368421052631579}
2026-05-19 20:30:13,533 comm.communication INFO <2160.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,534 sats.satellite.Scanner-1 INFO <2160.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,535 gym INFO <2160.00> Step reward: 0.005368421052631579
2026-05-19 20:30:13,536 gym INFO <2160.00> === STARTING STEP ===
2026-05-19 20:30:13,536 sats.satellite.Scanner-1 INFO <2160.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,536 sats.satellite.Scanner-1 INFO <2160.00> Scanner-1: setting timed terminal event at 2220.0
2026-05-19 20:30:13,541 sats.satellite.Scanner-1 INFO <2220.00> Scanner-1: timed termination at 2220.0 for action_downlink
2026-05-19 20:30:13,541 data.base INFO <2220.00> Total reward: {}
2026-05-19 20:30:13,542 comm.communication INFO <2220.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,542 sats.satellite.Scanner-1 INFO <2220.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,544 gym INFO <2220.00> Step reward: 0.0
2026-05-19 20:30:13,544 gym INFO <2220.00> === STARTING STEP ===
2026-05-19 20:30:13,545 sats.satellite.Scanner-1 INFO <2220.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,545 sats.satellite.Scanner-1 INFO <2220.00> Scanner-1: setting timed terminal event at 2280.0
2026-05-19 20:30:13,550 sats.satellite.Scanner-1 INFO <2280.00> Scanner-1: timed termination at 2280.0 for action_desat
2026-05-19 20:30:13,550 data.base INFO <2280.00> Total reward: {}
2026-05-19 20:30:13,551 comm.communication INFO <2280.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,551 sats.satellite.Scanner-1 INFO <2280.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,553 gym INFO <2280.00> Step reward: 0.0
2026-05-19 20:30:13,554 gym INFO <2280.00> === STARTING STEP ===
2026-05-19 20:30:13,554 sats.satellite.Scanner-1 INFO <2280.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,554 sats.satellite.Scanner-1 INFO <2280.00> Scanner-1: setting timed terminal event at 2400.0
2026-05-19 20:30:13,562 sats.satellite.Scanner-1 INFO <2400.00> Scanner-1: timed termination at 2400.0 for action_charge
2026-05-19 20:30:13,562 data.base INFO <2400.00> Total reward: {}
2026-05-19 20:30:13,563 comm.communication INFO <2400.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,563 sats.satellite.Scanner-1 INFO <2400.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,565 gym INFO <2400.00> Step reward: 0.0
2026-05-19 20:30:13,566 gym INFO <2400.00> === STARTING STEP ===
2026-05-19 20:30:13,566 sats.satellite.Scanner-1 INFO <2400.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,566 sats.satellite.Scanner-1 INFO <2400.00> Scanner-1: setting timed terminal event at 2580.0
2026-05-19 20:30:13,577 sats.satellite.Scanner-1 INFO <2580.00> Scanner-1: timed termination at 2580.0 for action_nadir_scan
2026-05-19 20:30:13,578 data.base INFO <2580.00> Total reward: {'Scanner-1': 0.005087719298245614}
2026-05-19 20:30:13,578 comm.communication INFO <2580.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,578 sats.satellite.Scanner-1 INFO <2580.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,580 gym INFO <2580.00> Step reward: 0.005087719298245614
2026-05-19 20:30:13,581 gym INFO <2580.00> === STARTING STEP ===
2026-05-19 20:30:13,581 sats.satellite.Scanner-1 INFO <2580.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,581 sats.satellite.Scanner-1 INFO <2580.00> Scanner-1: setting timed terminal event at 2640.0
2026-05-19 20:30:13,585 sats.satellite.Scanner-1 INFO <2640.00> Scanner-1: timed termination at 2640.0 for action_downlink
2026-05-19 20:30:13,586 data.base INFO <2640.00> Total reward: {}
2026-05-19 20:30:13,587 comm.communication INFO <2640.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,587 sats.satellite.Scanner-1 INFO <2640.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,589 gym INFO <2640.00> Step reward: 0.0
2026-05-19 20:30:13,589 gym INFO <2640.00> === STARTING STEP ===
2026-05-19 20:30:13,590 sats.satellite.Scanner-1 INFO <2640.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,590 sats.satellite.Scanner-1 INFO <2640.00> Scanner-1: setting timed terminal event at 2700.0
2026-05-19 20:30:13,595 sats.satellite.Scanner-1 INFO <2700.00> Scanner-1: timed termination at 2700.0 for action_desat
2026-05-19 20:30:13,595 data.base INFO <2700.00> Total reward: {}
2026-05-19 20:30:13,596 comm.communication INFO <2700.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,596 sats.satellite.Scanner-1 INFO <2700.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,598 gym INFO <2700.00> Step reward: 0.0
2026-05-19 20:30:13,598 gym INFO <2700.00> === STARTING STEP ===
2026-05-19 20:30:13,598 sats.satellite.Scanner-1 INFO <2700.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,599 sats.satellite.Scanner-1 INFO <2700.00> Scanner-1: setting timed terminal event at 2880.0
2026-05-19 20:30:13,609 sats.satellite.Scanner-1 INFO <2880.00> Scanner-1: timed termination at 2880.0 for action_nadir_scan
2026-05-19 20:30:13,610 data.base INFO <2880.00> Total reward: {'Scanner-1': 0.004842105263157894}
2026-05-19 20:30:13,610 comm.communication INFO <2880.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,610 sats.satellite.Scanner-1 INFO <2880.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,612 gym INFO <2880.00> Step reward: 0.004842105263157894
2026-05-19 20:30:13,613 gym INFO <2880.00> === STARTING STEP ===
2026-05-19 20:30:13,613 sats.satellite.Scanner-1 INFO <2880.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,614 sats.satellite.Scanner-1 INFO <2880.00> Scanner-1: setting timed terminal event at 2940.0
2026-05-19 20:30:13,618 sats.satellite.Scanner-1 INFO <2940.00> Scanner-1: timed termination at 2940.0 for action_desat
2026-05-19 20:30:13,619 data.base INFO <2940.00> Total reward: {}
2026-05-19 20:30:13,619 comm.communication INFO <2940.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,620 sats.satellite.Scanner-1 INFO <2940.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,622 gym INFO <2940.00> Step reward: 0.0
2026-05-19 20:30:13,622 gym INFO <2940.00> === STARTING STEP ===
2026-05-19 20:30:13,622 sats.satellite.Scanner-1 INFO <2940.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,623 sats.satellite.Scanner-1 INFO <2940.00> Scanner-1: setting timed terminal event at 3120.0
2026-05-19 20:30:13,633 sats.satellite.Scanner-1 INFO <3120.00> Scanner-1: timed termination at 3120.0 for action_nadir_scan
2026-05-19 20:30:13,634 data.base INFO <3120.00> Total reward: {'Scanner-1': 0.0048070175438596485}
2026-05-19 20:30:13,634 comm.communication INFO <3120.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,635 sats.satellite.Scanner-1 INFO <3120.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,637 gym INFO <3120.00> Step reward: 0.0048070175438596485
2026-05-19 20:30:13,637 gym INFO <3120.00> === STARTING STEP ===
2026-05-19 20:30:13,638 sats.satellite.Scanner-1 INFO <3120.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,638 sats.satellite.Scanner-1 INFO <3120.00> Scanner-1: setting timed terminal event at 3240.0
2026-05-19 20:30:13,646 sats.satellite.Scanner-1 INFO <3240.00> Scanner-1: timed termination at 3240.0 for action_charge
2026-05-19 20:30:13,646 data.base INFO <3240.00> Total reward: {}
2026-05-19 20:30:13,647 comm.communication INFO <3240.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,647 sats.satellite.Scanner-1 INFO <3240.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,649 gym INFO <3240.00> Step reward: 0.0
2026-05-19 20:30:13,649 gym INFO <3240.00> === STARTING STEP ===
2026-05-19 20:30:13,650 sats.satellite.Scanner-1 INFO <3240.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,650 sats.satellite.Scanner-1 INFO <3240.00> Scanner-1: setting timed terminal event at 3420.0
2026-05-19 20:30:13,661 sats.satellite.Scanner-1 INFO <3420.00> Scanner-1: timed termination at 3420.0 for action_nadir_scan
2026-05-19 20:30:13,661 data.base INFO <3420.00> Total reward: {'Scanner-1': 0.0043859649122807015}
2026-05-19 20:30:13,662 comm.communication INFO <3420.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,662 sats.satellite.Scanner-1 INFO <3420.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,664 gym INFO <3420.00> Step reward: 0.0043859649122807015
2026-05-19 20:30:13,665 gym INFO <3420.00> === STARTING STEP ===
2026-05-19 20:30:13,665 sats.satellite.Scanner-1 INFO <3420.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,665 sats.satellite.Scanner-1 INFO <3420.00> Scanner-1: setting timed terminal event at 3480.0
2026-05-19 20:30:13,670 sats.satellite.Scanner-1 INFO <3480.00> Scanner-1: timed termination at 3480.0 for action_desat
2026-05-19 20:30:13,670 data.base INFO <3480.00> Total reward: {}
2026-05-19 20:30:13,671 comm.communication INFO <3480.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,671 sats.satellite.Scanner-1 INFO <3480.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,673 gym INFO <3480.00> Step reward: 0.0
2026-05-19 20:30:13,673 gym INFO <3480.00> === STARTING STEP ===
2026-05-19 20:30:13,674 sats.satellite.Scanner-1 INFO <3480.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,674 sats.satellite.Scanner-1 INFO <3480.00> Scanner-1: setting timed terminal event at 3600.0
2026-05-19 20:30:13,681 sats.satellite.Scanner-1 INFO <3600.00> Scanner-1: timed termination at 3600.0 for action_charge
2026-05-19 20:30:13,682 data.base INFO <3600.00> Total reward: {}
2026-05-19 20:30:13,682 comm.communication INFO <3600.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,683 sats.satellite.Scanner-1 INFO <3600.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,684 gym INFO <3600.00> Step reward: 0.0
2026-05-19 20:30:13,685 gym INFO <3600.00> === STARTING STEP ===
2026-05-19 20:30:13,685 sats.satellite.Scanner-1 INFO <3600.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,686 sats.satellite.Scanner-1 INFO <3600.00> Scanner-1: setting timed terminal event at 3780.0
2026-05-19 20:30:13,696 sats.satellite.Scanner-1 INFO <3780.00> Scanner-1: timed termination at 3780.0 for action_nadir_scan
2026-05-19 20:30:13,697 data.base INFO <3780.00> Total reward: {'Scanner-1': 0.004631578947368421}
2026-05-19 20:30:13,697 comm.communication INFO <3780.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,698 sats.satellite.Scanner-1 INFO <3780.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,699 gym INFO <3780.00> Step reward: 0.004631578947368421
2026-05-19 20:30:13,699 gym INFO <3780.00> === STARTING STEP ===
2026-05-19 20:30:13,700 sats.satellite.Scanner-1 INFO <3780.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,700 sats.satellite.Scanner-1 INFO <3780.00> Scanner-1: setting timed terminal event at 3960.0
2026-05-19 20:30:13,711 sats.satellite.Scanner-1 INFO <3960.00> Scanner-1: timed termination at 3960.0 for action_nadir_scan
2026-05-19 20:30:13,712 data.base INFO <3960.00> Total reward: {'Scanner-1': 0.00631578947368421}
2026-05-19 20:30:13,712 comm.communication INFO <3960.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,713 sats.satellite.Scanner-1 INFO <3960.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,714 gym INFO <3960.00> Step reward: 0.00631578947368421
2026-05-19 20:30:13,715 gym INFO <3960.00> === STARTING STEP ===
2026-05-19 20:30:13,715 sats.satellite.Scanner-1 INFO <3960.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,716 sats.satellite.Scanner-1 INFO <3960.00> Scanner-1: setting timed terminal event at 4080.0
2026-05-19 20:30:13,724 sats.satellite.Scanner-1 INFO <4080.00> Scanner-1: timed termination at 4080.0 for action_charge
2026-05-19 20:30:13,724 data.base INFO <4080.00> Total reward: {}
2026-05-19 20:30:13,725 comm.communication INFO <4080.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,725 sats.satellite.Scanner-1 INFO <4080.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,727 gym INFO <4080.00> Step reward: 0.0
2026-05-19 20:30:13,728 gym INFO <4080.00> === STARTING STEP ===
2026-05-19 20:30:13,728 sats.satellite.Scanner-1 INFO <4080.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,729 sats.satellite.Scanner-1 INFO <4080.00> Scanner-1: setting timed terminal event at 4140.0
2026-05-19 20:30:13,733 sats.satellite.Scanner-1 INFO <4140.00> Scanner-1: timed termination at 4140.0 for action_downlink
2026-05-19 20:30:13,733 data.base INFO <4140.00> Total reward: {}
2026-05-19 20:30:13,734 comm.communication INFO <4140.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,734 sats.satellite.Scanner-1 INFO <4140.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,736 gym INFO <4140.00> Step reward: 0.0
2026-05-19 20:30:13,737 gym INFO <4140.00> === STARTING STEP ===
2026-05-19 20:30:13,737 sats.satellite.Scanner-1 INFO <4140.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,738 sats.satellite.Scanner-1 INFO <4140.00> Scanner-1: setting timed terminal event at 4260.0
2026-05-19 20:30:13,745 sats.satellite.Scanner-1 INFO <4260.00> Scanner-1: timed termination at 4260.0 for action_charge
2026-05-19 20:30:13,745 data.base INFO <4260.00> Total reward: {}
2026-05-19 20:30:13,746 comm.communication INFO <4260.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,746 sats.satellite.Scanner-1 INFO <4260.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,748 gym INFO <4260.00> Step reward: 0.0
2026-05-19 20:30:13,749 gym INFO <4260.00> === STARTING STEP ===
2026-05-19 20:30:13,749 sats.satellite.Scanner-1 INFO <4260.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,750 sats.satellite.Scanner-1 INFO <4260.00> Scanner-1: setting timed terminal event at 4440.0
2026-05-19 20:30:13,760 sats.satellite.Scanner-1 INFO <4440.00> Scanner-1: timed termination at 4440.0 for action_nadir_scan
2026-05-19 20:30:13,761 data.base INFO <4440.00> Total reward: {'Scanner-1': 0.004526315789473684}
2026-05-19 20:30:13,761 comm.communication INFO <4440.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,761 sats.satellite.Scanner-1 INFO <4440.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,763 gym INFO <4440.00> Step reward: 0.004526315789473684
2026-05-19 20:30:13,763 gym INFO <4440.00> === STARTING STEP ===
2026-05-19 20:30:13,764 sats.satellite.Scanner-1 INFO <4440.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,764 sats.satellite.Scanner-1 INFO <4440.00> Scanner-1: setting timed terminal event at 4620.0
2026-05-19 20:30:13,774 sats.satellite.Scanner-1 INFO <4620.00> Scanner-1: timed termination at 4620.0 for action_nadir_scan
2026-05-19 20:30:13,775 data.base INFO <4620.00> Total reward: {'Scanner-1': 0.00631578947368421}
2026-05-19 20:30:13,775 comm.communication INFO <4620.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,776 sats.satellite.Scanner-1 INFO <4620.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,777 gym INFO <4620.00> Step reward: 0.00631578947368421
2026-05-19 20:30:13,778 gym INFO <4620.00> === STARTING STEP ===
2026-05-19 20:30:13,778 sats.satellite.Scanner-1 INFO <4620.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,778 sats.satellite.Scanner-1 INFO <4620.00> Scanner-1: setting timed terminal event at 4740.0
2026-05-19 20:30:13,786 sats.satellite.Scanner-1 INFO <4740.00> Scanner-1: timed termination at 4740.0 for action_charge
2026-05-19 20:30:13,786 data.base INFO <4740.00> Total reward: {}
2026-05-19 20:30:13,787 comm.communication INFO <4740.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,787 sats.satellite.Scanner-1 INFO <4740.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,789 gym INFO <4740.00> Step reward: 0.0
2026-05-19 20:30:13,789 gym INFO <4740.00> === STARTING STEP ===
2026-05-19 20:30:13,790 sats.satellite.Scanner-1 INFO <4740.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,790 sats.satellite.Scanner-1 INFO <4740.00> Scanner-1: setting timed terminal event at 4860.0
2026-05-19 20:30:13,797 sats.satellite.Scanner-1 INFO <4860.00> Scanner-1: timed termination at 4860.0 for action_charge
2026-05-19 20:30:13,798 data.base INFO <4860.00> Total reward: {}
2026-05-19 20:30:13,798 comm.communication INFO <4860.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,799 sats.satellite.Scanner-1 INFO <4860.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,801 gym INFO <4860.00> Step reward: 0.0
2026-05-19 20:30:13,801 gym INFO <4860.00> === STARTING STEP ===
2026-05-19 20:30:13,801 sats.satellite.Scanner-1 INFO <4860.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,802 sats.satellite.Scanner-1 INFO <4860.00> Scanner-1: setting timed terminal event at 4920.0
2026-05-19 20:30:13,806 sats.satellite.Scanner-1 INFO <4920.00> Scanner-1: timed termination at 4920.0 for action_desat
2026-05-19 20:30:13,807 data.base INFO <4920.00> Total reward: {}
2026-05-19 20:30:13,807 comm.communication INFO <4920.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,808 sats.satellite.Scanner-1 INFO <4920.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,809 gym INFO <4920.00> Step reward: 0.0
2026-05-19 20:30:13,810 gym INFO <4920.00> === STARTING STEP ===
2026-05-19 20:30:13,810 sats.satellite.Scanner-1 INFO <4920.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,811 sats.satellite.Scanner-1 INFO <4920.00> Scanner-1: setting timed terminal event at 4980.0
2026-05-19 20:30:13,815 sats.satellite.Scanner-1 INFO <4980.00> Scanner-1: timed termination at 4980.0 for action_desat
2026-05-19 20:30:13,816 data.base INFO <4980.00> Total reward: {}
2026-05-19 20:30:13,816 comm.communication INFO <4980.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,817 sats.satellite.Scanner-1 INFO <4980.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,818 gym INFO <4980.00> Step reward: 0.0
2026-05-19 20:30:13,819 gym INFO <4980.00> === STARTING STEP ===
2026-05-19 20:30:13,819 sats.satellite.Scanner-1 INFO <4980.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,820 sats.satellite.Scanner-1 INFO <4980.00> Scanner-1: setting timed terminal event at 5040.0
2026-05-19 20:30:13,824 sats.satellite.Scanner-1 INFO <5040.00> Scanner-1: timed termination at 5040.0 for action_downlink
2026-05-19 20:30:13,825 data.base INFO <5040.00> Total reward: {}
2026-05-19 20:30:13,825 comm.communication INFO <5040.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,826 sats.satellite.Scanner-1 INFO <5040.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,828 gym INFO <5040.00> Step reward: 0.0
2026-05-19 20:30:13,828 gym INFO <5040.00> === STARTING STEP ===
2026-05-19 20:30:13,829 sats.satellite.Scanner-1 INFO <5040.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,829 sats.satellite.Scanner-1 INFO <5040.00> Scanner-1: setting timed terminal event at 5100.0
2026-05-19 20:30:13,833 sats.satellite.Scanner-1 INFO <5100.00> Scanner-1: timed termination at 5100.0 for action_downlink
2026-05-19 20:30:13,834 data.base INFO <5100.00> Total reward: {}
2026-05-19 20:30:13,834 comm.communication INFO <5100.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,834 sats.satellite.Scanner-1 INFO <5100.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,836 gym INFO <5100.00> Step reward: 0.0
2026-05-19 20:30:13,837 gym INFO <5100.00> === STARTING STEP ===
2026-05-19 20:30:13,837 sats.satellite.Scanner-1 INFO <5100.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,838 sats.satellite.Scanner-1 INFO <5100.00> Scanner-1: setting timed terminal event at 5160.0
2026-05-19 20:30:13,842 sats.satellite.Scanner-1 INFO <5160.00> Scanner-1: timed termination at 5160.0 for action_downlink
2026-05-19 20:30:13,843 data.base INFO <5160.00> Total reward: {}
2026-05-19 20:30:13,843 comm.communication INFO <5160.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,843 sats.satellite.Scanner-1 INFO <5160.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,845 gym INFO <5160.00> Step reward: 0.0
2026-05-19 20:30:13,845 gym INFO <5160.00> === STARTING STEP ===
2026-05-19 20:30:13,846 sats.satellite.Scanner-1 INFO <5160.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,846 sats.satellite.Scanner-1 INFO <5160.00> Scanner-1: setting timed terminal event at 5340.0
2026-05-19 20:30:13,857 sats.satellite.Scanner-1 INFO <5340.00> Scanner-1: timed termination at 5340.0 for action_nadir_scan
2026-05-19 20:30:13,857 data.base INFO <5340.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-05-19 20:30:13,858 comm.communication INFO <5340.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,858 sats.satellite.Scanner-1 INFO <5340.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,860 gym INFO <5340.00> Step reward: 0.004912280701754385
2026-05-19 20:30:13,860 gym INFO <5340.00> === STARTING STEP ===
2026-05-19 20:30:13,861 sats.satellite.Scanner-1 INFO <5340.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,861 sats.satellite.Scanner-1 INFO <5340.00> Scanner-1: setting timed terminal event at 5400.0
2026-05-19 20:30:13,866 sats.satellite.Scanner-1 INFO <5400.00> Scanner-1: timed termination at 5400.0 for action_downlink
2026-05-19 20:30:13,866 data.base INFO <5400.00> Total reward: {}
2026-05-19 20:30:13,867 comm.communication INFO <5400.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,867 sats.satellite.Scanner-1 INFO <5400.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,869 gym INFO <5400.00> Step reward: 0.0
2026-05-19 20:30:13,869 gym INFO <5400.00> === STARTING STEP ===
2026-05-19 20:30:13,870 sats.satellite.Scanner-1 INFO <5400.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,870 sats.satellite.Scanner-1 INFO <5400.00> Scanner-1: setting timed terminal event at 5460.0
2026-05-19 20:30:13,874 sats.satellite.Scanner-1 INFO <5460.00> Scanner-1: timed termination at 5460.0 for action_downlink
2026-05-19 20:30:13,875 data.base INFO <5460.00> Total reward: {}
2026-05-19 20:30:13,875 comm.communication INFO <5460.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,876 sats.satellite.Scanner-1 INFO <5460.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,878 gym INFO <5460.00> Step reward: 0.0
2026-05-19 20:30:13,878 gym INFO <5460.00> === STARTING STEP ===
2026-05-19 20:30:13,879 sats.satellite.Scanner-1 INFO <5460.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,879 sats.satellite.Scanner-1 INFO <5460.00> Scanner-1: setting timed terminal event at 5580.0
2026-05-19 20:30:13,887 sats.satellite.Scanner-1 INFO <5580.00> Scanner-1: timed termination at 5580.0 for action_charge
2026-05-19 20:30:13,887 data.base INFO <5580.00> Total reward: {}
2026-05-19 20:30:13,888 comm.communication INFO <5580.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,888 sats.satellite.Scanner-1 INFO <5580.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,890 gym INFO <5580.00> Step reward: 0.0
2026-05-19 20:30:13,891 gym INFO <5580.00> === STARTING STEP ===
2026-05-19 20:30:13,891 sats.satellite.Scanner-1 INFO <5580.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,892 sats.satellite.Scanner-1 INFO <5580.00> Scanner-1: setting timed terminal event at 5700.0
2026-05-19 20:30:13,898 sats.satellite.Scanner-1 INFO <5700.00> Scanner-1: timed termination at 5700.0 for action_charge
2026-05-19 20:30:13,899 data.base INFO <5700.00> Total reward: {}
2026-05-19 20:30:13,899 comm.communication INFO <5700.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,900 sats.satellite.Scanner-1 INFO <5700.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,902 gym INFO <5700.00> Step reward: 0.0
2026-05-19 20:30:13,902 gym INFO <5700.00> === STARTING STEP ===
2026-05-19 20:30:13,903 sats.satellite.Scanner-1 INFO <5700.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,903 sats.satellite.Scanner-1 INFO <5700.00> Scanner-1: setting timed terminal event at 5760.0
2026-05-19 20:30:13,908 sats.satellite.Scanner-1 INFO <5760.00> Scanner-1: timed termination at 5760.0 for action_desat
2026-05-19 20:30:13,908 data.base INFO <5760.00> Total reward: {}
2026-05-19 20:30:13,909 comm.communication INFO <5760.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,909 sats.satellite.Scanner-1 INFO <5760.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,911 gym INFO <5760.00> Step reward: 0.0
2026-05-19 20:30:13,912 gym INFO <5760.00> === STARTING STEP ===
2026-05-19 20:30:13,912 sats.satellite.Scanner-1 INFO <5760.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,913 sats.satellite.Scanner-1 INFO <5760.00> Scanner-1: setting timed terminal event at 5820.0
2026-05-19 20:30:13,917 sats.satellite.Scanner-1 INFO <5820.00> Scanner-1: timed termination at 5820.0 for action_desat
2026-05-19 20:30:13,918 data.base INFO <5820.00> Total reward: {}
2026-05-19 20:30:13,918 comm.communication INFO <5820.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,918 sats.satellite.Scanner-1 INFO <5820.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,920 gym INFO <5820.00> Step reward: 0.0
2026-05-19 20:30:13,921 gym INFO <5820.00> === STARTING STEP ===
2026-05-19 20:30:13,921 sats.satellite.Scanner-1 INFO <5820.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,921 sats.satellite.Scanner-1 INFO <5820.00> Scanner-1: setting timed terminal event at 5880.0
2026-05-19 20:30:13,926 sats.satellite.Scanner-1 INFO <5880.00> Scanner-1: timed termination at 5880.0 for action_desat
2026-05-19 20:30:13,926 data.base INFO <5880.00> Total reward: {}
2026-05-19 20:30:13,927 comm.communication INFO <5880.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,927 sats.satellite.Scanner-1 INFO <5880.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,929 gym INFO <5880.00> Step reward: 0.0
2026-05-19 20:30:13,929 gym INFO <5880.00> === STARTING STEP ===
2026-05-19 20:30:13,930 sats.satellite.Scanner-1 INFO <5880.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,930 sats.satellite.Scanner-1 INFO <5880.00> Scanner-1: setting timed terminal event at 6060.0
2026-05-19 20:30:13,941 sats.satellite.Scanner-1 INFO <6060.00> Scanner-1: timed termination at 6060.0 for action_nadir_scan
2026-05-19 20:30:13,941 data.base INFO <6060.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-05-19 20:30:13,942 comm.communication INFO <6060.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,942 sats.satellite.Scanner-1 INFO <6060.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,944 gym INFO <6060.00> Step reward: 0.004912280701754385
2026-05-19 20:30:13,945 gym INFO <6060.00> === STARTING STEP ===
2026-05-19 20:30:13,946 sats.satellite.Scanner-1 INFO <6060.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:13,946 sats.satellite.Scanner-1 INFO <6060.00> Scanner-1: setting timed terminal event at 6120.0
2026-05-19 20:30:13,950 sats.satellite.Scanner-1 INFO <6120.00> Scanner-1: timed termination at 6120.0 for action_desat
2026-05-19 20:30:13,951 data.base INFO <6120.00> Total reward: {}
2026-05-19 20:30:13,951 comm.communication INFO <6120.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,952 sats.satellite.Scanner-1 INFO <6120.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,954 gym INFO <6120.00> Step reward: 0.0
2026-05-19 20:30:13,954 gym INFO <6120.00> === STARTING STEP ===
2026-05-19 20:30:13,954 sats.satellite.Scanner-1 INFO <6120.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:13,955 sats.satellite.Scanner-1 INFO <6120.00> Scanner-1: setting timed terminal event at 6180.0
2026-05-19 20:30:13,959 sats.satellite.Scanner-1 INFO <6180.00> Scanner-1: timed termination at 6180.0 for action_downlink
2026-05-19 20:30:13,960 data.base INFO <6180.00> Total reward: {}
2026-05-19 20:30:13,960 comm.communication INFO <6180.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,961 sats.satellite.Scanner-1 INFO <6180.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,962 gym INFO <6180.00> Step reward: 0.0
2026-05-19 20:30:13,962 gym INFO <6180.00> === STARTING STEP ===
2026-05-19 20:30:13,963 sats.satellite.Scanner-1 INFO <6180.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,963 sats.satellite.Scanner-1 INFO <6180.00> Scanner-1: setting timed terminal event at 6360.0
2026-05-19 20:30:13,974 sats.satellite.Scanner-1 INFO <6360.00> Scanner-1: timed termination at 6360.0 for action_nadir_scan
2026-05-19 20:30:13,975 data.base INFO <6360.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-05-19 20:30:13,975 comm.communication INFO <6360.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,976 sats.satellite.Scanner-1 INFO <6360.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,978 gym INFO <6360.00> Step reward: 0.004912280701754385
2026-05-19 20:30:13,978 gym INFO <6360.00> === STARTING STEP ===
2026-05-19 20:30:13,979 sats.satellite.Scanner-1 INFO <6360.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:13,979 sats.satellite.Scanner-1 INFO <6360.00> Scanner-1: setting timed terminal event at 6480.0
2026-05-19 20:30:13,987 sats.satellite.Scanner-1 INFO <6480.00> Scanner-1: timed termination at 6480.0 for action_charge
2026-05-19 20:30:13,987 data.base INFO <6480.00> Total reward: {}
2026-05-19 20:30:13,988 comm.communication INFO <6480.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:13,988 sats.satellite.Scanner-1 INFO <6480.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:13,990 gym INFO <6480.00> Step reward: 0.0
2026-05-19 20:30:13,990 gym INFO <6480.00> === STARTING STEP ===
2026-05-19 20:30:13,991 sats.satellite.Scanner-1 INFO <6480.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:13,991 sats.satellite.Scanner-1 INFO <6480.00> Scanner-1: setting timed terminal event at 6660.0
2026-05-19 20:30:14,002 sats.satellite.Scanner-1 INFO <6660.00> Scanner-1: timed termination at 6660.0 for action_nadir_scan
2026-05-19 20:30:14,003 data.base INFO <6660.00> Total reward: {'Scanner-1': 0.005614035087719298}
2026-05-19 20:30:14,003 comm.communication INFO <6660.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,003 sats.satellite.Scanner-1 INFO <6660.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,005 gym INFO <6660.00> Step reward: 0.005614035087719298
2026-05-19 20:30:14,005 gym INFO <6660.00> === STARTING STEP ===
2026-05-19 20:30:14,006 sats.satellite.Scanner-1 INFO <6660.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,006 sats.satellite.Scanner-1 INFO <6660.00> Scanner-1: setting timed terminal event at 6720.0
2026-05-19 20:30:14,011 sats.satellite.Scanner-1 INFO <6720.00> Scanner-1: timed termination at 6720.0 for action_desat
2026-05-19 20:30:14,011 data.base INFO <6720.00> Total reward: {}
2026-05-19 20:30:14,012 comm.communication INFO <6720.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,012 sats.satellite.Scanner-1 INFO <6720.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,014 gym INFO <6720.00> Step reward: 0.0
2026-05-19 20:30:14,014 gym INFO <6720.00> === STARTING STEP ===
2026-05-19 20:30:14,015 sats.satellite.Scanner-1 INFO <6720.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:14,015 sats.satellite.Scanner-1 INFO <6720.00> Scanner-1: setting timed terminal event at 6780.0
2026-05-19 20:30:14,020 sats.satellite.Scanner-1 INFO <6780.00> Scanner-1: timed termination at 6780.0 for action_downlink
2026-05-19 20:30:14,020 data.base INFO <6780.00> Total reward: {}
2026-05-19 20:30:14,021 comm.communication INFO <6780.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,021 sats.satellite.Scanner-1 INFO <6780.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,023 gym INFO <6780.00> Step reward: 0.0
2026-05-19 20:30:14,024 gym INFO <6780.00> === STARTING STEP ===
2026-05-19 20:30:14,024 sats.satellite.Scanner-1 INFO <6780.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:14,024 sats.satellite.Scanner-1 INFO <6780.00> Scanner-1: setting timed terminal event at 6900.0
2026-05-19 20:30:14,032 sats.satellite.Scanner-1 INFO <6900.00> Scanner-1: timed termination at 6900.0 for action_charge
2026-05-19 20:30:14,032 data.base INFO <6900.00> Total reward: {}
2026-05-19 20:30:14,033 comm.communication INFO <6900.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,033 sats.satellite.Scanner-1 INFO <6900.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,035 gym INFO <6900.00> Step reward: 0.0
2026-05-19 20:30:14,035 gym INFO <6900.00> === STARTING STEP ===
2026-05-19 20:30:14,036 sats.satellite.Scanner-1 INFO <6900.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:14,036 sats.satellite.Scanner-1 INFO <6900.00> Scanner-1: setting timed terminal event at 7020.0
2026-05-19 20:30:14,044 sats.satellite.Scanner-1 INFO <7020.00> Scanner-1: timed termination at 7020.0 for action_charge
2026-05-19 20:30:14,044 data.base INFO <7020.00> Total reward: {}
2026-05-19 20:30:14,044 comm.communication INFO <7020.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,045 sats.satellite.Scanner-1 INFO <7020.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,046 gym INFO <7020.00> Step reward: 0.0
2026-05-19 20:30:14,047 gym INFO <7020.00> === STARTING STEP ===
2026-05-19 20:30:14,047 sats.satellite.Scanner-1 INFO <7020.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,048 sats.satellite.Scanner-1 INFO <7020.00> Scanner-1: setting timed terminal event at 7080.0
2026-05-19 20:30:14,052 sats.satellite.Scanner-1 INFO <7080.00> Scanner-1: timed termination at 7080.0 for action_desat
2026-05-19 20:30:14,053 data.base INFO <7080.00> Total reward: {}
2026-05-19 20:30:14,053 comm.communication INFO <7080.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,054 sats.satellite.Scanner-1 INFO <7080.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,055 gym INFO <7080.00> Step reward: 0.0
2026-05-19 20:30:14,056 gym INFO <7080.00> === STARTING STEP ===
2026-05-19 20:30:14,057 sats.satellite.Scanner-1 INFO <7080.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:14,058 sats.satellite.Scanner-1 INFO <7080.00> Scanner-1: setting timed terminal event at 7140.0
2026-05-19 20:30:14,062 sats.satellite.Scanner-1 INFO <7140.00> Scanner-1: timed termination at 7140.0 for action_downlink
2026-05-19 20:30:14,062 data.base INFO <7140.00> Total reward: {}
2026-05-19 20:30:14,063 comm.communication INFO <7140.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,063 sats.satellite.Scanner-1 INFO <7140.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,065 gym INFO <7140.00> Step reward: 0.0
2026-05-19 20:30:14,065 gym INFO <7140.00> === STARTING STEP ===
2026-05-19 20:30:14,066 sats.satellite.Scanner-1 INFO <7140.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,066 sats.satellite.Scanner-1 INFO <7140.00> Scanner-1: setting timed terminal event at 7200.0
2026-05-19 20:30:14,071 sats.satellite.Scanner-1 INFO <7200.00> Scanner-1: timed termination at 7200.0 for action_desat
2026-05-19 20:30:14,071 data.base INFO <7200.00> Total reward: {}
2026-05-19 20:30:14,072 comm.communication INFO <7200.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,072 sats.satellite.Scanner-1 INFO <7200.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,074 gym INFO <7200.00> Step reward: 0.0
2026-05-19 20:30:14,075 gym INFO <7200.00> === STARTING STEP ===
2026-05-19 20:30:14,075 sats.satellite.Scanner-1 INFO <7200.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,076 sats.satellite.Scanner-1 INFO <7200.00> Scanner-1: setting timed terminal event at 7260.0
2026-05-19 20:30:14,080 sats.satellite.Scanner-1 INFO <7260.00> Scanner-1: timed termination at 7260.0 for action_desat
2026-05-19 20:30:14,081 data.base INFO <7260.00> Total reward: {}
2026-05-19 20:30:14,081 comm.communication INFO <7260.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,081 sats.satellite.Scanner-1 INFO <7260.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,083 gym INFO <7260.00> Step reward: 0.0
2026-05-19 20:30:14,084 gym INFO <7260.00> === STARTING STEP ===
2026-05-19 20:30:14,084 sats.satellite.Scanner-1 INFO <7260.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:14,085 sats.satellite.Scanner-1 INFO <7260.00> Scanner-1: setting timed terminal event at 7440.0
2026-05-19 20:30:14,095 sats.satellite.Scanner-1 INFO <7440.00> Scanner-1: timed termination at 7440.0 for action_nadir_scan
2026-05-19 20:30:14,096 data.base INFO <7440.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-05-19 20:30:14,096 comm.communication INFO <7440.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,096 sats.satellite.Scanner-1 INFO <7440.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,098 gym INFO <7440.00> Step reward: 0.004912280701754385
2026-05-19 20:30:14,099 gym INFO <7440.00> === STARTING STEP ===
2026-05-19 20:30:14,099 sats.satellite.Scanner-1 INFO <7440.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:14,099 sats.satellite.Scanner-1 INFO <7440.00> Scanner-1: setting timed terminal event at 7560.0
2026-05-19 20:30:14,107 sats.satellite.Scanner-1 INFO <7560.00> Scanner-1: timed termination at 7560.0 for action_charge
2026-05-19 20:30:14,108 data.base INFO <7560.00> Total reward: {}
2026-05-19 20:30:14,108 comm.communication INFO <7560.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,109 sats.satellite.Scanner-1 INFO <7560.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,111 gym INFO <7560.00> Step reward: 0.0
2026-05-19 20:30:14,111 gym INFO <7560.00> === STARTING STEP ===
2026-05-19 20:30:14,111 sats.satellite.Scanner-1 INFO <7560.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,112 sats.satellite.Scanner-1 INFO <7560.00> Scanner-1: setting timed terminal event at 7620.0
2026-05-19 20:30:14,116 sats.satellite.Scanner-1 INFO <7620.00> Scanner-1: timed termination at 7620.0 for action_desat
2026-05-19 20:30:14,117 data.base INFO <7620.00> Total reward: {}
2026-05-19 20:30:14,117 comm.communication INFO <7620.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,118 sats.satellite.Scanner-1 INFO <7620.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,119 gym INFO <7620.00> Step reward: 0.0
2026-05-19 20:30:14,120 gym INFO <7620.00> === STARTING STEP ===
2026-05-19 20:30:14,120 sats.satellite.Scanner-1 INFO <7620.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:14,121 sats.satellite.Scanner-1 INFO <7620.00> Scanner-1: setting timed terminal event at 7740.0
2026-05-19 20:30:14,128 sats.satellite.Scanner-1 INFO <7740.00> Scanner-1: timed termination at 7740.0 for action_charge
2026-05-19 20:30:14,129 data.base INFO <7740.00> Total reward: {}
2026-05-19 20:30:14,129 comm.communication INFO <7740.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,129 sats.satellite.Scanner-1 INFO <7740.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,131 gym INFO <7740.00> Step reward: 0.0
2026-05-19 20:30:14,132 gym INFO <7740.00> === STARTING STEP ===
2026-05-19 20:30:14,132 sats.satellite.Scanner-1 INFO <7740.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,132 sats.satellite.Scanner-1 INFO <7740.00> Scanner-1: setting timed terminal event at 7800.0
2026-05-19 20:30:14,137 sats.satellite.Scanner-1 INFO <7800.00> Scanner-1: timed termination at 7800.0 for action_desat
2026-05-19 20:30:14,138 data.base INFO <7800.00> Total reward: {}
2026-05-19 20:30:14,138 comm.communication INFO <7800.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,139 sats.satellite.Scanner-1 INFO <7800.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,141 gym INFO <7800.00> Step reward: 0.0
2026-05-19 20:30:14,141 gym INFO <7800.00> === STARTING STEP ===
2026-05-19 20:30:14,142 sats.satellite.Scanner-1 INFO <7800.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:14,142 sats.satellite.Scanner-1 INFO <7800.00> Scanner-1: setting timed terminal event at 7860.0
2026-05-19 20:30:14,146 sats.satellite.Scanner-1 INFO <7860.00> Scanner-1: timed termination at 7860.0 for action_downlink
2026-05-19 20:30:14,147 data.base INFO <7860.00> Total reward: {}
2026-05-19 20:30:14,147 comm.communication INFO <7860.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,148 sats.satellite.Scanner-1 INFO <7860.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,150 gym INFO <7860.00> Step reward: 0.0
2026-05-19 20:30:14,150 gym INFO <7860.00> === STARTING STEP ===
2026-05-19 20:30:14,151 sats.satellite.Scanner-1 INFO <7860.00> Scanner-1: action_nadir_scan tasked for 180.0 seconds
2026-05-19 20:30:14,151 sats.satellite.Scanner-1 INFO <7860.00> Scanner-1: setting timed terminal event at 8040.0
2026-05-19 20:30:14,162 sats.satellite.Scanner-1 INFO <8040.00> Scanner-1: timed termination at 8040.0 for action_nadir_scan
2026-05-19 20:30:14,162 data.base INFO <8040.00> Total reward: {'Scanner-1': 0.004912280701754385}
2026-05-19 20:30:14,163 comm.communication INFO <8040.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,163 sats.satellite.Scanner-1 INFO <8040.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,165 gym INFO <8040.00> Step reward: 0.004912280701754385
2026-05-19 20:30:14,166 gym INFO <8040.00> === STARTING STEP ===
2026-05-19 20:30:14,166 sats.satellite.Scanner-1 INFO <8040.00> Scanner-1: action_charge tasked for 120.0 seconds
2026-05-19 20:30:14,167 sats.satellite.Scanner-1 INFO <8040.00> Scanner-1: setting timed terminal event at 8160.0
2026-05-19 20:30:14,174 sats.satellite.Scanner-1 INFO <8160.00> Scanner-1: timed termination at 8160.0 for action_charge
2026-05-19 20:30:14,175 data.base INFO <8160.00> Total reward: {}
2026-05-19 20:30:14,175 comm.communication INFO <8160.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,176 sats.satellite.Scanner-1 INFO <8160.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,178 gym INFO <8160.00> Step reward: 0.0
2026-05-19 20:30:14,178 gym INFO <8160.00> === STARTING STEP ===
2026-05-19 20:30:14,179 sats.satellite.Scanner-1 INFO <8160.00> Scanner-1: action_downlink tasked for 60.0 seconds
2026-05-19 20:30:14,179 sats.satellite.Scanner-1 INFO <8160.00> Scanner-1: setting timed terminal event at 8220.0
2026-05-19 20:30:14,183 sats.satellite.Scanner-1 INFO <8220.00> Scanner-1: timed termination at 8220.0 for action_downlink
2026-05-19 20:30:14,184 data.base INFO <8220.00> Total reward: {}
2026-05-19 20:30:14,184 comm.communication INFO <8220.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,185 sats.satellite.Scanner-1 INFO <8220.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,187 gym INFO <8220.00> Step reward: 0.0
2026-05-19 20:30:14,187 gym INFO <8220.00> === STARTING STEP ===
2026-05-19 20:30:14,188 sats.satellite.Scanner-1 INFO <8220.00> Scanner-1: action_desat tasked for 60.0 seconds
2026-05-19 20:30:14,188 sats.satellite.Scanner-1 INFO <8220.00> Scanner-1: setting timed terminal event at 8280.0
2026-05-19 20:30:14,192 sats.satellite.Scanner-1 INFO <8280.00> Scanner-1: timed termination at 8280.0 for action_desat
2026-05-19 20:30:14,193 data.base INFO <8280.00> Total reward: {}
2026-05-19 20:30:14,193 comm.communication INFO <8280.00> Optimizing data communication between all pairs of satellites
2026-05-19 20:30:14,193 sats.satellite.Scanner-1 INFO <8280.00> Scanner-1: Satellite Scanner-1 requires retasking
2026-05-19 20:30:14,195 sats.satellite.Scanner-1 WARNING <8280.00> Scanner-1: failed battery_valid check
2026-05-19 20:30:14,196 gym INFO <8280.00> Step reward: -1.0
2026-05-19 20:30:14,196 gym INFO <8280.00> Episode terminated: True
2026-05-19 20:30:14,196 gym INFO <8280.00> Episode truncated: False