Skip to main content

TMA via ML

Can a neural network learn target motion analysis from bearings alone?

This is a proof of concept, not a product. A neural network is trained on large volumes of simulated bearings-only data, and asked to estimate a target's range, course and speed. Each iteration ends at a gate; a failed early gate ends the project with a short write-up.

Current gate status

ExperimentGateVerdictDecided by
20261108-p7-g5G5passagent review panel, rounds 1-2 (no rejections, no open blocker or major; experiments/20261108-p7-g5/review.md)
20261108-g0-p7-r1G0passagent review panel, rounds 0-2 (no rejections, no open blocker or major; experiments/20261108-g0-p7-r1/review.md)
20261108-g0-p7G0passsuperseded (round 0, the agent's first severity; never panel-approved): see experiments/20261108-g0-p7-r1/review.md
20261106-p6v-g7G7passagent review panel, rounds 1-2 (no rejections, no open blocker or major; experiments/20261106-p6v-g7/review.md)
20261106-p6u-g7G7inconclusiveagent review panel, rounds 1-2 (no rejections, no open blocker or major; experiments/20261106-p6u-g7/review.md)
20261102-p4f-g5G5passagent review panel, rounds 1-2 (no rejections, no open blocker or major; experiments/20261102-p4f-g5/review.md)
20261101-p4h-g5G5passagent review panel, rounds 1-2 (no rejections, no open blocker or major; experiments/20261101-p4h-g5/review.md)
20261030-g0-p4-r3G0passagent review panel, rounds 1-3 (no rejections; no blocker or major open): G0 PASS (experiments/20261030-g0-p4-r3/review.md)
20261030-g0-p4-r2G0passharness (pending agent panel review)
20261030-g0-p4-r1G0passharness (pending agent panel review)
20261030-g0-p4-r0G0failharness (pending agent panel review)
20261028-i5-g3G3passagent review panel, round 1 (no rejections; no open blocker or major findings): G3 PASS for the hybrid (classical with the iteration-4 LSTM as fallback; not a network alone) on seed 207, 20,000 test scenarios. Every median and P90 within 0.97-1.02 x classical against 1.2; gross-error rate at zig+300s 0.569% vs 1.190% (-0.620 pp [-0.824, -0.417]); at zig+600s 0.170% vs 0.139%, reported, not gated
20261028-g0-p3-r2G0passagent review panel, rounds 1-2 (no rejections; no blocker or major open): G0 PASS (experiments/20261028-g0-p3-r2/review.md)
20261028-g0-p3G0passharness (pending agent panel review)
20261025-i4-g2-rescoreG2passagent review panel, round 1 on the result (no rejections; no open blocker or major findings): G2 PASS on the SRD 7 re-score, seed 206, 100,000 test scenarios, frozen models. Instantaneous speed 0.939 kt [0.926, 0.951] against 1 kt (classical 0.319, naive 4.23); time-late 0.740 kt; range and course pass for both. Seed 205 (inconclusive, 0.981 kt) is reported, not pooled
20261024-i4-g2G2inconclusiveagent review panel, round 3 (no rejections; no open blocker or major findings): G2 INCONCLUSIVE on instantaneous speed, 0.981 kt [0.940, 1.031] against 1 kt; every other check passes. SRD 7 re-score pre-registered: experiments/20261024-i4-rescore-decision (seed 206, 100,000 test scenarios, frozen models); a fail or inconclusive there is final
20261017-g0-i3-r3G0passagent review panel, round 3 (no rejections; no open blocker or major findings): G0 PASS on generator 0.3.0 (second zig, across-LOS turns; spec 007); see review.md
20261017-g0-i3-r2G0passsuperseded: round-2 evidence of the iteration-3 G0 panel; the round-2 fixes changed the G0 checks (packages/eval), so G0 was re-run and the verdict of record is ../20261017-g0-i3-r3 (see its review.md)
20261017-g0-i3G0passsuperseded: round-1 evidence of the iteration-3 G0 panel; the round-1 fixes changed the G0 checks (packages/eval), so G0 was re-run and the verdict of record is ../20261017-g0-i3-r3 (see its review.md)
20261016-i2d-g2G2failagent review panel, round 2 (no rejections; no open blocker or major findings): G2 FAIL (SRD §5); speed fails for both variants (CI wholly above 1 kt: 1.47 kt [1.37, 1.52] and 1.53 kt [1.47, 1.61]); range and course pass for both; iteration 2c is the last allowed under G2 (SRD §7): no-go; see review.md
20261015-i2c-g2G2failagent review panel, round 2 (no rejections; no open blocker or major findings): G2 FAIL (SRD §5); speed fails for both variants (CI wholly above 1 kt: 1.77 kt [1.68, 1.83] and 1.77 kt [1.67, 1.86]); range and course pass for both; see review.md
20261014-i2-g2G2failagent review panel, round 2 (no rejections; no open blocker or major findings): G2 FAIL (SRD §5); speed fails for both variants (CI wholly above 1 kt), time-late course and g1-time-late also fail; see review.md
20261013-g0-i2-r2G0passagent review panel, rounds 1-3 (no rejections; no open blocker or major findings): G0 pass for generator 0.2.0 at 24bbdab; see review.md
20261013-g0-i2G0passsuperseded: round-1 evidence of the iteration-2 G0 panel; the round-1 fixes changed packages/data/src, so the verdict of record is ../20261013-g0-i2-r2 (see its review.md)
20261012-g1-r2G1inconclusiveagent review panel, round 3 (no rejections; no open blocker or major findings): G1 PASS under pre-registered rule 1 (SRD §5, amended 2026-10-12); machine result inconclusive from time-late-not-worse, caveat recorded; see review.md
20261012-g1G1failinformational only: the training run's own scoring (train/i1 code, no bootstrap); verdict of record is ../20261012-g1-r2 (agent review panel, round 3: G1 pass)
20261011-g1-r2G1failagent review panel, rounds 1-2: fail as run (time-late undertrained, 25 of 60 epochs); one continuation pre-registered under SRD §5 (amended 2026-10-12), decided in ../20261012-g1-r2/review.md
20261011-g0-r3G0passagent review panel, round 3 (no rejections; no open blocker or major findings): see review.md
20261011-g0-r2G0passharness (pending agent panel review)
20261011-g0G0passharness (pending team review)

Machine verdicts come from experiments/*/verdict.json. An agent review panel (five independent specialist reviewers, iterated until none rejects) takes the decision; its record is review.md in the experiment folder.

The plan

GateCriterionIf failed
G0 — pipelineClassical solver recovers noise-free truth; naive baseline reproducesFix the generator before any training
G1 — signal existsModel median range error < 50% of the naive baseline's, both variantsStop: report and close
G2 — usefulMedian range error < 20%, course < 10°, speed < 1 kt at σ = 1°One more iteration, then stop
G3 — classical parityWithin 1.2× classical on every metric, lower gross-error rateNot a stop; sets the next bar

Read more