{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Cloud Environment with Re-imaging\n", "This tutorial demonstrates the configuration and use of a BSK-RL environment considering cloud coverage and re-imaging capabilities. Two reward functions are presented: a single-picture binary case (where targets are deemed occluded by clouds or not and no re-imaging is allowed) and a re-imaging case where the problem is formulated in terms of the targets' probability of being successfully observed. Still, the satellite cannot observe the true cloud coverage of each target, only its forecast. The satellite has to image targets while keeping a positive battery level. This example script is part of an upcoming publication.\n", "\n", "## Loading Modules" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from bsk_rl import ConstellationTasking\n", "import numpy as np\n", "from typing import Optional, Callable, Union\n", "\n", "from Basilisk.architecture import bskLogging\n", "from Basilisk.utilities import orbitalMotion\n", "from bsk_rl import act, obs, sats\n", "from bsk_rl.sim import dyn, fsw, world\n", "from bsk_rl.scene.targets import UniformTargets\n", "from bsk_rl.data.base import Data, DataStore, GlobalReward\n", "from bsk_rl.data.unique_image_data import (\n", " UniqueImageData,\n", " UniqueImageStore,\n", " UniqueImageReward,\n", ")\n", "\n", "bskLogging.setDefaultLogLevel(bskLogging.BSK_WARNING)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making a Scenario with Cloud Covered Targets\n", "\n", "To account for clouds in the simulation process, we can associate a cloud coverage value to each target that represents the percentage of cloud coverage over that area. Cloud coverage can be randomly generated or derived from real data. Here, we have an example on how to use a stochastic cloud model using UniformTargets as a base and attach the following information to each target:\n", "\n", "* `cloud_cover_true` represents the true cloud coverage. Information from external sources, such as historical cloud data, can be used here based on each target's position.\n", "\n", "* `cloud_cover_forecast` represents the cloud coverage forecast. Forecast from external sources can be plugged in here.\n", "\n", "* `cloud_cover_sigma` represents the standard deviation of the cloud coverage forecast.\n", "\n", "* `belief` represents the probability that the target was successfully observed.\n", "\n", "* `prev_obs` time at which the last picture of the target was taken." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "class CloudTargets(UniformTargets):\n", " mu_data = 0.6740208166434426 # Average global cloud coverage\n", "\n", " def __init__(\n", " self,\n", " n_targets: Union[int, tuple[int, int]],\n", " priority_distribution: Optional[Callable] = None,\n", " radius: float = orbitalMotion.REQ_EARTH * 1e3,\n", " sigma_levels: tuple[float, float] = (0.01, 0.05),\n", " reward_thresholds: Union[float, tuple[float, float]] = 0.95,\n", " belief_init: tuple[float, float] = (0.0, 0.94),\n", " prev_obs_init: tuple[float, float] = (0.0, 5700.0),\n", " ) -> None:\n", " super().__init__(n_targets, priority_distribution, radius)\n", " self.reward_thresholds = reward_thresholds\n", " self.sigma_levels = sigma_levels\n", " self.belief_init = belief_init\n", " self.prev_obs_init = prev_obs_init\n", "\n", " def regenerate_targets(self) -> None:\n", " super().regenerate_targets()\n", " for target in self.targets:\n", "\n", " # Initialize true cloud coverage\n", " cloud_cover_true = np.random.uniform(\n", " 0.0, self.mu_data * 2\n", " ) # Instead, true cloud coverage can be obtained by historical data based on the target's position\n", " cloud_cover_true = np.clip(cloud_cover_true, 0.0, 1.0)\n", " target.cloud_cover_true = cloud_cover_true\n", "\n", " # Initialize cloud coverage forecast\n", " target.cloud_cover_sigma = np.random.uniform(\n", " self.sigma_levels[0], self.sigma_levels[1]\n", " )\n", " cloud_cover_forecast = np.random.normal(\n", " target.cloud_cover_true, target.cloud_cover_sigma\n", " )\n", " target.cloud_cover_forecast = np.clip(cloud_cover_forecast, 0.0, 1.0)\n", "\n", " # Set reward threshold\n", " if isinstance(self.reward_thresholds, float):\n", " target.reward_threshold = self.reward_thresholds\n", " else:\n", " target.reward_threshold = np.random.uniform(\n", " self.reward_thresholds[0], self.reward_thresholds[1]\n", " )\n", "\n", " # Initialize beliefs and previous observations\n", " b_S1 = np.random.uniform(self.belief_init[0], self.belief_init[1])\n", " b_S0 = 1 - b_S1\n", " target.belief = np.array([b_S0, b_S1])\n", " target.prev_obs = -np.random.uniform(\n", " self.prev_obs_init[0], self.prev_obs_init[0]\n", " )\n", " target.belief_update_var = 0.0\n", "\n", "\n", "# Define the randomization interval for the number of targets\n", "n_targets = (1000, 10000)\n", "scenario = CloudTargets(n_targets=n_targets)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making a Rewarder Considering Cloud Coverage for the Single-picture Case\n", "\n", "When considering targets potentially covered by clouds, we can use a binary reward model where the reward is proportional to the target priority if the target's cloud coverage is below its `reward_threshold` (how much cloud coverage is acceptable). Therefore, we create a modified rewarder `CloudImageBinaryRewarder`; it has similar settings as the [UniqueImageReward](../api_reference/data/index.rst) class, but `cloud_covered` and `cloud_free` information is added. Additionally, the `calculate_reward` function is modified for the binary reward model. \n", "\n", "For this case, the reward function is given by\n", "\n", "$$\n", "R = \\begin{cases}\n", "\\rho_i & \\text{if } c_{p_i} \\leq c_{\\text{thr}_i} \\\\\n", "0 & \\text{otherwise.}\n", "\\end{cases}\n", "$$\n", "\n", "where $\\rho_i$ is priority, $c_{p_i}$ is the true cloud coverage, and $c_{\\text{thr}_i}$ is the `reward_threshold` for target $i$. For a case where the reward is linearly proportional to the cloud coverage, see [Cloud Environment](../examples/cloud_environment.rst)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from typing import TYPE_CHECKING\n", "\n", "if TYPE_CHECKING: # pragma: no cover\n", " from bsk_rl.scene.targets import (\n", " Target,\n", " )\n", "\n", "\n", "class CloudImageBinaryData(UniqueImageData):\n", " \"\"\"DataType for unique images of targets.\"\"\"\n", "\n", " def __init__(\n", " self,\n", " imaged: Optional[list[\"Target\"]] = None,\n", " duplicates: int = 0,\n", " known: Optional[list[\"Target\"]] = None,\n", " cloud_covered: Optional[list[\"Target\"]] = None,\n", " cloud_free: Optional[list[\"Target\"]] = None,\n", " ) -> None:\n", " \"\"\"Construct unit of data to record unique images.\n", "\n", " Keeps track of ``imaged`` targets, a count of ``duplicates`` (i.e. images that\n", " were not rewarded due to the target already having been imaged), and all\n", " ``known`` targets in the environment. It also keeps track of which targets are considered\n", " ``cloud_covered`` and ``cloud_free`` based on the specified threshold.\n", "\n", " Args:\n", " imaged: List of targets that are known to be imaged.\n", " duplicates: Count of target imaging duplication.\n", " known: List of targets that are known to exist (imaged and unimaged).\n", " cloud_covered: List of imaged targets that are known to be cloud covered.\n", " cloud_free: List of imaged targets that are known to be cloud free.\n", " \"\"\"\n", " super().__init__(imaged=imaged, duplicates=duplicates, known=known)\n", " if cloud_covered is None:\n", " cloud_covered = []\n", " if cloud_free is None:\n", " cloud_free = []\n", " self.cloud_covered = list(set(cloud_covered))\n", " self.cloud_free = list(set(cloud_free))\n", "\n", " def __add__(self, other: \"CloudImageBinaryData\") -> \"CloudImageBinaryData\":\n", " \"\"\"Combine two units of data.\n", "\n", " Args:\n", " other: Another unit of data to combine with this one.\n", "\n", " Returns:\n", " Combined unit of data.\n", " \"\"\"\n", "\n", " imaged = list(set(self.imaged + other.imaged))\n", " duplicates = (\n", " self.duplicates\n", " + other.duplicates\n", " + len(self.imaged)\n", " + len(other.imaged)\n", " - len(imaged)\n", " )\n", " known = list(set(self.known + other.known))\n", " cloud_covered = list(set(self.cloud_covered + other.cloud_covered))\n", " cloud_free = list(set(self.cloud_free + other.cloud_free))\n", "\n", " return self.__class__(\n", " imaged=imaged,\n", " duplicates=duplicates,\n", " known=known,\n", " cloud_covered=cloud_covered,\n", " cloud_free=cloud_free,\n", " )\n", "\n", "\n", "class CloudImageBinaryDataStore(UniqueImageStore):\n", " \"\"\"DataStore for unique images of targets.\"\"\"\n", "\n", " data_type = CloudImageBinaryData\n", "\n", " def compare_log_states(\n", " self, old_state: np.ndarray, new_state: np.ndarray\n", " ) -> CloudImageBinaryData:\n", " \"\"\"Check for an increase in logged data to identify new images.\n", "\n", " Args:\n", " old_state: older storedData from satellite storage unit\n", " new_state: newer storedData from satellite storage unit\n", "\n", " Returns:\n", " list: Targets imaged at new_state that were unimaged at old_state\n", " \"\"\"\n", " update_idx = np.where(new_state - old_state > 0)[0]\n", " imaged = []\n", " for idx in update_idx:\n", " message = self.satellite.dynamics.storageUnit.storageUnitDataOutMsg\n", " target_id = message.read().storedDataName[int(idx)]\n", " imaged.append(\n", " [target for target in self.data.known if target.id == target_id][0]\n", " )\n", "\n", " cloud_covered = []\n", " cloud_free = []\n", " for target in imaged:\n", " cloud_coverage = target.cloud_cover_true\n", " if cloud_coverage > target.reward_threshold:\n", " cloud_covered.append(target)\n", " else:\n", " cloud_free.append(target)\n", "\n", " return CloudImageBinaryData(\n", " imaged=imaged, cloud_covered=cloud_covered, cloud_free=cloud_free\n", " )\n", "\n", "\n", "class CloudImageBinaryRewarder(UniqueImageReward):\n", " \"\"\"DataManager for rewarding unique images.\"\"\"\n", "\n", " datastore_type = CloudImageBinaryDataStore\n", "\n", " def calculate_reward(\n", " self, new_data_dict: dict[str, CloudImageBinaryData]\n", " ) -> dict[str, float]:\n", " \"\"\"Reward new each unique image once using self.reward_fn().\n", "\n", " Args:\n", " new_data_dict: Record of new images for each satellite\n", "\n", " Returns:\n", " reward: Cumulative reward across satellites for one step\n", " \"\"\"\n", " reward = {}\n", "\n", " for sat_id, new_data in new_data_dict.items():\n", " reward[sat_id] = 0.0\n", " for target in new_data.cloud_free:\n", " reward[sat_id] += self.reward_fn(target.priority)\n", "\n", " for new_data in new_data_dict.values():\n", " self.data += new_data\n", " return reward\n", "\n", "\n", "# Define the reward function as a function of the priority of the target and the cloud cover\n", "def reward_function_binary(priority):\n", " return priority\n", "\n", "\n", "# Uncomment this line and comment the reward in the cell below to use the binary reward function\n", "# rewarder = CloudImageBinaryRewarder(reward_fn=reward_function_binary)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Making a Rewarder Considering Cloud Coverage for the Re-imaging Case\n", "\n", "If the target is deemed occluded by clouds, it won't be tasked again in the single-picture case. However, the problem can be formulated in terms of the probability of observing the target ($\\text{P}(S=1)$, represented by the variable `belief` in the code) given the number of pictures and time difference between pictures ($\\delta t_i$). Thus, a new rewarder named `CloudImageProbabilityRewarder` is created to accommodate this new formulation, as well as a new reward function. \n", "\n", "The reward function accounts for the desired success probability threshold for each target ($\\theta_{\\text{thr}_i}$, represented by `reward_threshold` in the code) and has a tunable parameter $\\alpha\\in[0,1]$:\n", "\n", "$$\n", "R = \\begin{cases}\n", "\\rho_i\\alpha_i\\Delta \\text{P}(S=1) + \\rho_i(1 - \\alpha) & \\text{ if } \\text{P}_i(S=1) \\geq \\theta_{\\text{thr}_i} \\\\\n", "\\rho_i\\alpha_i\\Delta \\text{P}(S=1) & \\text{ otherwise.}\n", "\\end{cases}\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "class CloudImageProbabilityData(Data):\n", " \"\"\"DataType for unique images of targets.\"\"\"\n", "\n", " def __init__(\n", " self,\n", " imaged: Optional[list[\"Target\"]] = None,\n", " imaged_complete: Optional[list[\"Target\"]] = None,\n", " list_belief_update_var: Optional[list[float]] = None,\n", " known: Optional[list[\"Target\"]] = None,\n", " ) -> None:\n", " \"\"\"Construct unit of data to record unique images.\n", "\n", " Keeps track of ``imaged`` targets and completely imaged targets (those with a success probability\n", " higher than the ``reward_threshold``).\n", "\n", " Args:\n", " imaged: List of targets that are known to be imaged.\n", " imaged_complete: List of targets that are known to be completely imaged (P(S=1) >= reward_threshold).\n", " list_belief_update_var: List of belief update variations for each target after each picture.\n", " known: List of targets that are known to exist (imaged and not imaged)\n", " \"\"\"\n", " if imaged is None:\n", " imaged = []\n", " if imaged_complete is None:\n", " imaged_complete = []\n", " if list_belief_update_var is None:\n", " list_belief_update_var = []\n", " if known is None:\n", " known = []\n", " self.known = list(set(known))\n", "\n", " self.imaged = list(imaged)\n", " self.imaged_complete = list(set(imaged_complete))\n", " self.list_belief_update_var = list(list_belief_update_var)\n", "\n", " def __add__(\n", " self, other: \"CloudImageProbabilityData\"\n", " ) -> \"CloudImageProbabilityData\":\n", " \"\"\"Combine two units of data.\n", "\n", " Args:\n", " other: Another unit of data to combine with this one.\n", "\n", " Returns:\n", " Combined unit of data.\n", " \"\"\"\n", "\n", " imaged = list(self.imaged + other.imaged)\n", " imaged_complete = list(set(self.imaged_complete + other.imaged_complete))\n", " list_belief_update_var = list(\n", " self.list_belief_update_var + other.list_belief_update_var\n", " )\n", "\n", " known = list(set(self.known + other.known))\n", " return self.__class__(\n", " imaged=imaged,\n", " imaged_complete=imaged_complete,\n", " list_belief_update_var=list_belief_update_var,\n", " known=known,\n", " )\n", "\n", "\n", "class CloudImageProbabilityDataStore(DataStore):\n", " \"\"\"DataStore for unique images of targets.\"\"\"\n", "\n", " data_type = CloudImageProbabilityData\n", "\n", " def __init__(self, *args, **kwargs) -> None:\n", " \"\"\"DataStore for unique images.\n", "\n", " Detects new images by watching for an increase in data in each target's corresponding\n", " buffer.\n", " \"\"\"\n", " super().__init__(*args, **kwargs)\n", "\n", " def get_log_state(self) -> np.ndarray:\n", " \"\"\"Log the instantaneous storage unit state at the end of each step.\n", "\n", " Returns:\n", " array: storedData from satellite storage unit\n", " \"\"\"\n", " return np.array(\n", " self.satellite.dynamics.storageUnit.storageUnitDataOutMsg.read().storedData\n", " )\n", "\n", " def compare_log_states(\n", " self, old_state: np.ndarray, new_state: np.ndarray\n", " ) -> CloudImageProbabilityData:\n", " \"\"\"Check for an increase in logged data to identify new images.\n", "\n", " This method also performs the belief update (new probability of success) for each target\n", " based on the cloud coverage forecast and the time difference between the current time and\n", " the previous observation time. It also keeps track of the variation in the belief update.\n", "\n", " Args:\n", " old_state: older storedData from satellite storage unit\n", " new_state: newer storedData from satellite storage unit\n", "\n", " Returns:\n", " list: Targets imaged at new_state that were unimaged at old_state\n", " \"\"\"\n", " update_idx = np.where(new_state - old_state > 0)[0]\n", " imaged = []\n", " for idx in update_idx:\n", " message = self.satellite.dynamics.storageUnit.storageUnitDataOutMsg\n", " target_id = message.read().storedDataName[int(idx)]\n", " imaged.append(\n", " [target for target in self.data.known if target.id == target_id][0]\n", " )\n", "\n", " list_imaged_complete = []\n", " list_belief_update_var = []\n", "\n", " current_sim_time = self.satellite.simulator.sim_time\n", " belief_update_func = self.satellite.belief_update_func\n", "\n", " for target in imaged:\n", " target_prev_obs = (\n", " target.prev_obs\n", " ) # Time at which the target was previously observed\n", " target_time_diff = (\n", " current_sim_time - target_prev_obs\n", " ) # Time difference between the current time and the previous observation time\n", " target_belief = (\n", " target.belief\n", " ) # Belief of the target before the current picture\n", "\n", " target_cloud_cover_forecast = target.cloud_cover_forecast\n", " updated_belief = belief_update_func(\n", " target_belief, target_cloud_cover_forecast, target_time_diff\n", " )\n", "\n", " target.belief = updated_belief # Update the belief of the target\n", " target.belief_update_var = updated_belief[1] - target_belief[1]\n", " target.prev_obs = current_sim_time # Update the previous observation time\n", "\n", " if updated_belief[1] > target.reward_threshold:\n", " list_imaged_complete.append(target)\n", " list_belief_update_var.append(target.belief_update_var)\n", "\n", " return CloudImageProbabilityData(\n", " imaged=imaged,\n", " imaged_complete=list_imaged_complete,\n", " list_belief_update_var=list_belief_update_var,\n", " )\n", "\n", "\n", "class CloudImageProbabilityRewarder(GlobalReward):\n", "\n", " datastore_type = CloudImageProbabilityDataStore\n", "\n", " def __init__(\n", " self,\n", " reward_fn: Callable,\n", " alpha: float = 0.5,\n", " ) -> None:\n", " \"\"\"\n", "\n", " Modifies the constructor to include the alpha parameter to tune the reward function and\n", " the reward function.\n", " Args:\n", " reward_fn: Reward as function of priority, targets belief, and alpha.\n", " \"\"\"\n", " super().__init__()\n", " self.reward_fn = reward_fn\n", " self.alpha = alpha\n", "\n", " def initial_data(self, satellite: \"sats.Satellite\") -> \"UniqueImageData\":\n", " \"\"\"Furnish data to the scenario.\n", "\n", " Currently, it is assumed that all targets are known a priori, so the initial data\n", " given to the data store is the list of all targets.\n", " \"\"\"\n", " return self.data_type(known=self.scenario.targets)\n", "\n", " def calculate_reward(\n", " self, new_data_dict: dict[str, CloudImageProbabilityData]\n", " ) -> dict[str, float]:\n", " \"\"\"Reward new each unique image once using self.reward_fn().\n", "\n", " Args:\n", " new_data_dict: Record of new images for each satellite\n", "\n", " Returns:\n", " reward: Cumulative reward across satellites for one step\n", " \"\"\"\n", " reward = {}\n", "\n", " for sat_id, new_data in new_data_dict.items():\n", " reward[sat_id] = 0.0\n", " for target, belief_variation in zip(\n", " new_data.imaged, new_data.list_belief_update_var\n", " ):\n", " reward[sat_id] += self.reward_fn(\n", " target.priority, belief_variation, self.alpha, reach_threshold=False\n", " )\n", " for target in new_data.imaged_complete:\n", " reward[sat_id] += self.reward_fn(\n", " target.priority, None, self.alpha, reach_threshold=True\n", " )\n", "\n", " return reward\n", "\n", "\n", "# Define the reward function as a function of the priority of the target, the cloud cover, and the number of times the target has been imaged\n", "def reward_function_probability(\n", " priority: float, belief_variation: float, alpha: float, reach_threshold: bool\n", ") -> float:\n", " \"\"\"\n", "\n", " Rewards based on the priority of the target, the belief variation, and the alpha parameter.\n", "\n", " Args:\n", " priority: Priority of the target.\n", " belief_variation: Variation in the belief of the target after the picture.\n", " alpha: Tuning parameter between 0 and 1.\n", " reach_threshold: Boolean indicating whether the target has reached the reward threshold.\n", "\n", " Returns:\n", " float: Reward for the target.\n", " \"\"\"\n", " if reach_threshold:\n", " return priority * (1 - alpha)\n", " else:\n", " return priority * belief_variation * alpha\n", "\n", "\n", "rewarder = CloudImageProbabilityRewarder(\n", " reward_fn=reward_function_probability, alpha=1.0\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`CloudImageProbabilityDataStore` requires a function `belief_update_func` that returns the updated success probability for target $i$ ($\\text{P}^{(k+1)}_i(S=1)$) given its current success probability ($\\text{P}^{(k)}_i(S=1)$), cloud coverage forecast ($c_{f_i}$), and the time different between the current and previous image ($\\delta t_i$).\n", "\n", "The update in the success probability is given by:\n", "\n", "$$\n", "\\text{P}^{(k+1)}(S=1) = 1 - \\text{P}^{(k)}(S=1)\\bar{c}_{f_i}\n", "$$\n", "\n", "To penalize two consecutive pictures without enough elapsed time (and not enough shift in clouds' position), a new cloud-free probability variable $g_{f_i}$ is introduced such that\n", "\n", "$$\n", "g^{(k)}_{f_i} = (1-c^{(k)}_{f_i})\\beta(\\delta t_i)\n", "$$\n", "\n", "where $\\beta$ is given by a sigmoid\n", "\n", "$$\n", "\\beta(\\delta t) = \\frac{1}{\\eta_3+e^{-\\eta_1(\\frac{\\delta t}{\\tau}-\\eta_2)}}\n", "$$\n", "\n", "and\n", "\n", "$$\n", "\\bar{c}_{f_i} = 1 - g_{f_i}^{(k)}\n", "$$\n", "\n", "leading to:\n", "\n", "$$\n", "\\text{P}^{(k+1)}(S=1) = \\text{P}^{(k)}(S=1) + (1-\\text{P}^{(k)}(S=1))(1-c^{(k)}_{f_i})\\beta(\\delta t_i)\n", "$$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def time_variation(\n", " delta_t: float, t_const: float, k_1: float = 2.5, k_2: float = 2.5, k_3: float = 1.0\n", ") -> float:\n", " \"\"\"\n", " Time variation function based on sigmoid function.\n", "\n", " Args:\n", " delta_t (float): Time difference between the current time and the previous observation time.\n", " t_const (float): Time constant for the sigmoid function.\n", " k_1 (float): Sigmoid function parameter.\n", " k_2 (float): Sigmoid function parameter.\n", " k_3 (float): Sigmoid function parameter.\n", "\n", " Returns:\n", " float: Time variation value.\n", " \"\"\"\n", " if delta_t <= 0:\n", " return 0\n", " else:\n", " return 1 / (k_3 + np.exp(-k_1 * (delta_t / t_const - k_2)))\n", "\n", "\n", "def belief_update(\n", " b: list[float], cloud_cover_forecast: float, delta_t: float, t_const: float\n", ") -> np.array:\n", " \"\"\"\n", " Update the belief based on the cloud forecast and the time variation.\n", "\n", " Args:\n", " b (np.array): Belief array (b(S=0), b(S=1)).\n", " cloud_forecast (float): Cloud coverage forecast.\n", " delta_t (float): Time difference between the current time and the previous observation time.\n", " t_const (float): Time constant for the sigmoid function.\n", "\n", " Returns:\n", " np.array: Updated belief array\n", " \"\"\"\n", "\n", " cloud_time_variation = time_variation(delta_t, t_const)\n", " cloud_free = (1 - cloud_cover_forecast) * cloud_time_variation\n", " cloud_cover_bar = 1 - cloud_free\n", " b_0 = b[0] * cloud_cover_bar\n", " b_1 = 1 - b_0\n", " return np.array([b_0, b_1])\n", "\n", "\n", "def belief_update_func(\n", " b: list[float], cloud_cover_forecast: float, delta_t: float\n", ") -> np.array:\n", " \"\"\"\n", " Belief update function for the satellite.\n", "\n", " Args:\n", " b (np.array): Belief array (b(S=0), b(S=1)).\n", " cloud_forecast (float): Cloud coverage forecast.\n", " delta_t (float): Time difference between the current time and the previous observation time.\n", "\n", " Returns:\n", " np.array: Updated belief array\n", " \"\"\"\n", " time_constant = 30 * 60 / 5 # 30 minutes\n", " return belief_update(b, cloud_cover_forecast, delta_t, time_constant)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Configuring the Satellite to Have Access to Cloud Information\n", "\n", "The satellite has observations and actions associated with it that are relevant to the decision-making process. The observation space can be modified to include information about the targets and the weather (cloud coverage forecast, reward threshold, success probability, etc) which allows better informed decision-making.\n", "\n", "* [Observations](../api_reference/obs/index.rst): \n", " - SatProperties: Body angular velocity, instrument pointing direction, body position, body velocity, battery charge (properties in [flight software model](../api_reference/sim/fsw.rst) or [dynamics model](../api_reference/sim/dyn.rst)). Also, customized dynamics property in CustomDynModel below: Angle between the sun and the solar panel.\n", " - OpportunityProperties: Target's priority, cloud coverage forecast, standard deviation of cloud coverage forecast, probability of being successfully imaged, and last time it was imaged (upcoming 32 targets). \n", " - Time: Simulation time.\n", " - Eclipse: Next eclipse start and end times. \n", "* [Actions](../api_reference/act/index.rst):\n", " - Charge: Enter a sun-pointing charging mode for 60 seconds.\n", " - Image: Image target from upcoming 32 targets\n", "* [Dynamics model](../api_reference/sim/dyn.rst): FullFeaturedDynModel is used and a property, angle between sun and solar panel, is added.\n", "* [Flight software model](../api_reference/sim/fsw.rst): SteeringImagerFSWModel is used." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "class CustomSatComposed(sats.ImagingSatellite):\n", " observation_spec = [\n", " obs.SatProperties(\n", " dict(prop=\"omega_BP_P\", norm=0.03),\n", " dict(prop=\"c_hat_P\"),\n", " dict(prop=\"r_BN_P\", norm=orbitalMotion.REQ_EARTH * 1e3),\n", " dict(prop=\"v_BN_P\", norm=7616.5),\n", " dict(prop=\"battery_charge_fraction\"),\n", " dict(prop=\"solar_angle_norm\"),\n", " ),\n", " obs.Eclipse(),\n", " obs.OpportunityProperties(\n", " dict(prop=\"priority\"),\n", " dict(\n", " fn=lambda sat, opp: opp[\"object\"].cloud_cover_forecast\n", " ), # Cloud coverage forecast (percentage of the area covered by clouds)\n", " dict(\n", " fn=lambda sat, opp: opp[\"object\"].cloud_cover_sigma\n", " ), # Confidence on the cloud coverage forecast\n", " # dict(fn=lambda sat, opp: opp[\"object\"].reward_threshold), #Reward threshold for each target. Uncomment if using variable threshold\n", " dict(\n", " fn=lambda sat, opp: opp[\"object\"].belief[1]\n", " ), # Probability of successfully imaging the target. Used only in the re-imaging case\n", " dict(\n", " fn=lambda sat, opp: opp[\"object\"].prev_obs, norm=5700\n", " ), # Previous observation time. Used only in the re-imaging case\n", " type=\"target\",\n", " n_ahead_observe=32,\n", " ),\n", " obs.Time(),\n", " ]\n", "\n", " action_spec = [\n", " act.Charge(duration=60.0),\n", " act.Image(n_ahead_image=32),\n", " ]\n", "\n", " # Modified the constructor to include the belief update function\n", " def __init__(self, *args, belief_update_func=None, **kwargs) -> None:\n", " super().__init__(*args, **kwargs)\n", " self.belief_update_func = belief_update_func\n", "\n", " class CustomDynModel(dyn.FullFeaturedDynModel):\n", "\n", " @property\n", " def solar_angle_norm(self) -> float:\n", " sun_vec_N = (\n", " self.world.gravFactory.spiceObject.planetStateOutMsgs[\n", " self.world.sun_index\n", " ]\n", " .read()\n", " .PositionVector\n", " )\n", " sun_vec_N_hat = sun_vec_N / np.linalg.norm(sun_vec_N)\n", " solar_panel_vec_B = np.array([0, 0, -1]) # Not default configuration\n", " mat = np.transpose(self.BN)\n", " solar_panel_vec_N = np.matmul(mat, solar_panel_vec_B)\n", " error_angle = np.arccos(np.dot(solar_panel_vec_N, sun_vec_N_hat))\n", "\n", " return error_angle / np.pi\n", "\n", " dyn_type = CustomDynModel\n", " fsw_type = fsw.SteeringImagerFSWModel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is necessary to add a filter to remove targets that reached the success threshold from the targets list when re-imaging is allowed such that:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def belief_threshold_filter(opportunity):\n", " if opportunity[\"type\"] == \"target\":\n", " return (\n", " True\n", " if opportunity[\"object\"].belief[1] < opportunity[\"object\"].reward_threshold\n", " else False\n", " )\n", " return True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When instantiating a satellite, these parameters can be overriden with a constant or \n", "rerandomized every time the environment is reset using the ``sat_args`` dictionary." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "dataStorageCapacity = 20 * 8e6 * 100\n", "sat_args = CustomSatComposed.default_sat_args(\n", " imageAttErrorRequirement=0.01,\n", " imageRateErrorRequirement=0.01,\n", " batteryStorageCapacity=80.0 * 3600 * 2,\n", " storedCharge_Init=lambda: np.random.uniform(0.4, 1.0) * 80.0 * 3600 * 2,\n", " u_max=0.2,\n", " K1=0.5,\n", " nHat_B=np.array([0, 0, -1]),\n", " imageTargetMinimumElevation=np.radians(45),\n", " rwBasePower=20,\n", " maxWheelSpeed=1500,\n", " storageInit=lambda: np.random.randint(\n", " 0 * dataStorageCapacity,\n", " 0.01 * dataStorageCapacity,\n", " ), # Initialize storage use close to zero\n", " wheelSpeeds=lambda: np.random.uniform(\n", " -1, 1, 3\n", " ), # Initialize reaction wheel speeds close to zero\n", " dataStorageCapacity=dataStorageCapacity, # Large storage to avoid filling up in three orbits\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initializing and Interacting with the Environment\n", "For this example, we will be using the multi-agent [ConstellationTasking](../api_reference/index.rst) \n", "environment. Along with passing the satellite that we configured, the environment takes\n", "a [scenario](../api_reference/scene/index.rst), which defines the environment the\n", "satellite is acting in, and a [rewarder](../api_reference/data/index.rst), which defines\n", "how data collected from the scenario is rewarded." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from bsk_rl.utils.orbital import walker_delta_args\n", "\n", "sat_arg_randomizer = walker_delta_args(\n", " altitude=500.0, n_planes=1, inc=45, clustersize=5, clusterspacing=72\n", ")\n", "\n", "satellites = [\n", " CustomSatComposed(f\"EO-{i}\", sat_args, belief_update_func=belief_update_func)\n", " for i in range(5)\n", "]\n", "\n", "# Add filter to satellites to remove targets that have already reached the belief threshold\n", "for sat in satellites:\n", " sat.add_access_filter(belief_threshold_filter)\n", "\n", "env = ConstellationTasking(\n", " satellites=satellites,\n", " world_type=world.GroundStationWorldModel,\n", " world_args=world.GroundStationWorldModel.default_world_args(),\n", " scenario=scenario,\n", " rewarder=rewarder,\n", " sat_arg_randomizer=sat_arg_randomizer,\n", " sim_rate=0.5,\n", " max_step_duration=300.0,\n", " time_limit=95 * 60 / 2, # half orbit\n", " log_level=\"INFO\",\n", " failure_penalty=0.0,\n", " # disable_env_checker=True, # For debugging\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, reset the environment. It is possible to specify the seed when resetting the environment." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[90;3m2025-03-26 15:49:51,992 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[mResetting environment with seed=1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:51,996 \u001b[0m\u001b[mscene.targets \u001b[0m\u001b[mINFO \u001b[0m\u001b[mGenerating 1020 targets\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,279 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 0.00 to 2850.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,317 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mFinding opportunity windows from 0.00 to 2850.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,349 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mFinding opportunity windows from 0.00 to 2850.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,379 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mFinding opportunity windows from 0.00 to 2850.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,413 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mFinding opportunity windows from 0.00 to 2850.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,474 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[mEnvironment reset\u001b[0m\n" ] } ], "source": [ "observation, info = env.reset(seed=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is possible to print out the actions and observations. The composed satellite [action_description](../api_reference/sats/index.rst) returns a human-readable action map each satellite has the same action space and similar observation space." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Actions: ['action_charge', 'action_image_0', 'action_image_1', 'action_image_2', 'action_image_3', 'action_image_4', 'action_image_5', 'action_image_6', 'action_image_7', 'action_image_8', 'action_image_9', 'action_image_10', 'action_image_11', 'action_image_12', 'action_image_13', 'action_image_14', 'action_image_15', 'action_image_16', 'action_image_17', 'action_image_18', 'action_image_19', 'action_image_20', 'action_image_21', 'action_image_22', 'action_image_23', 'action_image_24', 'action_image_25', 'action_image_26', 'action_image_27', 'action_image_28', 'action_image_29', 'action_image_30', 'action_image_31'] \n", "\n", "States: [np.str_('sat_props.omega_BP_P_normd[0]'), np.str_('sat_props.omega_BP_P_normd[1]'), np.str_('sat_props.omega_BP_P_normd[2]'), np.str_('sat_props.c_hat_P[0]'), np.str_('sat_props.c_hat_P[1]'), np.str_('sat_props.c_hat_P[2]'), np.str_('sat_props.r_BN_P_normd[0]'), np.str_('sat_props.r_BN_P_normd[1]'), np.str_('sat_props.r_BN_P_normd[2]'), np.str_('sat_props.v_BN_P_normd[0]'), np.str_('sat_props.v_BN_P_normd[1]'), np.str_('sat_props.v_BN_P_normd[2]'), np.str_('sat_props.battery_charge_fraction'), np.str_('sat_props.solar_angle_norm'), np.str_('eclipse[0]'), np.str_('eclipse[1]'), np.str_('target.target_0.priority'), np.str_('target.target_0.prop_1'), np.str_('target.target_0.prop_2'), np.str_('target.target_0.prop_3'), np.str_('target.target_0.prop_4_normd'), np.str_('target.target_1.priority'), np.str_('target.target_1.prop_1'), np.str_('target.target_1.prop_2'), np.str_('target.target_1.prop_3'), np.str_('target.target_1.prop_4_normd'), np.str_('target.target_2.priority'), np.str_('target.target_2.prop_1'), np.str_('target.target_2.prop_2'), np.str_('target.target_2.prop_3'), np.str_('target.target_2.prop_4_normd'), np.str_('target.target_3.priority'), np.str_('target.target_3.prop_1'), np.str_('target.target_3.prop_2'), np.str_('target.target_3.prop_3'), np.str_('target.target_3.prop_4_normd'), np.str_('target.target_4.priority'), np.str_('target.target_4.prop_1'), np.str_('target.target_4.prop_2'), np.str_('target.target_4.prop_3'), np.str_('target.target_4.prop_4_normd'), np.str_('target.target_5.priority'), np.str_('target.target_5.prop_1'), np.str_('target.target_5.prop_2'), np.str_('target.target_5.prop_3'), np.str_('target.target_5.prop_4_normd'), np.str_('target.target_6.priority'), np.str_('target.target_6.prop_1'), np.str_('target.target_6.prop_2'), np.str_('target.target_6.prop_3'), np.str_('target.target_6.prop_4_normd'), np.str_('target.target_7.priority'), np.str_('target.target_7.prop_1'), np.str_('target.target_7.prop_2'), np.str_('target.target_7.prop_3'), np.str_('target.target_7.prop_4_normd'), np.str_('target.target_8.priority'), np.str_('target.target_8.prop_1'), np.str_('target.target_8.prop_2'), np.str_('target.target_8.prop_3'), np.str_('target.target_8.prop_4_normd'), np.str_('target.target_9.priority'), np.str_('target.target_9.prop_1'), np.str_('target.target_9.prop_2'), np.str_('target.target_9.prop_3'), np.str_('target.target_9.prop_4_normd'), np.str_('target.target_10.priority'), np.str_('target.target_10.prop_1'), np.str_('target.target_10.prop_2'), np.str_('target.target_10.prop_3'), np.str_('target.target_10.prop_4_normd'), np.str_('target.target_11.priority'), np.str_('target.target_11.prop_1'), np.str_('target.target_11.prop_2'), np.str_('target.target_11.prop_3'), np.str_('target.target_11.prop_4_normd'), np.str_('target.target_12.priority'), np.str_('target.target_12.prop_1'), np.str_('target.target_12.prop_2'), np.str_('target.target_12.prop_3'), np.str_('target.target_12.prop_4_normd'), np.str_('target.target_13.priority'), np.str_('target.target_13.prop_1'), np.str_('target.target_13.prop_2'), np.str_('target.target_13.prop_3'), np.str_('target.target_13.prop_4_normd'), np.str_('target.target_14.priority'), np.str_('target.target_14.prop_1'), np.str_('target.target_14.prop_2'), np.str_('target.target_14.prop_3'), np.str_('target.target_14.prop_4_normd'), np.str_('target.target_15.priority'), np.str_('target.target_15.prop_1'), np.str_('target.target_15.prop_2'), np.str_('target.target_15.prop_3'), np.str_('target.target_15.prop_4_normd'), np.str_('target.target_16.priority'), np.str_('target.target_16.prop_1'), np.str_('target.target_16.prop_2'), np.str_('target.target_16.prop_3'), np.str_('target.target_16.prop_4_normd'), np.str_('target.target_17.priority'), np.str_('target.target_17.prop_1'), np.str_('target.target_17.prop_2'), np.str_('target.target_17.prop_3'), np.str_('target.target_17.prop_4_normd'), np.str_('target.target_18.priority'), np.str_('target.target_18.prop_1'), np.str_('target.target_18.prop_2'), np.str_('target.target_18.prop_3'), np.str_('target.target_18.prop_4_normd'), np.str_('target.target_19.priority'), np.str_('target.target_19.prop_1'), np.str_('target.target_19.prop_2'), np.str_('target.target_19.prop_3'), np.str_('target.target_19.prop_4_normd'), np.str_('target.target_20.priority'), np.str_('target.target_20.prop_1'), np.str_('target.target_20.prop_2'), np.str_('target.target_20.prop_3'), np.str_('target.target_20.prop_4_normd'), np.str_('target.target_21.priority'), np.str_('target.target_21.prop_1'), np.str_('target.target_21.prop_2'), np.str_('target.target_21.prop_3'), np.str_('target.target_21.prop_4_normd'), np.str_('target.target_22.priority'), np.str_('target.target_22.prop_1'), np.str_('target.target_22.prop_2'), np.str_('target.target_22.prop_3'), np.str_('target.target_22.prop_4_normd'), np.str_('target.target_23.priority'), np.str_('target.target_23.prop_1'), np.str_('target.target_23.prop_2'), np.str_('target.target_23.prop_3'), np.str_('target.target_23.prop_4_normd'), np.str_('target.target_24.priority'), np.str_('target.target_24.prop_1'), np.str_('target.target_24.prop_2'), np.str_('target.target_24.prop_3'), np.str_('target.target_24.prop_4_normd'), np.str_('target.target_25.priority'), np.str_('target.target_25.prop_1'), np.str_('target.target_25.prop_2'), np.str_('target.target_25.prop_3'), np.str_('target.target_25.prop_4_normd'), np.str_('target.target_26.priority'), np.str_('target.target_26.prop_1'), np.str_('target.target_26.prop_2'), np.str_('target.target_26.prop_3'), np.str_('target.target_26.prop_4_normd'), np.str_('target.target_27.priority'), np.str_('target.target_27.prop_1'), np.str_('target.target_27.prop_2'), np.str_('target.target_27.prop_3'), np.str_('target.target_27.prop_4_normd'), np.str_('target.target_28.priority'), np.str_('target.target_28.prop_1'), np.str_('target.target_28.prop_2'), np.str_('target.target_28.prop_3'), np.str_('target.target_28.prop_4_normd'), np.str_('target.target_29.priority'), np.str_('target.target_29.prop_1'), np.str_('target.target_29.prop_2'), np.str_('target.target_29.prop_3'), np.str_('target.target_29.prop_4_normd'), np.str_('target.target_30.priority'), np.str_('target.target_30.prop_1'), np.str_('target.target_30.prop_2'), np.str_('target.target_30.prop_3'), np.str_('target.target_30.prop_4_normd'), np.str_('target.target_31.priority'), np.str_('target.target_31.prop_1'), np.str_('target.target_31.prop_2'), np.str_('target.target_31.prop_3'), np.str_('target.target_31.prop_4_normd'), np.str_('time')] \n", "\n", "sat_props: {'omega_BP_P_normd': array([-0.00350386, 0.00198976, -0.00368761]), 'c_hat_P': array([-0.58085052, 0.0322632 , -0.81337061]), 'r_BN_P_normd': array([-0.54798211, -0.70115756, 0.60713484]), 'v_BN_P_normd': array([ 0.8111179 , -0.26445426, 0.42668281]), 'battery_charge_fraction': 0.5117561268266025, 'solar_angle_norm': np.float64(0.5154094809633691)}\n", "eclipse: [np.float64(4590.0), np.float64(1050.0)]\n", "target: {'target_0': {'priority': 0.23110739788422052, 'prop_1': np.float64(0.6773821240549803), 'prop_2': 0.017984788259031905, 'prop_3': np.float64(0.47193060176014956), 'prop_4_normd': -0.0}, 'target_1': {'priority': 0.7053880626885703, 'prop_1': np.float64(0.23103685455589726), 'prop_2': 0.012802744584004837, 'prop_3': np.float64(0.5448547507690691), 'prop_4_normd': -0.0}, 'target_2': {'priority': 0.1633664559021203, 'prop_1': np.float64(1.0), 'prop_2': 0.020608850788857196, 'prop_3': np.float64(0.5387060943662177), 'prop_4_normd': -0.0}, 'target_3': {'priority': 0.9672643792272313, 'prop_1': np.float64(0.6771252894737922), 'prop_2': 0.04354672056115306, 'prop_3': np.float64(0.01327414045488771), 'prop_4_normd': -0.0}, 'target_4': {'priority': 0.03177482425911071, 'prop_1': np.float64(0.9188487053805751), 'prop_2': 0.012359745287068721, 'prop_3': np.float64(0.6244352067126765), 'prop_4_normd': -0.0}, 'target_5': {'priority': 0.1620597486265063, 'prop_1': np.float64(0.32471532540988063), 'prop_2': 0.021931235486235705, 'prop_3': np.float64(0.6855506082056277), 'prop_4_normd': -0.0}, 'target_6': {'priority': 0.053247230445791494, 'prop_1': np.float64(0.465036271289076), 'prop_2': 0.03563025242548773, 'prop_3': np.float64(0.9025594456524167), 'prop_4_normd': -0.0}, 'target_7': {'priority': 0.4330199859612206, 'prop_1': np.float64(1.0), 'prop_2': 0.02021830615210032, 'prop_3': np.float64(0.6702366946572057), 'prop_4_normd': -0.0}, 'target_8': {'priority': 0.3011615633479109, 'prop_1': np.float64(0.18844447543725398), 'prop_2': 0.04545257905252125, 'prop_3': np.float64(0.06768644938605572), 'prop_4_normd': -0.0}, 'target_9': {'priority': 0.8395413208814804, 'prop_1': np.float64(0.6431795157724476), 'prop_2': 0.017677605544106915, 'prop_3': np.float64(0.4728944248799916), 'prop_4_normd': -0.0}, 'target_10': {'priority': 0.204358127861885, 'prop_1': np.float64(0.7343889025097664), 'prop_2': 0.04130035476650628, 'prop_3': np.float64(0.594948373774243), 'prop_4_normd': -0.0}, 'target_11': {'priority': 0.28542099633679585, 'prop_1': np.float64(0.0), 'prop_2': 0.03282052579591975, 'prop_3': np.float64(0.6527384073426662), 'prop_4_normd': -0.0}, 'target_12': {'priority': 0.6309456070754336, 'prop_1': np.float64(0.739476692944099), 'prop_2': 0.0499612954369292, 'prop_3': np.float64(0.5204203695786651), 'prop_4_normd': -0.0}, 'target_13': {'priority': 0.7378480194092552, 'prop_1': np.float64(0.5791299721901717), 'prop_2': 0.041116455683144884, 'prop_3': np.float64(0.3477342839272196), 'prop_4_normd': -0.0}, 'target_14': {'priority': 0.9753392450721888, 'prop_1': np.float64(0.9604974429840596), 'prop_2': 0.02704817412705326, 'prop_3': np.float64(0.3223324395696421), 'prop_4_normd': -0.0}, 'target_15': {'priority': 0.18951471677506737, 'prop_1': np.float64(1.0), 'prop_2': 0.02804520295157772, 'prop_3': np.float64(0.6864588826656022), 'prop_4_normd': -0.0}, 'target_16': {'priority': 0.829892142068991, 'prop_1': np.float64(0.051031544545620415), 'prop_2': 0.012951927671282034, 'prop_3': np.float64(0.9184774474430497), 'prop_4_normd': -0.0}, 'target_17': {'priority': 0.805208197948648, 'prop_1': np.float64(0.09383105699758443), 'prop_2': 0.04613823772572774, 'prop_3': np.float64(0.1612445798599077), 'prop_4_normd': -0.0}, 'target_18': {'priority': 0.7497313798484234, 'prop_1': np.float64(0.3604780446018815), 'prop_2': 0.03587131139163423, 'prop_3': np.float64(0.8200124116089859), 'prop_4_normd': -0.0}, 'target_19': {'priority': 0.9805442159491671, 'prop_1': np.float64(0.41451646992278607), 'prop_2': 0.04667665260455525, 'prop_3': np.float64(0.6942713451718054), 'prop_4_normd': -0.0}, 'target_20': {'priority': 0.03991136638841264, 'prop_1': np.float64(0.23408773086379167), 'prop_2': 0.015533976925185709, 'prop_3': np.float64(0.8199341930043369), 'prop_4_normd': -0.0}, 'target_21': {'priority': 0.26235271811805483, 'prop_1': np.float64(0.5129722649159048), 'prop_2': 0.03231234505292314, 'prop_3': np.float64(0.029457382565175542), 'prop_4_normd': -0.0}, 'target_22': {'priority': 0.8196046614443331, 'prop_1': np.float64(0.4988363753234679), 'prop_2': 0.03031211301588668, 'prop_3': np.float64(0.30343026194187606), 'prop_4_normd': -0.0}, 'target_23': {'priority': 0.46276603873931077, 'prop_1': np.float64(1.0), 'prop_2': 0.045180213382882306, 'prop_3': np.float64(0.6637320369176662), 'prop_4_normd': -0.0}, 'target_24': {'priority': 0.037250365029927957, 'prop_1': np.float64(0.3439577153571095), 'prop_2': 0.02591056745814532, 'prop_3': np.float64(0.9129731977113796), 'prop_4_normd': -0.0}, 'target_25': {'priority': 0.3259141704285431, 'prop_1': np.float64(0.5199010432150851), 'prop_2': 0.03754898592439353, 'prop_3': np.float64(0.5272524355632425), 'prop_4_normd': -0.0}, 'target_26': {'priority': 0.04378385210563185, 'prop_1': np.float64(0.937908630597671), 'prop_2': 0.04260317892125559, 'prop_3': np.float64(0.3210983082763837), 'prop_4_normd': -0.0}, 'target_27': {'priority': 0.7381309703287549, 'prop_1': np.float64(0.09373763077297367), 'prop_2': 0.03891319765444636, 'prop_3': np.float64(0.5193452798319762), 'prop_4_normd': -0.0}, 'target_28': {'priority': 0.2506051552479428, 'prop_1': np.float64(0.007938825204702099), 'prop_2': 0.02787699089266864, 'prop_3': np.float64(0.7951250769591794), 'prop_4_normd': -0.0}, 'target_29': {'priority': 0.22514616870331983, 'prop_1': np.float64(0.7635125768985891), 'prop_2': 0.03432249049424255, 'prop_3': np.float64(0.8819122066054487), 'prop_4_normd': -0.0}, 'target_30': {'priority': 0.5916045176099362, 'prop_1': np.float64(0.986511671806355), 'prop_2': 0.014134319095275428, 'prop_3': np.float64(0.6941055087647237), 'prop_4_normd': -0.0}, 'target_31': {'priority': 0.7292463467060817, 'prop_1': np.float64(0.9797106455916805), 'prop_2': 0.010118036996200824, 'prop_3': np.float64(0.025061979079314286), 'prop_4_normd': -0.0}}\n", "time: 0.0\n", "sat_props: {'omega_BP_P_normd': array([-0.0009353 , 0.00013679, -0.00555712]), 'c_hat_P': array([-0.62090234, -0.77574872, -0.11266858]), 'r_BN_P_normd': array([ 0.70555395, -0.52189728, 0.62476866]), 'v_BN_P_normd': array([ 0.71579288, 0.48386635, -0.40415273]), 'battery_charge_fraction': 0.9190121511873899, 'solar_angle_norm': np.float64(0.1668252941401964)}\n", "eclipse: [np.float64(3450.0), np.float64(5580.0)]\n", "target: {'target_0': {'priority': 0.805208197948648, 'prop_1': np.float64(0.09383105699758443), 'prop_2': 0.04613823772572774, 'prop_3': np.float64(0.1612445798599077), 'prop_4_normd': -0.0}, 'target_1': {'priority': 0.7497313798484234, 'prop_1': np.float64(0.3604780446018815), 'prop_2': 0.03587131139163423, 'prop_3': np.float64(0.8200124116089859), 'prop_4_normd': -0.0}, 'target_2': {'priority': 0.7173916012578099, 'prop_1': np.float64(0.8863059027468658), 'prop_2': 0.012931923436395706, 'prop_3': np.float64(0.05440340594992644), 'prop_4_normd': -0.0}, 'target_3': {'priority': 0.26235271811805483, 'prop_1': np.float64(0.5129722649159048), 'prop_2': 0.03231234505292314, 'prop_3': np.float64(0.029457382565175542), 'prop_4_normd': -0.0}, 'target_4': {'priority': 0.03991136638841264, 'prop_1': np.float64(0.23408773086379167), 'prop_2': 0.015533976925185709, 'prop_3': np.float64(0.8199341930043369), 'prop_4_normd': -0.0}, 'target_5': {'priority': 0.8196046614443331, 'prop_1': np.float64(0.4988363753234679), 'prop_2': 0.03031211301588668, 'prop_3': np.float64(0.30343026194187606), 'prop_4_normd': -0.0}, 'target_6': {'priority': 0.7000607792577789, 'prop_1': np.float64(0.4829764658302107), 'prop_2': 0.03178383502501577, 'prop_3': np.float64(0.19473317834468695), 'prop_4_normd': -0.0}, 'target_7': {'priority': 0.3259141704285431, 'prop_1': np.float64(0.5199010432150851), 'prop_2': 0.03754898592439353, 'prop_3': np.float64(0.5272524355632425), 'prop_4_normd': -0.0}, 'target_8': {'priority': 0.7221357962714954, 'prop_1': np.float64(0.019968299691167667), 'prop_2': 0.02604344280682401, 'prop_3': np.float64(0.38785146140506727), 'prop_4_normd': -0.0}, 'target_9': {'priority': 0.4835917916297542, 'prop_1': np.float64(0.913436309172294), 'prop_2': 0.01059668894457722, 'prop_3': np.float64(0.7520339085714534), 'prop_4_normd': -0.0}, 'target_10': {'priority': 0.9687687000530214, 'prop_1': np.float64(0.04310639017389428), 'prop_2': 0.03184705964968918, 'prop_3': np.float64(0.7663874813688322), 'prop_4_normd': -0.0}, 'target_11': {'priority': 0.9869428157422727, 'prop_1': np.float64(0.9234254203774177), 'prop_2': 0.02396237933175835, 'prop_3': np.float64(0.7687839143003268), 'prop_4_normd': -0.0}, 'target_12': {'priority': 0.7769440488059227, 'prop_1': np.float64(0.6392408345840034), 'prop_2': 0.036315282561394296, 'prop_3': np.float64(0.18789831613493962), 'prop_4_normd': -0.0}, 'target_13': {'priority': 0.5916045176099362, 'prop_1': np.float64(0.986511671806355), 'prop_2': 0.014134319095275428, 'prop_3': np.float64(0.6941055087647237), 'prop_4_normd': -0.0}, 'target_14': {'priority': 0.7292463467060817, 'prop_1': np.float64(0.9797106455916805), 'prop_2': 0.010118036996200824, 'prop_3': np.float64(0.025061979079314286), 'prop_4_normd': -0.0}, 'target_15': {'priority': 0.05042726354739102, 'prop_1': np.float64(0.1576196993220855), 'prop_2': 0.04388301495485157, 'prop_3': np.float64(0.2594337423004949), 'prop_4_normd': -0.0}, 'target_16': {'priority': 0.8800825118012181, 'prop_1': np.float64(0.7868728038549432), 'prop_2': 0.019911788841816942, 'prop_3': np.float64(0.2647465358054633), 'prop_4_normd': -0.0}, 'target_17': {'priority': 0.21181857950000504, 'prop_1': np.float64(0.9480782461961496), 'prop_2': 0.028875591319252027, 'prop_3': np.float64(0.7421749505743108), 'prop_4_normd': -0.0}, 'target_18': {'priority': 0.9133660347840165, 'prop_1': np.float64(0.2967363927929072), 'prop_2': 0.02409141808845557, 'prop_3': np.float64(0.7856607996483989), 'prop_4_normd': -0.0}, 'target_19': {'priority': 0.2079916135544887, 'prop_1': np.float64(0.7610042016491474), 'prop_2': 0.013217314655802635, 'prop_3': np.float64(0.48891637360577356), 'prop_4_normd': -0.0}, 'target_20': {'priority': 0.26228034066291006, 'prop_1': np.float64(0.9906468951013733), 'prop_2': 0.034570454343737976, 'prop_3': np.float64(0.41633751387091944), 'prop_4_normd': -0.0}, 'target_21': {'priority': 0.35956003090269617, 'prop_1': np.float64(0.8320764780986386), 'prop_2': 0.021487965487092246, 'prop_3': np.float64(0.18687857295910767), 'prop_4_normd': -0.0}, 'target_22': {'priority': 0.8062810977532414, 'prop_1': np.float64(0.993087334103627), 'prop_2': 0.04039141292626358, 'prop_3': np.float64(0.1338283099451153), 'prop_4_normd': -0.0}, 'target_23': {'priority': 0.23496779092483888, 'prop_1': np.float64(0.10352768256473872), 'prop_2': 0.019004809416638367, 'prop_3': np.float64(0.9070521064346198), 'prop_4_normd': -0.0}, 'target_24': {'priority': 0.9084785837974596, 'prop_1': np.float64(0.43108763475725725), 'prop_2': 0.03674322509969044, 'prop_3': np.float64(0.39407021486585936), 'prop_4_normd': -0.0}, 'target_25': {'priority': 0.14496672914401532, 'prop_1': np.float64(0.9895850113173721), 'prop_2': 0.010494811575373313, 'prop_3': np.float64(0.6539661898898557), 'prop_4_normd': -0.0}, 'target_26': {'priority': 0.5483734835622996, 'prop_1': np.float64(0.796681140436383), 'prop_2': 0.04180854061885682, 'prop_3': np.float64(0.3926113063554198), 'prop_4_normd': -0.0}, 'target_27': {'priority': 0.14617982678851893, 'prop_1': np.float64(0.07497897872331492), 'prop_2': 0.04145229760473127, 'prop_3': np.float64(0.8268282910245495), 'prop_4_normd': -0.0}, 'target_28': {'priority': 0.896280250540614, 'prop_1': np.float64(0.6766577821581528), 'prop_2': 0.04767304843877054, 'prop_3': np.float64(0.1847325271180294), 'prop_4_normd': -0.0}, 'target_29': {'priority': 0.0049630880386400955, 'prop_1': np.float64(0.19606435330027705), 'prop_2': 0.02760429118515086, 'prop_3': np.float64(0.2635404384939651), 'prop_4_normd': -0.0}, 'target_30': {'priority': 0.15620152606605864, 'prop_1': np.float64(0.5028512122335517), 'prop_2': 0.04719820746652589, 'prop_3': np.float64(0.8908624986437262), 'prop_4_normd': -0.0}, 'target_31': {'priority': 0.6090567297571149, 'prop_1': np.float64(0.9397514493066356), 'prop_2': 0.018680123293104596, 'prop_3': np.float64(0.2759228456536764), 'prop_4_normd': -0.0}}\n", "time: 0.0\n", "sat_props: {'omega_BP_P_normd': array([ 6.57732265e-05, 9.19824452e-04, -4.73177270e-03]), 'c_hat_P': array([-0.61330439, 0.78887935, 0.03907804]), 'r_BN_P_normd': array([ 0.98403843, 0.3786073 , -0.22100657]), 'v_BN_P_normd': array([-0.36873357, 0.56350011, -0.67646293]), 'battery_charge_fraction': 0.8735675970708932, 'solar_angle_norm': np.float64(0.5888053710771793)}\n", "eclipse: [np.float64(2310.0), np.float64(4440.0)]\n", "target: {'target_0': {'priority': 0.26228034066291006, 'prop_1': np.float64(0.9906468951013733), 'prop_2': 0.034570454343737976, 'prop_3': np.float64(0.41633751387091944), 'prop_4_normd': -0.0}, 'target_1': {'priority': 0.35956003090269617, 'prop_1': np.float64(0.8320764780986386), 'prop_2': 0.021487965487092246, 'prop_3': np.float64(0.18687857295910767), 'prop_4_normd': -0.0}, 'target_2': {'priority': 0.8062810977532414, 'prop_1': np.float64(0.993087334103627), 'prop_2': 0.04039141292626358, 'prop_3': np.float64(0.1338283099451153), 'prop_4_normd': -0.0}, 'target_3': {'priority': 0.23496779092483888, 'prop_1': np.float64(0.10352768256473872), 'prop_2': 0.019004809416638367, 'prop_3': np.float64(0.9070521064346198), 'prop_4_normd': -0.0}, 'target_4': {'priority': 0.9084785837974596, 'prop_1': np.float64(0.43108763475725725), 'prop_2': 0.03674322509969044, 'prop_3': np.float64(0.39407021486585936), 'prop_4_normd': -0.0}, 'target_5': {'priority': 0.14496672914401532, 'prop_1': np.float64(0.9895850113173721), 'prop_2': 0.010494811575373313, 'prop_3': np.float64(0.6539661898898557), 'prop_4_normd': -0.0}, 'target_6': {'priority': 0.5483734835622996, 'prop_1': np.float64(0.796681140436383), 'prop_2': 0.04180854061885682, 'prop_3': np.float64(0.3926113063554198), 'prop_4_normd': -0.0}, 'target_7': {'priority': 0.14617982678851893, 'prop_1': np.float64(0.07497897872331492), 'prop_2': 0.04145229760473127, 'prop_3': np.float64(0.8268282910245495), 'prop_4_normd': -0.0}, 'target_8': {'priority': 0.896280250540614, 'prop_1': np.float64(0.6766577821581528), 'prop_2': 0.04767304843877054, 'prop_3': np.float64(0.1847325271180294), 'prop_4_normd': -0.0}, 'target_9': {'priority': 0.0049630880386400955, 'prop_1': np.float64(0.19606435330027705), 'prop_2': 0.02760429118515086, 'prop_3': np.float64(0.2635404384939651), 'prop_4_normd': -0.0}, 'target_10': {'priority': 0.15620152606605864, 'prop_1': np.float64(0.5028512122335517), 'prop_2': 0.04719820746652589, 'prop_3': np.float64(0.8908624986437262), 'prop_4_normd': -0.0}, 'target_11': {'priority': 0.6090567297571149, 'prop_1': np.float64(0.9397514493066356), 'prop_2': 0.018680123293104596, 'prop_3': np.float64(0.2759228456536764), 'prop_4_normd': -0.0}, 'target_12': {'priority': 0.7178310765496564, 'prop_1': np.float64(0.008717087366691814), 'prop_2': 0.04077086254773631, 'prop_3': np.float64(0.4970973840371545), 'prop_4_normd': -0.0}, 'target_13': {'priority': 0.8967933004986205, 'prop_1': np.float64(0.7482609280415848), 'prop_2': 0.03476544328302366, 'prop_3': np.float64(0.6835321610084802), 'prop_4_normd': -0.0}, 'target_14': {'priority': 0.543689316316815, 'prop_1': np.float64(0.9812848248636226), 'prop_2': 0.027779619705700306, 'prop_3': np.float64(0.5481930510991878), 'prop_4_normd': -0.0}, 'target_15': {'priority': 0.754909559150052, 'prop_1': np.float64(0.057575972358719134), 'prop_2': 0.03729929464921535, 'prop_3': np.float64(0.284165822702533), 'prop_4_normd': -0.0}, 'target_16': {'priority': 0.5148170269813278, 'prop_1': np.float64(0.98277564071416), 'prop_2': 0.04729708641508508, 'prop_3': np.float64(0.48700099507113837), 'prop_4_normd': -0.0}, 'target_17': {'priority': 0.33363421409005134, 'prop_1': np.float64(0.27963666684608807), 'prop_2': 0.015448025913752836, 'prop_3': np.float64(0.35524598852016775), 'prop_4_normd': -0.0}, 'target_18': {'priority': 0.15554516992643075, 'prop_1': np.float64(0.44856007038705614), 'prop_2': 0.03462561443516386, 'prop_3': np.float64(0.041177643202259424), 'prop_4_normd': -0.0}, 'target_19': {'priority': 0.9754007045026568, 'prop_1': np.float64(0.20622308574436016), 'prop_2': 0.04771903579898489, 'prop_3': np.float64(0.2097060094346733), 'prop_4_normd': -0.0}, 'target_20': {'priority': 0.06327147616333118, 'prop_1': np.float64(0.913162122598643), 'prop_2': 0.015400618290328318, 'prop_3': np.float64(0.8438779456824926), 'prop_4_normd': -0.0}, 'target_21': {'priority': 0.952831123720716, 'prop_1': np.float64(0.5425823625818398), 'prop_2': 0.04391279805025721, 'prop_3': np.float64(0.1188596248776597), 'prop_4_normd': -0.0}, 'target_22': {'priority': 0.1984435827220441, 'prop_1': np.float64(0.9993930622647624), 'prop_2': 0.018418751683138883, 'prop_3': np.float64(0.8733160501738085), 'prop_4_normd': -0.0}, 'target_23': {'priority': 0.6081052486615345, 'prop_1': np.float64(0.6666874839765461), 'prop_2': 0.04756378419886552, 'prop_3': np.float64(0.3751647110694418), 'prop_4_normd': -0.0}, 'target_24': {'priority': 0.8604551371804029, 'prop_1': np.float64(0.08057499070803986), 'prop_2': 0.04071241908237248, 'prop_3': np.float64(0.609432855870325), 'prop_4_normd': -0.0}, 'target_25': {'priority': 0.33343926079085895, 'prop_1': np.float64(0.7085651414432226), 'prop_2': 0.013267662106720103, 'prop_3': np.float64(0.09019785855427226), 'prop_4_normd': -0.0}, 'target_26': {'priority': 0.16416909415169478, 'prop_1': np.float64(0.2807892061289123), 'prop_2': 0.013750744690519361, 'prop_3': np.float64(0.189459753332757), 'prop_4_normd': -0.0}, 'target_27': {'priority': 0.905810716682313, 'prop_1': np.float64(0.7660194147598671), 'prop_2': 0.04318851039188519, 'prop_3': np.float64(0.1304886896445085), 'prop_4_normd': -0.0}, 'target_28': {'priority': 0.39927138950055974, 'prop_1': np.float64(1.0), 'prop_2': 0.02963792654006774, 'prop_3': np.float64(0.7333017121319036), 'prop_4_normd': -0.0}, 'target_29': {'priority': 0.5778706973732319, 'prop_1': np.float64(0.6245550082437898), 'prop_2': 0.04978325134312043, 'prop_3': np.float64(0.8122073231245674), 'prop_4_normd': -0.0}, 'target_30': {'priority': 0.05629366991581264, 'prop_1': np.float64(0.5809683193452809), 'prop_2': 0.017291318017798953, 'prop_3': np.float64(0.6992764929868548), 'prop_4_normd': -0.0}, 'target_31': {'priority': 0.43088704356158114, 'prop_1': np.float64(0.6325466948493413), 'prop_2': 0.02982710301258378, 'prop_3': np.float64(0.712024016779776), 'prop_4_normd': -0.0}}\n", "time: 0.0\n", "sat_props: {'omega_BP_P_normd': array([-0.0010775 , 0.0033747 , -0.00368788]), 'c_hat_P': array([-0.8447729 , -0.50942475, 0.16384496]), 'r_BN_P_normd': array([-0.09738475, 0.75588946, -0.76135823]), 'v_BN_P_normd': array([-0.94368276, -0.13560413, -0.01392436]), 'battery_charge_fraction': 0.8166400946366471, 'solar_angle_norm': np.float64(0.1541904664169785)}\n", "eclipse: [np.float64(1200.0), np.float64(3300.0)]\n", "target: {'target_0': {'priority': 0.15620152606605864, 'prop_1': np.float64(0.5028512122335517), 'prop_2': 0.04719820746652589, 'prop_3': np.float64(0.8908624986437262), 'prop_4_normd': -0.0}, 'target_1': {'priority': 0.9560067989183784, 'prop_1': np.float64(0.6758726802999104), 'prop_2': 0.04782848860703626, 'prop_3': np.float64(0.6757920368735708), 'prop_4_normd': -0.0}, 'target_2': {'priority': 0.6090567297571149, 'prop_1': np.float64(0.9397514493066356), 'prop_2': 0.018680123293104596, 'prop_3': np.float64(0.2759228456536764), 'prop_4_normd': -0.0}, 'target_3': {'priority': 0.9397564003482999, 'prop_1': np.float64(0.864162539013529), 'prop_2': 0.04083485710529246, 'prop_3': np.float64(0.05956535587203046), 'prop_4_normd': -0.0}, 'target_4': {'priority': 0.8967933004986205, 'prop_1': np.float64(0.7482609280415848), 'prop_2': 0.03476544328302366, 'prop_3': np.float64(0.6835321610084802), 'prop_4_normd': -0.0}, 'target_5': {'priority': 0.9274083923453597, 'prop_1': np.float64(0.05006799490865553), 'prop_2': 0.011088498014595083, 'prop_3': np.float64(0.09727868149321972), 'prop_4_normd': -0.0}, 'target_6': {'priority': 0.08492005718652906, 'prop_1': np.float64(0.7122220944171351), 'prop_2': 0.02256226819031263, 'prop_3': np.float64(0.6194570106002709), 'prop_4_normd': -0.0}, 'target_7': {'priority': 0.543689316316815, 'prop_1': np.float64(0.9812848248636226), 'prop_2': 0.027779619705700306, 'prop_3': np.float64(0.5481930510991878), 'prop_4_normd': -0.0}, 'target_8': {'priority': 0.7178310765496564, 'prop_1': np.float64(0.008717087366691814), 'prop_2': 0.04077086254773631, 'prop_3': np.float64(0.4970973840371545), 'prop_4_normd': -0.0}, 'target_9': {'priority': 0.754909559150052, 'prop_1': np.float64(0.057575972358719134), 'prop_2': 0.03729929464921535, 'prop_3': np.float64(0.284165822702533), 'prop_4_normd': -0.0}, 'target_10': {'priority': 0.26129816366655456, 'prop_1': np.float64(0.9801329950029055), 'prop_2': 0.014209014650960264, 'prop_3': np.float64(0.09732109242334332), 'prop_4_normd': -0.0}, 'target_11': {'priority': 0.7511786558834868, 'prop_1': np.float64(0.14609372533908693), 'prop_2': 0.04326569997609207, 'prop_3': np.float64(0.14539193088453728), 'prop_4_normd': -0.0}, 'target_12': {'priority': 0.33363421409005134, 'prop_1': np.float64(0.27963666684608807), 'prop_2': 0.015448025913752836, 'prop_3': np.float64(0.35524598852016775), 'prop_4_normd': -0.0}, 'target_13': {'priority': 0.7838738265919503, 'prop_1': np.float64(0.1120603312737106), 'prop_2': 0.015208583258170939, 'prop_3': np.float64(0.8104452357493993), 'prop_4_normd': -0.0}, 'target_14': {'priority': 0.15554516992643075, 'prop_1': np.float64(0.44856007038705614), 'prop_2': 0.03462561443516386, 'prop_3': np.float64(0.041177643202259424), 'prop_4_normd': -0.0}, 'target_15': {'priority': 0.9754007045026568, 'prop_1': np.float64(0.20622308574436016), 'prop_2': 0.04771903579898489, 'prop_3': np.float64(0.2097060094346733), 'prop_4_normd': -0.0}, 'target_16': {'priority': 0.4596153545251349, 'prop_1': np.float64(1.0), 'prop_2': 0.020307800243842836, 'prop_3': np.float64(0.5140122128212462), 'prop_4_normd': -0.0}, 'target_17': {'priority': 0.3659991252731889, 'prop_1': np.float64(0.05409862818622294), 'prop_2': 0.01687746524189312, 'prop_3': np.float64(0.7375854209483653), 'prop_4_normd': -0.0}, 'target_18': {'priority': 0.1984435827220441, 'prop_1': np.float64(0.9993930622647624), 'prop_2': 0.018418751683138883, 'prop_3': np.float64(0.8733160501738085), 'prop_4_normd': -0.0}, 'target_19': {'priority': 0.17225514293500632, 'prop_1': np.float64(0.8385972978367822), 'prop_2': 0.04929686890520145, 'prop_3': np.float64(0.5221241207594288), 'prop_4_normd': -0.0}, 'target_20': {'priority': 0.8604551371804029, 'prop_1': np.float64(0.08057499070803986), 'prop_2': 0.04071241908237248, 'prop_3': np.float64(0.609432855870325), 'prop_4_normd': -0.0}, 'target_21': {'priority': 0.40742501090364514, 'prop_1': np.float64(0.5399153179893333), 'prop_2': 0.03088086202558322, 'prop_3': np.float64(0.8899055693352789), 'prop_4_normd': -0.0}, 'target_22': {'priority': 0.16416909415169478, 'prop_1': np.float64(0.2807892061289123), 'prop_2': 0.013750744690519361, 'prop_3': np.float64(0.189459753332757), 'prop_4_normd': -0.0}, 'target_23': {'priority': 0.39927138950055974, 'prop_1': np.float64(1.0), 'prop_2': 0.02963792654006774, 'prop_3': np.float64(0.7333017121319036), 'prop_4_normd': -0.0}, 'target_24': {'priority': 0.5778706973732319, 'prop_1': np.float64(0.6245550082437898), 'prop_2': 0.04978325134312043, 'prop_3': np.float64(0.8122073231245674), 'prop_4_normd': -0.0}, 'target_25': {'priority': 0.05629366991581264, 'prop_1': np.float64(0.5809683193452809), 'prop_2': 0.017291318017798953, 'prop_3': np.float64(0.6992764929868548), 'prop_4_normd': -0.0}, 'target_26': {'priority': 0.43088704356158114, 'prop_1': np.float64(0.6325466948493413), 'prop_2': 0.02982710301258378, 'prop_3': np.float64(0.712024016779776), 'prop_4_normd': -0.0}, 'target_27': {'priority': 0.7462625306251898, 'prop_1': np.float64(0.2982597519032414), 'prop_2': 0.045024292039336875, 'prop_3': np.float64(0.44346734103754687), 'prop_4_normd': -0.0}, 'target_28': {'priority': 0.7841923371031474, 'prop_1': np.float64(0.9591233826139078), 'prop_2': 0.037755865811717484, 'prop_3': np.float64(0.9093112695308485), 'prop_4_normd': -0.0}, 'target_29': {'priority': 0.613105381090001, 'prop_1': np.float64(0.590160027737857), 'prop_2': 0.031337283935696104, 'prop_3': np.float64(0.8510975679307113), 'prop_4_normd': -0.0}, 'target_30': {'priority': 0.5852822100268925, 'prop_1': np.float64(0.36990893176639794), 'prop_2': 0.04653269597866704, 'prop_3': np.float64(0.4456852642768419), 'prop_4_normd': -0.0}, 'target_31': {'priority': 0.8518922703837282, 'prop_1': np.float64(0.3895111648188495), 'prop_2': 0.017828837989348107, 'prop_3': np.float64(0.007061709337917654), 'prop_4_normd': -0.0}}\n", "time: 0.0\n", "sat_props: {'omega_BP_P_normd': array([ 0.00134838, -0.0029125 , -0.00098499]), 'c_hat_P': array([-0.5665049 , -0.81904639, 0.09074805]), 'r_BN_P_normd': array([-1.04422552, 0.08855808, -0.2495387 ]), 'v_BN_P_normd': array([-0.21449445, -0.64730808, 0.6678572 ]), 'battery_charge_fraction': 0.8141227526530871, 'solar_angle_norm': np.float64(0.09988599840507909)}\n", "eclipse: [np.float64(60.00000000000001), np.float64(2190.0)]\n", "target: {'target_0': {'priority': 0.4596153545251349, 'prop_1': np.float64(1.0), 'prop_2': 0.020307800243842836, 'prop_3': np.float64(0.5140122128212462), 'prop_4_normd': -0.0}, 'target_1': {'priority': 0.3659991252731889, 'prop_1': np.float64(0.05409862818622294), 'prop_2': 0.01687746524189312, 'prop_3': np.float64(0.7375854209483653), 'prop_4_normd': -0.0}, 'target_2': {'priority': 0.17225514293500632, 'prop_1': np.float64(0.8385972978367822), 'prop_2': 0.04929686890520145, 'prop_3': np.float64(0.5221241207594288), 'prop_4_normd': -0.0}, 'target_3': {'priority': 0.40742501090364514, 'prop_1': np.float64(0.5399153179893333), 'prop_2': 0.03088086202558322, 'prop_3': np.float64(0.8899055693352789), 'prop_4_normd': -0.0}, 'target_4': {'priority': 0.15094914837038043, 'prop_1': np.float64(0.1600098968039353), 'prop_2': 0.0372480349396054, 'prop_3': np.float64(0.4679935866084606), 'prop_4_normd': -0.0}, 'target_5': {'priority': 0.4373081987605446, 'prop_1': np.float64(0.16656956766685047), 'prop_2': 0.026836967671334234, 'prop_3': np.float64(0.1323442213766992), 'prop_4_normd': -0.0}, 'target_6': {'priority': 0.43088704356158114, 'prop_1': np.float64(0.6325466948493413), 'prop_2': 0.02982710301258378, 'prop_3': np.float64(0.712024016779776), 'prop_4_normd': -0.0}, 'target_7': {'priority': 0.9974710312400171, 'prop_1': np.float64(1.0), 'prop_2': 0.023556982195548692, 'prop_3': np.float64(0.015946379549076115), 'prop_4_normd': -0.0}, 'target_8': {'priority': 0.7462625306251898, 'prop_1': np.float64(0.2982597519032414), 'prop_2': 0.045024292039336875, 'prop_3': np.float64(0.44346734103754687), 'prop_4_normd': -0.0}, 'target_9': {'priority': 0.7841923371031474, 'prop_1': np.float64(0.9591233826139078), 'prop_2': 0.037755865811717484, 'prop_3': np.float64(0.9093112695308485), 'prop_4_normd': -0.0}, 'target_10': {'priority': 0.613105381090001, 'prop_1': np.float64(0.590160027737857), 'prop_2': 0.031337283935696104, 'prop_3': np.float64(0.8510975679307113), 'prop_4_normd': -0.0}, 'target_11': {'priority': 0.5852822100268925, 'prop_1': np.float64(0.36990893176639794), 'prop_2': 0.04653269597866704, 'prop_3': np.float64(0.4456852642768419), 'prop_4_normd': -0.0}, 'target_12': {'priority': 0.34000304360297495, 'prop_1': np.float64(0.9944847066186256), 'prop_2': 0.03393163135966621, 'prop_3': np.float64(0.47590147868624155), 'prop_4_normd': -0.0}, 'target_13': {'priority': 0.23110739788422052, 'prop_1': np.float64(0.6773821240549803), 'prop_2': 0.017984788259031905, 'prop_3': np.float64(0.47193060176014956), 'prop_4_normd': -0.0}, 'target_14': {'priority': 0.18100605976414696, 'prop_1': np.float64(1.0), 'prop_2': 0.011879918201780573, 'prop_3': np.float64(0.5109681565409651), 'prop_4_normd': -0.0}, 'target_15': {'priority': 0.7053880626885703, 'prop_1': np.float64(0.23103685455589726), 'prop_2': 0.012802744584004837, 'prop_3': np.float64(0.5448547507690691), 'prop_4_normd': -0.0}, 'target_16': {'priority': 0.1633664559021203, 'prop_1': np.float64(1.0), 'prop_2': 0.020608850788857196, 'prop_3': np.float64(0.5387060943662177), 'prop_4_normd': -0.0}, 'target_17': {'priority': 0.5809659624528973, 'prop_1': np.float64(0.13729744380072872), 'prop_2': 0.012742529830350166, 'prop_3': np.float64(0.9044564966391249), 'prop_4_normd': -0.0}, 'target_18': {'priority': 0.9672643792272313, 'prop_1': np.float64(0.6771252894737922), 'prop_2': 0.04354672056115306, 'prop_3': np.float64(0.01327414045488771), 'prop_4_normd': -0.0}, 'target_19': {'priority': 0.03177482425911071, 'prop_1': np.float64(0.9188487053805751), 'prop_2': 0.012359745287068721, 'prop_3': np.float64(0.6244352067126765), 'prop_4_normd': -0.0}, 'target_20': {'priority': 0.1620597486265063, 'prop_1': np.float64(0.32471532540988063), 'prop_2': 0.021931235486235705, 'prop_3': np.float64(0.6855506082056277), 'prop_4_normd': -0.0}, 'target_21': {'priority': 0.053247230445791494, 'prop_1': np.float64(0.465036271289076), 'prop_2': 0.03563025242548773, 'prop_3': np.float64(0.9025594456524167), 'prop_4_normd': -0.0}, 'target_22': {'priority': 0.4330199859612206, 'prop_1': np.float64(1.0), 'prop_2': 0.02021830615210032, 'prop_3': np.float64(0.6702366946572057), 'prop_4_normd': -0.0}, 'target_23': {'priority': 0.3011615633479109, 'prop_1': np.float64(0.18844447543725398), 'prop_2': 0.04545257905252125, 'prop_3': np.float64(0.06768644938605572), 'prop_4_normd': -0.0}, 'target_24': {'priority': 0.8395413208814804, 'prop_1': np.float64(0.6431795157724476), 'prop_2': 0.017677605544106915, 'prop_3': np.float64(0.4728944248799916), 'prop_4_normd': -0.0}, 'target_25': {'priority': 0.28542099633679585, 'prop_1': np.float64(0.0), 'prop_2': 0.03282052579591975, 'prop_3': np.float64(0.6527384073426662), 'prop_4_normd': -0.0}, 'target_26': {'priority': 0.7378480194092552, 'prop_1': np.float64(0.5791299721901717), 'prop_2': 0.041116455683144884, 'prop_3': np.float64(0.3477342839272196), 'prop_4_normd': -0.0}, 'target_27': {'priority': 0.6309456070754336, 'prop_1': np.float64(0.739476692944099), 'prop_2': 0.0499612954369292, 'prop_3': np.float64(0.5204203695786651), 'prop_4_normd': -0.0}, 'target_28': {'priority': 0.18951471677506737, 'prop_1': np.float64(1.0), 'prop_2': 0.02804520295157772, 'prop_3': np.float64(0.6864588826656022), 'prop_4_normd': -0.0}, 'target_29': {'priority': 0.829892142068991, 'prop_1': np.float64(0.051031544545620415), 'prop_2': 0.012951927671282034, 'prop_3': np.float64(0.9184774474430497), 'prop_4_normd': -0.0}, 'target_30': {'priority': 0.6245099616003051, 'prop_1': np.float64(0.6786198581781225), 'prop_2': 0.02914651153027417, 'prop_3': np.float64(0.8356293281937733), 'prop_4_normd': -0.0}, 'target_31': {'priority': 0.9805442159491671, 'prop_1': np.float64(0.41451646992278607), 'prop_2': 0.04667665260455525, 'prop_3': np.float64(0.6942713451718054), 'prop_4_normd': -0.0}}\n", "time: 0.0\n" ] } ], "source": [ "print(\"Actions:\", env.satellites[0].action_description, \"\\n\")\n", "print(\"States:\", env.unwrapped.satellites[0].observation_description, \"\\n\")\n", "\n", "# Using the composed satellite features also provides a human-readable state:\n", "for satellite in env.unwrapped.satellites:\n", " for k, v in satellite.observation_builder.obs_dict().items():\n", " print(f\"{k}: {v}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, run the simulation until timeout or agent failure." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "\u001b[90;3m2025-03-26 15:49:52,485 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,486 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,486 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 60.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,487 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,487 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 60.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,488 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,488 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 60.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,489 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,489 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 60.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,489 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,490 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<0.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 60.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,528 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtimed termination at 60.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,529 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtimed termination at 60.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,529 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtimed termination at 60.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,529 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtimed termination at 60.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,530 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtimed termination at 60.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,533 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,533 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mSatellite EO-0 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,534 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mSatellite EO-1 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,534 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mSatellite EO-2 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,534 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mSatellite EO-3 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,534 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mSatellite EO-4 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,553 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,555 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,555 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 5 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,555 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-446) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,556 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-446) window enabled: 409.1 to 540.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,557 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 540.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,557 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 18 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,557 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-471) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,558 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-471) window enabled: 1453.8 to 1558.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,558 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 1558.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,558 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 5 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,559 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-533) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,559 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-533) window enabled: 835.2 to 958.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,559 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 958.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,560 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 16 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,560 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-366) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,561 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-366) window enabled: 1169.7 to 1288.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,561 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 1288.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,561 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 28 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,561 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-970) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,562 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-970) window enabled: 2360.3 to 2483.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,562 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<60.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 2483.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,761 \u001b[0m\u001b[msim.simulator \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[mMax step duration reached\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,765 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,771 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mFinding opportunity windows from 3000.00 to 3600.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,794 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,796 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,796 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 7 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,797 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-865) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,798 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-865) window enabled: 967.9 to 1061.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,798 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 1061.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,798 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 30 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,799 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-900) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,800 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-900) window enabled: 2686.0 to 2816.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,800 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 2816.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,800 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 12 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,800 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-684) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,801 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-684) window enabled: 1555.4 to 1617.7\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,801 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 1617.7\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,802 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 12 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,802 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-536) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,802 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-536) window enabled: 1040.7 to 1172.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,803 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 1172.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,803 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 6 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,803 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-433) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,804 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-433) window enabled: 835.7 to 939.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:52,804 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<360.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 939.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,004 \u001b[0m\u001b[msim.simulator \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[mMax step duration reached\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,007 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,010 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mFinding opportunity windows from 3000.00 to 3600.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,028 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mFinding opportunity windows from 3000.00 to 3600.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,050 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,052 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,053 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 21 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,053 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-496) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,054 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-496) window enabled: 2159.5 to 2285.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,054 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 2285.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,055 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 29 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,055 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-216) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,056 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-216) window enabled: 3003.0 to 3131.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,056 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3131.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,056 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 7 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,056 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-950) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,057 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-950) window enabled: 971.3 to 1099.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,057 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 1099.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,058 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 28 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,058 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-902) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,059 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-902) window enabled: 2495.9 to 2626.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,059 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 2626.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,059 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 17 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,060 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-597) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,060 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-597) window enabled: 1729.0 to 1828.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,061 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<660.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 1828.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,261 \u001b[0m\u001b[msim.simulator \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[mMax step duration reached\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,264 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,266 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 3000.00 to 3600.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,289 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,292 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,292 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 4 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,292 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-966) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,293 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-966) window enabled: 1110.6 to 1223.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,294 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 1223.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,294 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 16 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,294 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-533) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,295 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-533) window enabled: 2032.1 to 2140.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,295 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 2140.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,296 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 5 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,296 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-221) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,297 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-221) window enabled: 1275.9 to 1395.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,297 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 1395.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,297 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 4 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,298 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-481) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,298 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-481) window enabled: 1117.1 to 1246.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,299 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 1246.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,299 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 5 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,299 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-633) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,300 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-633) window enabled: 1373.2 to 1440.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,300 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<960.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 1440.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,405 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mimaged Target(tgt-966)\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,408 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,409 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mSatellite EO-0 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,420 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mFinding opportunity windows from 3600.00 to 4200.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,439 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mFinding opportunity windows from 3600.00 to 4200.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,458 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mFinding opportunity windows from 3000.00 to 3600.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,476 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mFinding opportunity windows from 3600.00 to 4200.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,496 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,498 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,498 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 20 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,498 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-97) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,499 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-97) window enabled: 2388.5 to 2511.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,500 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 2511.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,500 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 28 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,500 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-940) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,501 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-940) window enabled: 3653.1 to 3730.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,501 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3730.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,502 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 28 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,502 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-546) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,502 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-546) window enabled: 3462.7 to 3536.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,503 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 3536.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,503 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 14 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,503 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-433) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,504 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-433) window enabled: 2009.1 to 2140.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,504 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 2140.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,504 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 15 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,505 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-966) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,505 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-966) window enabled: 2287.8 to 2415.7\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,505 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1112.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 2415.7\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,707 \u001b[0m\u001b[msim.simulator \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[mMax step duration reached\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,710 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,729 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mFinding opportunity windows from 3600.00 to 4200.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,749 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,751 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,751 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 27 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,751 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-427) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,752 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-427) window enabled: 3161.0 to 3282.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,753 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 3282.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,753 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 7 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,753 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-342) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,754 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-342) window enabled: 1945.5 to 2075.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,754 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 2075.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,755 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 4 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,755 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-216) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,755 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-216) window enabled: 1823.3 to 1936.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,756 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 1936.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,756 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 11 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,757 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-512) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,758 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-512) window enabled: 2412.8 to 2467.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,758 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 2467.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,758 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 13 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,759 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-970) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,760 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-970) window enabled: 2360.3 to 2483.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,760 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1412.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 2483.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,955 \u001b[0m\u001b[msim.simulator \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[mMax step duration reached\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,958 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,960 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 3600.00 to 4200.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,977 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mFinding opportunity windows from 4200.00 to 4800.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:53,995 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mFinding opportunity windows from 4200.00 to 4800.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,014 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mFinding opportunity windows from 4200.00 to 4800.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,033 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,035 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,035 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 20 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,036 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-441) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,037 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-441) window enabled: 3068.7 to 3160.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,037 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 3160.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,038 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 22 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,038 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-80) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,038 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-80) window enabled: 3675.1 to 3781.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,039 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3781.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,039 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 18 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,039 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-91) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,040 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-91) window enabled: 3250.2 to 3279.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,040 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 3279.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,040 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,040 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 1772.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,041 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 6 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,041 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-543) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,042 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-543) window enabled: 2171.9 to 2297.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,042 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1712.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 2297.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,082 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtimed termination at 1772.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,085 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,086 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mSatellite EO-3 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,092 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,094 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,095 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 25 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,095 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-292) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,096 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-292) window enabled: 3304.2 to 3418.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,096 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 3418.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,096 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 18 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,097 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-28) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,097 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-28) window enabled: 3496.4 to 3624.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,098 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3624.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,098 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 3 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,098 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-704) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,099 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-704) window enabled: 2141.1 to 2269.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,099 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 2269.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,100 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 27 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,100 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-961) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,101 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-961) window enabled: 4210.2 to 4256.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,101 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 4256.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,101 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[maction_charge tasked for 60.0 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,102 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1772.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 1832.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,143 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtimed termination at 1832.0 for action_charge\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,146 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,147 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mSatellite EO-4 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,153 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,155 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,155 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 26 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,156 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-26) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,157 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-26) window enabled: 3395.5 to 3446.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,157 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 3446.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,157 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 18 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,158 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-28) window enabled: 3496.4 to 3624.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,158 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3624.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,159 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 22 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,159 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-444) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,160 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-444) window enabled: 3424.0 to 3483.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,160 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 3483.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,160 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 30 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,161 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-875) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,161 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-875) window enabled: 4277.0 to 4325.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,162 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 4325.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,162 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 14 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,162 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-655) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,163 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-655) window enabled: 3199.8 to 3326.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,163 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<1832.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 3326.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,358 \u001b[0m\u001b[msim.simulator \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[mMax step duration reached\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,361 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,363 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 4200.00 to 4800.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,379 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 4800.00 to 5400.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,396 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mFinding opportunity windows from 4800.00 to 5400.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,417 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,419 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,419 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 21 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,419 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-349) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,420 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-349) window enabled: 3472.7 to 3596.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,421 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 3596.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,421 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 15 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,422 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-28) window enabled: 3496.4 to 3624.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,422 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3624.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,422 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 3 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,423 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-137) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,423 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-137) window enabled: 2253.8 to 2354.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,424 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 2354.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,424 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 6 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,424 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-676) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,425 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-676) window enabled: 2413.1 to 2541.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,425 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 2541.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,425 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 14 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,425 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-616) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,426 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-616) window enabled: 3256.7 to 3355.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,426 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2132.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 3355.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,507 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mimaged Target(tgt-137)\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,511 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[mTotal reward: {'EO-2': np.float64(0.0008577206104491057)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,511 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mSatellite EO-2 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,515 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mFinding opportunity windows from 4200.00 to 4800.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,541 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[mStep reward: {'EO-2': np.float64(0.0008577206104491057)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,543 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,544 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 29 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,544 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-277) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,545 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-277) window enabled: 5128.8 to 5259.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,545 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 5259.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,546 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 23 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,546 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-170) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,546 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-170) window enabled: 4601.7 to 4678.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,547 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 4678.4\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,547 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 10 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,547 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-797) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,548 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-797) window enabled: 2698.5 to 2825.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,548 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 2825.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,548 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 17 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,549 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-792) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,549 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-792) window enabled: 3522.0 to 3583.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,549 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 3583.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,550 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 1 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,550 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-161) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,551 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-161) window enabled: 2218.7 to 2291.5\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,551 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2255.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 2291.5\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,578 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtimed termination at 2291.5 for Target(tgt-161) window\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,581 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,581 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mSatellite EO-4 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,583 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 5400.00 to 6000.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,605 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,607 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,607 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 8 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,608 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-921) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,609 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-921) window enabled: 2670.3 to 2799.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,609 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 2799.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,609 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 24 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,609 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-512) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,610 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-512) window enabled: 4746.0 to 4873.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,611 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 4873.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,611 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 6 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,611 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-80) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,612 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-80) window enabled: 2480.4 to 2602.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,612 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 2602.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,613 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 19 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,613 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-671) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,613 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-671) window enabled: 3631.3 to 3763.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,614 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 3763.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,614 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 8 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,614 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-674) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,615 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-674) window enabled: 3009.1 to 3130.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,615 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2291.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 3130.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,738 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mimaged Target(tgt-80)\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,742 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[mTotal reward: {'EO-2': np.float64(0.08840927015116723)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,742 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mSatellite EO-2 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,759 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mFinding opportunity windows from 4800.00 to 5400.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,777 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[mStep reward: {'EO-2': np.float64(0.08840927015116723)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,779 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,779 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 22 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,779 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-675) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,780 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-675) window enabled: 4061.6 to 4192.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,780 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 4192.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,781 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 24 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,781 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-676) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,782 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-676) window enabled: 4791.4 to 4913.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,782 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 4913.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,782 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 4 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,783 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-302) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,783 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-302) window enabled: 2622.9 to 2720.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,784 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 2720.1\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,784 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 28 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,784 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-710) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,785 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-710) window enabled: 4612.5 to 4729.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,785 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 4729.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,785 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 16 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,785 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-113) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,786 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-113) window enabled: 3639.1 to 3766.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,786 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2481.50> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 3766.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,965 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mimaged Target(tgt-302)\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,968 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[mTotal reward: {'EO-2': np.float64(0.0957016530027815)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,969 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mSatellite EO-2 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,973 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mFinding opportunity windows from 4800.00 to 5400.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:54,992 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mFinding opportunity windows from 4800.00 to 5400.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,010 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[mStep reward: {'EO-2': np.float64(0.0957016530027815)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,012 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,012 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 24 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,012 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-277) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,013 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-277) window enabled: 5128.8 to 5259.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,014 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 5259.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,014 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 13 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,014 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-773) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,015 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-773) window enabled: 3791.8 to 3919.7\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,015 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 3919.7\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,015 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 9 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,016 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-433) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,016 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-433) window enabled: 3216.8 to 3298.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,016 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 3298.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,017 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 0 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,017 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-235) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,018 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-235) window enabled: 2520.7 to 2625.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,018 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 2625.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,018 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 26 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,019 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-292) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,019 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-292) window enabled: 4487.8 to 4601.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,020 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2624.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 4601.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,023 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtimed termination at 2625.6 for Target(tgt-235) window\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,026 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,027 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mSatellite EO-3 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,035 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,037 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,037 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 12 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,038 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-292) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,039 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-292) window enabled: 3304.2 to 3418.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,039 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 3418.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,039 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 0 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,040 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-271) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,040 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-271) window enabled: 2723.7 to 2776.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,041 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 2776.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,041 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 24 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,041 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-1018) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,042 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-1018) window enabled: 4513.7 to 4589.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,042 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 4589.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,042 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 7 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,043 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-314) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,043 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-314) window enabled: 3172.9 to 3290.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,043 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 3290.3\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,044 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 13 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,044 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-97) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,045 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-97) window enabled: 3571.0 to 3687.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,045 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2626.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 3687.8\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,112 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mimaged Target(tgt-271)\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,115 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[mTotal reward: {'EO-1': np.float64(0.004597230086921116)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,116 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mSatellite EO-1 requires retasking\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,117 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mFinding opportunity windows from 6000.00 to 6600.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,137 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mFinding opportunity windows from 5400.00 to 6000.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,157 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[mStep reward: {'EO-1': np.float64(0.004597230086921116)}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,159 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[93;1m=== STARTING STEP ===\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,159 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mtarget index 15 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,159 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-675) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,160 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[mTarget(tgt-675) window enabled: 4061.6 to 4192.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,161 \u001b[0m\u001b[36msats.satellite.EO-0 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[36mEO-0: \u001b[0m\u001b[msetting timed terminal event at 4192.0\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,161 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mtarget index 2 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,161 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-675) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,162 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mTarget(tgt-675) window enabled: 2888.4 to 2986.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,162 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[msetting timed terminal event at 2986.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,163 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mtarget index 22 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,163 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-314) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,164 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mTarget(tgt-314) window enabled: 4375.4 to 4439.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,164 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[msetting timed terminal event at 4439.6\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,164 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mtarget index 30 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,165 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-756) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,165 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[mTarget(tgt-756) window enabled: 5363.3 to 5441.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,166 \u001b[0m\u001b[95msats.satellite.EO-3 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[95mEO-3: \u001b[0m\u001b[msetting timed terminal event at 5441.2\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,166 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mtarget index 27 tasked\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,166 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-950) tasked for imaging\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,167 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[mTarget(tgt-950) window enabled: 4533.8 to 4659.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,167 \u001b[0m\u001b[96msats.satellite.EO-4 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2725.00> \u001b[0m\u001b[96mEO-4: \u001b[0m\u001b[msetting timed terminal event at 4659.9\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,251 \u001b[0m\u001b[mdata.base \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2850.00> \u001b[0m\u001b[mTotal reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,253 \u001b[0m\u001b[92msats.satellite.EO-1 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2850.00> \u001b[0m\u001b[92mEO-1: \u001b[0m\u001b[mFinding opportunity windows from 5400.00 to 6000.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,268 \u001b[0m\u001b[34msats.satellite.EO-2 \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2850.00> \u001b[0m\u001b[34mEO-2: \u001b[0m\u001b[mFinding opportunity windows from 5400.00 to 6000.00 seconds\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,288 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2850.00> \u001b[0m\u001b[mStep reward: {}\u001b[0m\n", "\u001b[90;3m2025-03-26 15:49:55,289 \u001b[0m\u001b[mgym \u001b[0m\u001b[mINFO \u001b[0m\u001b[33m<2850.00> \u001b[0m\u001b[mEpisode truncated: ['EO-0', 'EO-1', 'EO-2', 'EO-3', 'EO-4']\u001b[0m\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Episode complete.\n" ] } ], "source": [ "count = 0\n", "while True:\n", "\n", " if count == 0:\n", " # Vector with an action for each satellite (we can pass different actions for each satellite)\n", " # Tasking all satellites to charge (tasking None as the first action will raise a warning)\n", " action_dict = {sat_i.name: 0 for sat_i in env.satellites}\n", " else:\n", " # Tasking random actions\n", " action_dict = {sat_i.name: np.random.randint(0, 32) for sat_i in env.satellites}\n", " count += 1\n", "\n", " observation, reward, terminated, truncated, info = env.step(action_dict)\n", "\n", " if all(terminated.values()) or all(truncated.values()):\n", " print(\"Episode complete.\")\n", " break" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After the running the simulation, we can check the reward, number of imaged targets that were covered by clouds and that were not covered by clouds (according to the threshold set in the rewarder)." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total reward: {'EO-0': np.float64(0.0), 'EO-1': np.float64(0.004597230086921116), 'EO-2': np.float64(0.1849686437643978), 'EO-3': 0.0, 'EO-4': 0.0}\n", "Number of total images taken: 5\n", "Number of imaged targets (once or more): 5\n", "Number of re-images: 0\n", "Number of completely imaged targets: 0\n" ] } ], "source": [ "print(\"Total reward:\", env.unwrapped.rewarder.cum_reward)\n", "print(\"Number of total images taken:\", len(env.unwrapped.rewarder.data.imaged))\n", "print(\n", " \"Number of imaged targets (once or more):\",\n", " len(set(env.unwrapped.rewarder.data.imaged)),\n", ")\n", "print(\n", " \"Number of re-images:\",\n", " len(env.unwrapped.rewarder.data.imaged)\n", " - len(set(env.unwrapped.rewarder.data.imaged)),\n", ")\n", "print(\n", " \"Number of completely imaged targets:\",\n", " len(env.unwrapped.rewarder.data.imaged_complete),\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check [Training with RLlib PPO](../examples/rllib_training.ipynb) for an example on how to train the agent in this environment." ] } ], "metadata": { "kernelspec": { "display_name": ".venv_update_cloud_env_JAIS", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" } }, "nbformat": 4, "nbformat_minor": 2 }