# Canonical aeossp_standard dataset construction for the finished benchmark.
#
# test is the primary medium-difficulty split. test_horizon_2022
# keeps the same generation controls and swaps only the vendored TLE snapshot,
# which shifts the mission horizon to the matching April 2022 orbit epoch.
# train mirrors test generation controls and expands to 10 cases.

example_smoke_case: test/case_0001

source:
  celestrak:
    kind: vendored_subset
    url: https://celestrak.org/NORAD/elements/gp.php?GROUP=resource&FORMAT=tle
    snapshot_epoch_utc: "2026-04-14T00:00:00Z"
    supported_snapshot_epochs_utc:
      - "2026-04-14T00:00:00Z"
      - "2022-04-14T00:00:00Z"
  world_cities:
    kind: geonames_dump
    url: https://download.geonames.org/export/dump/cities15000.zip
  natural_earth_land:
    kind: natural_earth_geojson
    url: https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_110m_land.geojson

splits:
  test: &test_split
    seed: 42
    case_count: 5
    case_seed_stride: 1009

    mission:
      case_start_spacing_hours: 2
      horizon_hours: 12
      action_time_step_s: 5
      geometry_sample_step_s: 5
      resource_sample_step_s: 10
      task_access_sample_step_s: 30

    satellite_pool:
      min_altitude_m: 450000.0
      max_altitude_m: 900000.0
      min_retained_count: 40
      include_name_tokens:
        - CAPELLA
        - LANDSAT
        - SENTINEL-2
        - SPOT
        - PLEIADES
        - PNEO
        - DEIMOS
        - GAOFEN
        - ZIYUAN
        - SUPERDOVE
        - SKYSAT
        - KANOPUS
        - FORMOSAT-5
        - CARTOSAT
        - RESOURCESAT
        - THEOS
        - EROS
      exclude_name_tokens:
        - SAR
        - ICEYE
        - RADARSAT
        - RISAT
        - RCM
        - SAOCOM
        - COSMO
        - UMBRA
        - TERRASAR
        - PAZ
        - ALOS-2
        - QPS-SAR
        - STRIX

    satellites: &test_satellites
      min_per_case: 20
      max_per_case: 28
      template_fractions:
        infrared_balanced: 0.20
        visible_agile: 0.32
        visible_balanced: 0.48
      templates:
        visible_agile:
          sensor_type: visible
          max_off_nadir_deg: 30.0
          max_slew_velocity_deg_per_s: 1.8
          max_slew_acceleration_deg_per_s2: 0.4
          settling_time_s: 2.0
          battery_capacity_wh: 1300.0
          initial_battery_wh: 800.0
          idle_power_w: 20.0
          imaging_power_w: 420.0
          slew_power_w: 360.0
          sunlit_charge_power_w: 85.0
        visible_balanced:
          sensor_type: visible
          max_off_nadir_deg: 25.0
          max_slew_velocity_deg_per_s: 1.0
          max_slew_acceleration_deg_per_s2: 0.25
          settling_time_s: 3.0
          battery_capacity_wh: 1600.0
          initial_battery_wh: 1000.0
          idle_power_w: 25.0
          imaging_power_w: 480.0
          slew_power_w: 280.0
          sunlit_charge_power_w: 100.0
        infrared_balanced:
          sensor_type: infrared
          max_off_nadir_deg: 20.0
          max_slew_velocity_deg_per_s: 0.9
          max_slew_acceleration_deg_per_s2: 0.15
          settling_time_s: 3.5
          battery_capacity_wh: 1800.0
          initial_battery_wh: 1000.0
          idle_power_w: 30.0
          imaging_power_w: 680.0
          slew_power_w: 320.0
          sunlit_charge_power_w: 115.0

    tasks: &test_tasks
      min_per_case: 1600
      max_per_case: 2000
      min_target_separation_m: 20000.0
      city_fraction: 0.5
      visible_fraction: 0.9
      city_weight_options: [3.0, 4.0, 5.0]
      background_weight_options: [1.0, 1.5, 2.0]
      duration_options_s: [20, 30, 40, 45, 50, 60, 70, 75, 80, 90, 100, 120]
      hotspot_probability: 0.70
      hotspot_count: 5
      hotspot_min_spacing_s: 3600
      hotspot_window_slack_options_s: [300, 600, 900, 1200]
      uniform_window_slack_options_s: [900, 1200, 1800, 2400, 3600]

  test_horizon_2022:
    <<: *test_split
    source:
      celestrak:
        snapshot_epoch_utc: "2022-04-14T00:00:00Z"

  test_easy:
    <<: *test_split
    seed: 123
    satellites:
      <<: *test_satellites
      min_per_case: 20
      max_per_case: 28
    tasks:
      <<: *test_tasks
      min_per_case: 1200
      max_per_case: 1500
      visible_fraction: 0.95
      duration_options_s: [20, 30, 40, 45, 50, 60, 70, 75, 80, 90]
      hotspot_probability: 0.50
      hotspot_window_slack_options_s: [600, 900, 1200, 1800]
      uniform_window_slack_options_s: [1200, 1800, 2400, 3600, 5400]

  test_hard:
    <<: *test_split
    seed: 777
    satellites:
      <<: *test_satellites
      min_per_case: 32
      max_per_case: 40
    tasks:
      <<: *test_tasks
      min_per_case: 3200
      max_per_case: 4000
      city_fraction: 0.12
      visible_fraction: 0.82
      duration_options_s: [40, 45, 50, 60, 70, 75, 80, 90, 100, 120, 150]
      hotspot_probability: 0.85
      hotspot_window_slack_options_s: [300, 450, 600, 900]
      uniform_window_slack_options_s: [600, 900, 1200, 1800, 2400]

  train:
    <<: *test_split
    seed: 2026
    case_count: 10
