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
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