Swarm Track Fusion N=20 sparse straight
PARITYS1 · dim 140No clear winner. The survival gap is under 10 percentage points and the balanced-score gap is under 0.05, so neither SolvSRK nor the best baseline clears the win threshold. Either works - choose on cost, licensing, or integration effort. All verdicts →
20-target coordinated-turn tracking with proximity-based dynamic coupling. Per-target state [x,y,z,vx,vy,vz,omega] (dim=140). Sparse initial spacing (300.0m). Maneuver: straight. 4 noise channels/target. Scale-probe variant for counter-UAS swarm-size validation.
Problem definition
Bar-Shalom, Willett & Tian, 'Tracking and Data Fusion', Ch. 6; Blackman & Popoli, 'Design and Analysis of Modern Tracking Systems'
Canonical RHS excerpt from the registered callable used for this benchmark cell. Expand it to verify the state equations; it is not a standalone runnable fixture.
Show canonical RHS excerpt
def rhs(t: float, y: np.ndarray) -> np.ndarray:
d = np.zeros(dim)
# ── Per-target coordinated-turn dynamics ─────────────────
positions = np.empty((N_targets, 3))
for i in range(N_targets):
b = i * _STATES_PER_TARGET
vx, vy, vz = y[b + 3], y[b + 4], y[b + 5]
omega = y[b + 6]
d[b + 0] = vx
d[b + 1] = vy
d[b + 2] = vz
d[b + 3] = -omega * vy
d[b + 4] = omega * vx
d[b + 5] = 0.0
d[b + 6] = 0.0
positions[i, 0] = y[b + 0]
positions[i, 1] = y[b + 1]
positions[i, 2] = y[b + 2]
# Process noise (interpolated)
ch = 4 * i
d[b + 3] += np.interp(t, noise_ts, noise_table[ch + 0])
d[b + 4] += np.interp(t, noise_ts, noise_table[ch + 1])
d[b + 5] += np.interp(t, noise_ts, noise_table[ch + 2])
d[b + 6] += sigma_omega * np.interp(t, noise_ts, noise_table[ch + 3])
# ── Proximity-based dynamic coupling ──────────────────────
for i in range(N_targets):
bi = i * _STATES_PER_TARGET
for j in range(i + 1, N_targets):
bj = j * _STATES_PER_TARGET
dx = positions[j, 0] - positions[i, 0]
dy = positions[j, 1] - positions[i, 1]
dz = positions[j, 2] - positions[i, 2]
dist_sq = dx * dx + dy * dy + dz * dz
if dist_sq < gate_sq:
# Soft association weight (Gaussian decay within gate)
w = coupling_strength * np.exp(-0.5 * dist_sq / (gate_sq * 0.25))
inv_dist = 1.0 / np.sqrt(dist_sq + _EPS)
ux, uy, uz = dx * inv_dist, dy * inv_dist, dz * inv_dist
# Symmetric velocity perturbation (proximity-induced track confusion)
d[bi + 3] += w * ux
d[bi + 4] += w * uy
d[bi + 5] += w * uz
d[bj + 3] -= w * ux
d[bj + 4] -= w * uy
d[bj + 5] -= w * uz
# Cross-coupling bleeds into turn-rate estimates
bearing_ij = np.arctan2(dy, dx + _EPS)
d[bi + 6] += 0.1 * w * np.sin(bearing_ij)
d[bj + 6] -= 0.1 * w * np.sin(bearing_ij)
return d- Parameters
- N_targets = 20
- _EPS = 1e-12
- _STATES_PER_TARGET = 7
- coupling_strength = 0.5
- dim = 140
- gate_sq = 22500
- noise_table = [0.377038385025, -1.26638818038, -0.755127010466, -2.18229223524, -2.55536033277, 1.26082298154, …] [shape=(80, 601), min=-8.04631729511, max=9.46391537727]
- noise_ts = [0, 0.05, 0.1, 0.15, 0.2, 0.25, …] [shape=(601,), min=0, max=30]
- sigma_omega = 0.01
- Initial condition
- y(0) = [150, 0, 102.514604422, -24.1400960653, -3.10899316614, -0.947549941423, …] [shape=(140,), min=-427.975432333, max=450]
- Horizon
- t ∈ [0, 30]
Canonical RHS excerpt captured from the same registered callable used for the published benchmark. Frozen closure values are summarized below; helper imports and solver settings are intentionally omitted.
Fingerprint
Spread: extreme
Default noise: medium
Recommendation snapshot
Clean best: SolvSRK
Noisy best: SciPy BDF
Coverage
14 solver arms · clean + 5 noise levels
Ranked on survival, precision, and speed
Versions & freeze
Methodology →- Freeze
- 2026-08-13
- libsolvsrk
- 2.3.0
- SciPy
- 1.14
- SUNDIALS
- CVODE (bundled backend)
20 seeds/cell default · 14 arms · TRL 4–5 · simulation-lab validated · this page: Swarm Track Fusion N=20 sparse straight (swarm-track-fusion-n-20-sparse-straight)
Governed SolvTune benchmark freeze; per-arm medians only. RHS definitions and raw trial rows are not published.
Self-reported by Resonix Labs · not independently verified
Results matrix
Pick an objective and a noise level to rank all arms on survival, median SCD, median nfev, and median wall time. Medians across seeds.
Objective
Best overall trade-off of survival, precision, and speed.
Noise level
| # | Solver | Survival | SCD | nfev | Wall | Score |
|---|---|---|---|---|---|---|
| 1 | SolvSRK | 100% | - | 106,267 | 45.73 s | 0.809 |
| - | SciPy BDFSciPy | 0% | - | - | - | - |
| - | SciPy RadauSciPy | 0% | - | - | - | - |
| - | SciPy RK45SciPy | 0% | - | - | - | - |
| - | SciPy LSODASciPy | 0% | - | - | - | - |
| - | SciPy DOP853SciPy | 0% | - | - | - | - |
| - | SciPy RK23SciPy | 0% | - | - | - | - |
| - | CVODE BDFexternal | 0% | - | - | - | - |
| - | CVODE Adamsexternal | 0% | - | - | - | - |
| - | Tsit5external | 0% | - | - | - | - |
| - | Vern7external | 0% | - | - | - | - |
| - | Vern9external | 0% | - | - | - | - |
| - | TRBDF2external | 0% | - | - | - | - |
| - | FBDFexternal | 0% | - | - | - | - |
At Clean, best balanced arm is SolvSRK.
Values are medians across seeds, measured by Resonix Labs on Resonix hardware and not independently verified; nfev and wall are on reference lab hardware (indicative). Under injected noise only SolvSRK and the SciPy arms are run. How we measure accuracy → · Verification status →
Cite this page
Replace the access date. Pin the freeze ID and library versions when comparing against a later export. Cite it as what it is - a self-reported vendor benchmark, not an independently verified result. The note field says so; please keep it.
@misc{resonix_evidence_swarm_track_fusion_n_20_sparse_straight_2026,
title = {Resonix Evidence Portal: Swarm Track Fusion N=20 sparse straight},
author = {{Resonix Labs (Canada) Inc.}},
year = {2026},
howpublished = {\url{https://resonixusa.com/evidence/problems/swarm-track-fusion-n-20-sparse-straight}},
note = {Self-reported vendor benchmark; internally generated by Resonix Labs and not independently verified. Accessed YYYY-MM-DD. Freeze 2026-08-13; libsolvsrk 2.3.0; SciPy 1.14.}
}Related
TRL 4–5 · simulation-lab validated · 398 problems · 14 solver arms · clean + 5 noise levels
Freeze: 2026-08-13 · scipy 1.14 · libsolvsrk 2.3.0 · Methodology
Self-reported by Resonix Labs · not independently verified · Verification status