Guardian simulator results
Generated by tools/guardian_sim.py from 40 seeded runs per scenario and design (Python 3.10.12, Linux). The simulator is kinematic and its parameters are illustrative round numbers; the design and evaluation explains each design and what the numbers mean.
Guardians kept clear of every threat
Share of runs in which every airborne guardian stayed outside the 75 m safe radius of every real threat.
| Scenario | Station only | Onboard only | Networked | Hybrid |
|---|---|---|---|---|
| intruder | 88% | 100% | 100% | 100% |
| fast_inbound | 0% | 0% | 10% | 10% |
| swarm | 55% | 100% | 100% | 100% |
| birds | — | — | — | — |
| jamming | 65% | 100% | 68% | 100% |
| spoofing | — | — | — | — |
| center_loss | 90% | 100% | 100% | 100% |
| combined | 65% | 98% | 88% | 100% |
Warning before arrival
Median seconds from the station's RED alert to the threat entering the 100 m protected zone (or its closest approach, if the station moved out of the way); 10th to 90th percentile in brackets.
| Scenario | Station only | Onboard only | Networked | Hybrid |
|---|---|---|---|---|
| intruder | 1 (0–6) | 0 (0–5) | 77 (56–96) | 75 (56–96) |
| fast_inbound | 0 (0–0) | 0 (0–0) | 3 (2–4) | 3 (2–4) |
| swarm | 1 (0–3) | 0 (0–2) | 73 (54–85) | 73 (54–85) |
| birds | — | — | — | — |
| jamming | 1 (0–5) | 0 (0–3) | 28 (23–32) | 33 (29–59) |
| spoofing | — | — | — | — |
| center_loss | 1 (0–5) | 0 (0–4) | 74 (61–90) | 74 (61–90) |
| combined | 0 (0–1) | 0 (0–1) | 59 (32–86) | 54 (38–85) |
Other measures
| Measure | Station only | Onboard only | Networked | Hybrid |
|---|---|---|---|---|
| False RED alerts, birds scenario (total) | 0 | 0 | 0 | 0 |
| False RED alerts, spoofing scenario (total) | 1 | 2 | 2 | 0 |
| Jammed picket acts alone (median s) | — | — | — | 2.8 |
| GNSS drag-off detected (median s) | — | — | — | 38 |
| Spoofed picket drift (median m) | 609 | 609 | 609 | 65 |
| Center could decide in time, low intruder | 0% | 0% | 100% | 100% |
| Healthy guardian flagged as spoofed, all scenarios (total) | 0 | 0 | 0 | 0 |
| Worst navigation error of a healthy guardian, all scenarios (m) | 0 | 0 | 0 | 0 |
| Runs where a move brought a guardian nearer a real threat, judged on truth | 2 | 18 | 22 | 22 |
Both invariants held in 1280 of 1280 runs (100.0%). First: every keep-clear or dispersal decision, new or kept, opened the range along its whole path to every relevant slow track it was based on (not a bird, predicted to pass within twice the clear radius inside twice the planning horizon), and shortened no steady fast object's predicted miss. Second: no layer took an action outside its authority. Both are properties of the decisions, checked in every run. The row above measures the same thing on truth instead: a run counts if some move brought a guardian more than 25 m nearer a real slow threat that a track was on and that truly passed within the clear radius inside the planning horizon, or shortened a real fast object's true miss by more than 25 m. These come from straight-line predictions of weaving threats at long range; whether any guardian lost its safe radius is what the first table shows.
Layout experiment (hybrid design)
| Layout | Low intruder warning (s) | Fast inbound kept clear | Fast inbound warning (s) | Swarm warning (s) |
|---|---|---|---|---|
| baseline: Pickets 900 m out; overwatch hovering over the station. | 75 | 10% | 2.9 | 73 |
| offset overwatch: Overwatch moved 250 m off the station it watches. | 77 | 90% | 2.9 | 73 |
| wide pickets: Pickets 1500 m out instead of 900 m. | 103 | 15% | 3.4 | 100 |
Reproduce
python3 tools/guardian_sim.py --seeds 40 --workers 8 --output artifacts/guardian
The report records the SHA-256 of tools/guardian.py and tools/guardian_sim.py; a test fails if either changes without regenerating it.