A reproducible experimental framework for constrained Earth-observation scheduling.
Open the hosted research interface
From target geometry to a validated schedule, every decision remains reproducible, inspectable, and backed by the same simulation core.
Satellite scheduling demos often stop at a score. OrbitOps Lab keeps the whole evidence chain visible: a solver proposes task assignments, the discrete-event simulator reconstructs resource state, and the validator independently checks time windows, overlap, slew, energy, and storage constraints.
The algorithms, simulator, constraint system, benchmark harness, and linear Q-learning loop are implemented from scratch. Third-party libraries provide general infrastructure and 3D rendering—not the scheduling answers reported by the project.
| Explore | Optimize | Verify |
|---|---|---|
| CesiumJS/WGS84 target geometry and observation sequence | 10 baseline, exact, stochastic-search, and learning solvers | One shared simulator, explainable violations, and reproducible artifacts |
| Visibility-aware mission Gantt chart | Seeded budgets and convergence traces | Energy/storage envelopes and feasibility verdicts |
| Q-learning objective, epsilon, and TD-error curves | Branch-and-bound optimality on small instances | Golden, property, unit, and integration tests |
- 3D mission geometry: an interactive CesiumJS globe places every WGS84 target on NASA Blue Marble imagery, highlights selected observations, draws the scheduled target sequence, and provides an explicitly notional orbit-context track. It requires no Cesium ion token, retains a Natural Earth fallback, and sends no scenario data to a hosted scheduler.
- Mission Gantt: every target receives a row containing all committed visibility windows, the selected observation interval, and its preceding slew.
- Resource envelope: energy remaining and storage consumed are replayed from the authoritative simulator after each observation.
- Learning diagnostics: Q-learning runs expose policy objective, exploration decay, and normalized mean absolute temporal-difference error by episode.
- Honest boundary: the globe is a mission-context view. High-fidelity orbit propagation is deliberately outside v0.1 and is never implied by the display.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
orbitops lab --scenarios scenariosOpen http://127.0.0.1:8000. The Web Lab starts with the committed demonstration
scenario and a seeded 250-episode Q-learning run, so the 3D mission view, Gantt,
resource envelope, and training curves are visible immediately.
The GitHub Pages interface provides a serverless reproducibility view. It contains 30 build-time results covering the three committed scenarios and ten solvers at seed 42 and evaluation budget 250. The hosted controls select these recorded artifacts; local execution remains the authoritative mode for arbitrary seeds, budgets, and new scenarios.
The same domain core is available from the command line:
orbitops validate scenarios/examples/demo.json
orbitops solve scenarios/examples/demo.json --solver genetic --seed 42 --evaluation-budget 500
orbitops solve scenarios/tiny/tiny-conflict.json --solver branch-and-bound
orbitops benchmark configs/benchmark-smoke.toml --output runs/benchmark-smoke
orbitops train scenarios/examples/demo.json --model-output runs/demo-policy.json --episodes 250
pytest| Family | Implementations | Evidence |
|---|---|---|
| Baseline | random feasible, value, value density, deadline, global insertion | Deterministic contracts and feasibility replay |
| Exact | exhaustive search, branch-and-bound | Optimality on bounded tiny scenarios |
| Search | multi-start local search, genetic algorithm | Seeded evaluation budgets and convergence traces |
| Learning | scenario-bound linear Q-learning | Versioned policy JSON, training trace, fingerprint-checked replay |
The objective is lexicographic: maximize total priority value, then completed task count, then minimize total slew time. Every solver returns decisions through the same contract and is scored by the same independent simulation path.
- Immutable, versioned Pydantic models at package boundaries.
- Canonical Scenario, Schedule, and learned-policy JSON Schemas.
- Seeded stochastic solvers, benchmark campaigns, and learning experiments.
- Reproducibility fingerprints for reports and scenario-bound policies.
- Strict mypy, Ruff, unit, integration, property, and golden-test coverage.
- Standalone benchmark reports that contain no plotting-framework dependency.
packages/orbitops/
├── domain/ # immutable contracts and lexicographic objective
├── simulation/ # transitions, event replay, resources, validation
├── solvers/ # baseline, exact, search, and Q-learning solvers
├── learning/ # environment, trainer, policy artifact
├── benchmarking/ # scenario generation, campaigns, aggregation
├── reporting/ # standalone HTML benchmark evidence
└── web/ # local API and interactive mission lab
scenarios/ # committed reproducible inputs
schemas/ # versioned JSON contracts
tests/ # unit, integration, property, and golden tests
docs/ # formulation, algorithms, architecture, and evidence
v0.1 models one agile satellite, multiple observation targets, offline planning, precomputed visibility windows, attitude slew, energy, and storage. Downlink planning, multi-satellite coordination, high-resolution terrain, time-varying weather layers, and high-fidelity orbit propagation are deliberate future extensions.
Start with the problem formulation, then see the simulation model, algorithms, benchmarking, visual reports, Web Lab, and reinforcement learning.
Release scope: v0.1 includes the reproducible mission core, 10 solvers, benchmark reports, Cesium mission context, validated Gantt and resource views, and scenario-bound Q-learning diagnostics.

