Skip to content

The v2.2.0 re-baseline campaign — plan

Status: complete (2026-10-16). No default moves; the control generation is v2.2.0's corpus. The results are at the end of this page. Above them, unchanged, is the pre-registration for #565. It was written and merged before the first run, so the order of operations, the arms and the decision rule were fixed before any number existed. The same rule governed the v1.5.0 campaign.

← Benchmark index · Methodology · Roadmap

What this campaign decides

v2.2.0 changes, or may change, protocol behaviour in three places. Each was measured as a weak spot by v1.9.0 or v2.0.0:

change issue the question arm(s)
RepairHoldCap 0 → 200 ms #433 The v1.5.0 flip moved only ReconvHoldCap. The ablation that chose 200 ms moved both caps and recovered about 168 ms more tail. Is the second cap worth its delivery cost on its own? repair200
the thesis's SINR link metric #181 The 2007 thesis reports SINR as its best metric and used it for every headline result. Does it beat classic here? sinr
VANET reconvergence #537 36 % of VANET traffic is lost to reconvergence, because corners break links about every 0.5 s. Do the two knobs #537 names close the gap? hello500, reconv1s (VANET screen first)

Measured one at a time, each change would re-measure every family page. That is the #365 failure. So this is one campaign: one control generation, every arm against it on identical seeds, and one restatement of every page at the end.

The cells: every family, every published cell

family cells workflow, harness seeds
MANET grid {rwp, ssrwp, gaussmarkov} × {tworay, nakagami} (6) paper-benchmark.yml, anthocnet-compare, scenario paper 20
static mesh sparse-static (1) paper-benchmark.yml, pause = time 20
FANET main (350 m), sparse (250 m) (2) paper-benchmark.yml, scenario fanet 20
VANET main (100 vehicles), sparse (40) (2) paper-benchmark.yml, scenario vanet 20
satellite, static ISL base, corridor, failcell, seam (4) satellite-benchmark.yml, isl-grid 20
satellite, moving walker16, starlink1, starlink1-storm (3) satellite-benchmark.yml, leo-walker (ns-3.48) 20

That makes 18 cells. Each one's dispatch inputs are the ones recorded in its ##CONFIG## header under results/cells/. The campaign changes only the AntHocNet attributes named per arm. The image is each cell's own: the -opt profile for campaign runs (#123), and 3.48 for leo-walker.

Arms

All arms run at one commit: the merge commit of the last code PR in phase 0, recorded as ##PROV## in every cell.

arm AntHocNet attributes protocols cells
control shipped defaults every arm the cell publishes (AntHocNet, the baselines, the oracle) all 18
repair200 RepairHoldCap=200ms anthocnet all 18
sinr LinkMetric=sinr anthocnet all 18
hello500 HelloInterval=500ms anthocnet VANET main first (screen)
reconv1s ReconvHoldCap=1s anthocnet VANET main first (screen)

Notes:

  • Only control runs the baselines. AODV, OLSR, DSDV, the oracle, AOMDV and GPSR do not read any AntHocNet attribute, so running them in every arm would spend runtime re-measuring byte-identical numbers.
  • Attribution control: one cell per family also runs repair200 with every protocol. Its baseline rows must be byte-identical to control's, or the harness moved and no delta in that family is attributable. This is sweep_summary.py --vs's exit-1 rule, applied by hand to ##BENCH## cells.
  • The control arm is also the re-baseline. If no default moves, the control cells are published as v2.2.0's corpus. The GPSR fix in #658 changes the GPSR rows of the six-arm cells, and the control generation records that.
  • On the satellite cells, sinr reads "no sample" on every point-to-point ISL, because those links have no PHY SINR (ADR-0024). There it is the hop-count metric, not SINR. It is still measured, because ADR-0019 requires every family, and the satellite page states what the arm is there.

Pre-registered decision rule

Every comparison is paired per seed against control, on the same 20 seeds: - PDR, NRL: t-interval; - delay99: bootstrap; - Wilcoxon signed-rank p; - computed with bench_parse.py --ab (##BENCH## cells) or the leo/isl summaries.

Per arm and cell, the verdict is PAIRED-IMPROVED, PAIRED-WORSE or NOISE under the script's rule.

A default moves only if, across all 18 cells: 1. no cell is PAIRED-WORSE on PDR (paired 95 % CI entirely below zero), and 2. no cell is PAIRED-WORSE on delay99 by more than 10 % while PDR is NOISE, and 3. at least one family is PAIRED-IMPROVED on PDR or on delay99.

This is ADR-0019: a change is earned everywhere or it is not the default.

Otherwise the change ships selectable and off: - repair200 keeps its attribute; - sinr keeps LinkMetric=sinr; - the per-family deltas go into the mechanism × regime table in network-regimes.md, so a reader who cares about one family can still use it.

#537's two knobs are screened on VANET main first. - An arm that is not PAIRED-IMPROVED on PDR there is recorded on #537 and stops. - An arm that is goes on to the other 17 cells and faces the rule above. - If neither closes most of the reconvergence loss, #537's finding stands. Its measured cause is link lifetime, which the preflight now reports, so v2.3.0's link-lifetime mechanism (#574) keeps its place, per the roadmap's trigger.

If two defaults move, their combination is a different protocol from either arm. A final combined arm then runs in all 18 cells with every protocol, and that generation is what the pages publish.

Phase order

Phase 0: code, no runs

  1. The SINR metric and its attribute (#181/#144, ADR-0024), merged with its own tests and the WASM parity gate.
  2. 537's preflight rule. scenario_check.py preflight now WARNs that a link

    round a street corner lives about streetWidth / speed (1.0 s on the vanet preset) rather than the 10.6 s distance bound. Merged with this plan.
  3. Every arm's attribute exists and is printed in ##CONFIG## attr, so each cell records which arm it is.
  4. scenario_check.py preflight passes (or only WARNs, with the WARNs stated) for every cell's inputs.

Phase 1: control

All 18 cells, every protocol, 20 seeds, at the phase-0 commit. Each cell is validated with scenario_check.py results and its anchor floor where it has one. A FAIL stops the campaign: it is a harness regression, and nothing measured on top of it is comparable.

Phase 2: arms

repair200 and sinr in all 18 cells, plus the attribution control. The VANET screen arms run alongside, on main. Each verdict is recorded on its issue when its last cell lands (ADR-0013).

Phase 3: decide and restate

Apply the rule. Then: - run the combined arm if two defaults moved; - restate every family page once, at the final configuration, with provenance: grid.md, static-mesh.md, the FANET and VANET scenario pages, and the two satellite pages; - update the roadmap's v2.2.0 row.

What would make this plan wrong

  • A phase-1 cell disagrees with the published corpus on a baseline row, and no harness change explains it. Stop and investigate first: the published baselines were measured on the same images.
  • An arm's attribute does not reach the run (its ##CONFIG## attr line shows the default). The cell is void; re-dispatch it.
  • sinr behaves identically to control on the Wi-Fi cells. That would mean the PHY hook is not delivering samples. Diagnose with a one-cell runs=2 dispatch before spending 20 seeds anywhere else.

Results

Verdict: no AntHocNet default changes in v2.2.0. All four arms fail rule 1: each has at least one cell where PDR is PAIRED-WORSE, with the paired 95 % CI entirely below zero. Each ships as it already did, selectable and off. No two defaults moved, so the combined arm did not run, and the control generation is v2.2.0's corpus.

arm attribute blocked by (PDR paired CI entirely below zero) where it helps issue
repair200 RepairHoldCap=200ms grid two-ray ×3, FANET sparse, VANET sparse VANET main: PDR +0.8–1.4 pp, delay99 −1.1 s, NRL −11 #433
sinr LinkMetric=sinr VANET main (all five seed blocks, −1.3 to −1.7 pp) grid two-ray, FANET main: about +0.3–0.4 pp, at a delay cost #181
hello500 HelloInterval=500ms grid ×6 (−0.5 to −8.0 pp, worst on Nakagami), static mesh VANET main +1.6–2.4 pp, delay99 −13–17 %; LEO shells +2.6–6.5 pp at a large overhead cost #537
reconv1s ReconvHoldCap=1s grid Nakagami: rwp −1.43 pp, gauss-markov −6.02 pp VANET main +5.3 pp, VANET sparse +6.2 pp, FANET sparse +4.4 pp, each at +180–600 ms of delay99 #537

Validity

  • Phase 1 (control).
  • All 18 cells, every protocol, 20 seeds, at a8a16991.
  • Every Wi-Fi cell's rows match the published corpus.
  • The satellite AODV rows differ only through stock AODV's pointer-keyed socket map (#362). On a multi-interface node that map makes AODV's iteration order depend on heap layout. The paired deltas are within noise.
  • scenario_check.py results gives 0 FAIL, except the known #431 oracle-hop findings on the three Nakagami cells. They are identical in kind and size to the published cells'.
  • Phase 2 (arms).
  • The arms ran at main, because creating a tag was not available to the campaign. That was ee1b0ee8 for the first dispatches, then da146c66, 65b7bde5 and 8da0fe27.
  • Between those commits the only change under core/, ns3/ or the benchmark workflows is one comment in ns3/doctor.sh.
  • The phase-0 → ee1b0ee8 change is the clang-format reformat (#35) plus the replay inputs (#639). Two checks show the reformat changed no behaviour:
    • Recheck: grid rwp/tworay at main, defaults, every protocol. Every ## row is byte-identical to its phase-1 cell.
    • Attribution control: repair200 with every protocol in grid rwp/tworay, static mesh, FANET sparse, VANET sparse ×2 and satellite base. Every baseline row is byte-identical to control's, with two expected exceptions:
    • ##COMMON##, the set AntHocNet and the baseline both delivered, which moves with AnthocNet by construction;
    • satellite AODV, as above.
  • Every arm reached its run: each cell's ##CONFIG## attr line shows the arm's value.
  • Pairing: every comparison is paired per seed against control, through bench_parse.py --ab --proto anthocnet.
  • Most cells have n = 20.
  • VANET main ran as five blocks of 4 seeds, and VANET sparse as two blocks of 10, so each block is paired on its own.
  • On n = 4, the Wilcoxon p floor is 0.125, so the blocks are read through their t-intervals and their sign consistency.

Per arm, per cell

Each row is AntHocNet in the arm minus AntHocNet in control, paired per seed: - dPDR is in percentage points; - d delay99 is in ms, with a bootstrap interval; - d NRL is a t-interval; - the mark after each interval reads + when the interval lies above zero, − when it lies below, and · when it straddles zero; - the last column is bench_parse.py's own verdict.

One row needs care: in repair200 / VANET sparse s11–20, the PDR interval's upper end rounds to −0.00. The script calls the block MIXED at p = 0.042. VANET sparse s1–10 is unambiguously below zero.

repair200 (#433)

cell n dPDR d delay99 d NRL verdict
grid-rwp-tworay 20 -0.32 [-0.46, -0.18] pp − -4.95 [-7.65, -2.40] ms − -0.04 [-0.12, +0.03] · PAIRED-MIXED
grid-rwp-nakagami 20 -0.34 [-1.25, +0.57] pp · -113.60 [-149.80, -84.30] ms − -0.59 [-0.91, -0.27] − PAIRED-IMPROVED
grid-ssrwp-tworay 20 -0.32 [-0.48, -0.15] pp − -5.45 [-7.70, -3.05] ms − +0.01 [-0.08, +0.09] · PAIRED-MIXED
grid-ssrwp-nakagami 20 +0.05 [-0.92, +1.02] pp · -98.25 [-132.50, -66.95] ms − -0.58 [-0.95, -0.21] − PAIRED-IMPROVED
grid-gaussmarkov-tworay 20 -0.99 [-1.32, -0.66] pp − -27.15 [-33.70, -20.85] ms − +0.04 [-0.06, +0.15] · PAIRED-MIXED
grid-gaussmarkov-nakagami 20 +0.59 [-0.68, +1.85] pp · -248.55 [-308.40, -188.55] ms − -1.70 [-2.64, -0.75] − PAIRED-IMPROVED
static-mesh 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
fanet-main 20 +0.00 [-0.29, +0.30] pp · -20.10 [-24.35, -16.25] ms − -0.07 [-0.09, -0.04] − PAIRED-IMPROVED
fanet-sparse 20 -0.40 [-0.75, -0.05] pp − -64.15 [-73.30, -55.35] ms − -0.06 [-0.14, +0.02] · PAIRED-MIXED
vanet-main-s1 4 +1.35 [+0.18, +2.52] pp + -1196.00 [-1267.50, -1136.50] ms − -12.09 [-14.96, -9.23] − PAIRED-IMPROVED
vanet-main-s5 4 +1.05 [+0.46, +1.64] pp + -1137.50 [-1170.75, -1107.00] ms − -11.23 [-12.37, -10.09] − PAIRED-IMPROVED
vanet-main-s9 4 +1.35 [+0.87, +1.83] pp + -1100.50 [-1138.00, -1063.00] ms − -11.76 [-13.84, -9.67] − PAIRED-IMPROVED
vanet-main-s13 4 +0.75 [+0.26, +1.24] pp + -1096.75 [-1184.75, -1012.00] ms − -10.85 [-12.32, -9.37] − PAIRED-IMPROVED
vanet-main-s17 4 +1.20 [+0.73, +1.67] pp + -1108.00 [-1128.75, -1072.25] ms − -11.56 [-14.15, -8.98] − PAIRED-IMPROVED
vanet-sparse-s1 10 -0.20 [-0.33, -0.07] pp − -339.70 [-384.90, -286.30] ms − -0.33 [-0.53, -0.14] − PAIRED-MIXED
vanet-sparse-s11 10 -0.21 [-0.42, -0.00] pp · -339.80 [-366.90, -311.40] ms − -0.49 [-0.76, -0.21] − PAIRED-MIXED
sat-base 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-failcell 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-corridor 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-seam 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
leo-walker16-anthocnet 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
leo-starlink1-anthocnet 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
leo-starlink1-storm-anthocnet 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE

The cap never binds in the satellite family, where the cells are byte-identical. On a torus or a Walker shell the pheromone table always has a surviving neighbour, so no packet waits in the repair hold.

sinr (#181)

cell n dPDR d delay99 d NRL verdict
grid-rwp-tworay 20 +0.26 [+0.03, +0.50] pp + -1.00 [-3.90, +1.75] ms · +0.14 [+0.06, +0.22] + PAIRED-MIXED
grid-rwp-nakagami 20 -0.04 [-0.99, +0.90] pp · +16.40 [-16.35, +49.40] ms · +1.03 [+0.76, +1.29] + PAIRED-WORSE
grid-ssrwp-tworay 20 +0.06 [-0.15, +0.28] pp · -3.30 [-5.65, -1.10] ms − +0.17 [+0.09, +0.24] + PAIRED-MIXED
grid-ssrwp-nakagami 20 -0.09 [-1.08, +0.90] pp · +97.65 [+57.75, +142.35] ms + +1.50 [+0.96, +2.03] + PAIRED-WORSE
grid-gaussmarkov-tworay 20 +0.43 [+0.19, +0.67] pp + +14.20 [+8.05, +20.75] ms + +0.25 [+0.13, +0.37] + PAIRED-MIXED
grid-gaussmarkov-nakagami 20 -0.35 [-1.53, +0.82] pp · +96.00 [+40.10, +152.35] ms + +2.38 [+1.59, +3.17] + PAIRED-WORSE
static-mesh 20 -0.01 [-0.22, +0.20] pp · +0.35 [+0.05, +0.65] ms + +0.03 [-0.04, +0.10] · PAIRED-WORSE
fanet-main 20 +0.44 [+0.23, +0.64] pp + +17.55 [+12.90, +22.70] ms + +0.04 [+0.01, +0.07] + PAIRED-MIXED
fanet-sparse 20 +0.11 [-0.19, +0.41] pp · +534.85 [+455.35, +619.40] ms + +0.37 [+0.26, +0.47] + PAIRED-WORSE
vanet-main-s1 4 -1.60 [-2.35, -0.85] pp − +931.25 [+858.50, +1004.00] ms + +13.58 [+8.95, +18.21] + PAIRED-WORSE
vanet-main-s5 4 -1.65 [-2.27, -1.03] pp − +1025.25 [+981.75, +1063.50] ms + +12.31 [+9.94, +14.67] + PAIRED-WORSE
vanet-main-s9 4 -1.60 [-2.55, -0.65] pp − +1026.00 [+1002.50, +1058.50] ms + +12.41 [+8.13, +16.69] + PAIRED-WORSE
vanet-main-s13 4 -1.68 [-2.44, -0.91] pp − +1038.25 [+996.00, +1082.25] ms + +14.61 [+12.37, +16.86] + PAIRED-WORSE
vanet-main-s17 4 -1.30 [-1.77, -0.83] pp − +1042.50 [+1004.50, +1098.75] ms + +12.14 [+11.37, +12.91] + PAIRED-WORSE
vanet-sparse-s1 10 +0.51 [+0.33, +0.69] pp + +1509.80 [+1452.20, +1566.60] ms + +1.43 [+1.20, +1.66] + PAIRED-MIXED
vanet-sparse-s11 10 +0.36 [+0.23, +0.49] pp + +1532.30 [+1439.00, +1618.00] ms + +1.61 [+1.38, +1.84] + PAIRED-MIXED
sat-base 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [-0.00, +0.00] · PAIRED-NOISE
sat-failcell 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [-0.00, +0.00] · PAIRED-NOISE
sat-corridor 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-seam 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.01] · PAIRED-WORSE
leo-walker16-anthocnet 20 -0.01 [-0.28, +0.27] pp · +0.35 [-10.25, +9.20] ms · +1.95 [+0.68, +3.22] + PAIRED-WORSE
leo-starlink1-anthocnet 20 +0.70 [+0.30, +1.10] pp + +6.15 [+1.50, +10.75] ms + +49.44 [+25.32, +73.55] + PAIRED-MIXED
leo-starlink1-storm-anthocnet 20 +0.41 [-0.43, +1.25] pp · +8.55 [+0.80, +16.15] ms + +36.23 [-9.22, +81.67] · PAIRED-WORSE
  • ISL grid: point-to-point ISLs have no PHY SINR, so the metric falls back to hop count and the ISL-grid cells are identical to control (ADR-0024).
  • LEO shells: these are not a no-op. Their ground-to-satellite access links are wireless and do report SINR. On starlink1 the metric buys +0.7 pp of PDR for about +49 NRL.
  • Urban VANET: under SINR cost, ants prefer the strongest links. In the urban canyon those are the short line-of-sight hops along a street, which break at every corner.

hello500 (#537)

cell n dPDR d delay99 d NRL verdict
grid-rwp-tworay 20 -0.62 [-0.82, -0.42] pp − +5.60 [+3.25, +8.05] ms + +3.91 [+3.81, +4.01] + PAIRED-WORSE
grid-rwp-nakagami 20 -5.82 [-6.97, -4.68] pp − +304.75 [+264.35, +347.30] ms + +15.25 [+13.80, +16.71] + PAIRED-WORSE
grid-ssrwp-tworay 20 -0.54 [-0.69, -0.39] pp − +3.15 [+0.35, +5.90] ms + +3.84 [+3.77, +3.92] + PAIRED-WORSE
grid-ssrwp-nakagami 20 -6.30 [-8.05, -4.54] pp − +342.60 [+298.00, +390.00] ms + +16.90 [+14.39, +19.42] + PAIRED-WORSE
grid-gaussmarkov-tworay 20 -0.73 [-0.97, -0.50] pp − -8.85 [-13.65, -4.35] ms − +3.80 [+3.68, +3.91] + PAIRED-MIXED
grid-gaussmarkov-nakagami 20 -7.97 [-9.68, -6.26] pp − +251.00 [+184.95, +320.60] ms + +20.21 [+17.99, +22.42] + PAIRED-WORSE
static-mesh 20 -0.39 [-0.77, -0.01] pp − +5.25 [+4.45, +6.10] ms + +3.27 [+3.17, +3.36] + PAIRED-WORSE
fanet-main 20 +0.52 [+0.17, +0.86] pp + -9.15 [-12.80, -5.65] ms − +0.88 [+0.85, +0.92] + PAIRED-MIXED
fanet-sparse 20 +0.64 [+0.34, +0.95] pp + -18.45 [-26.05, -11.50] ms − +1.46 [+1.38, +1.54] + PAIRED-MIXED
vanet-main-s1 4 +1.65 [+0.41, +2.89] pp + -304.00 [-341.00, -262.25] ms − +0.40 [-2.35, +3.14] · PAIRED-IMPROVED
vanet-main-s5 4 +2.10 [+1.40, +2.80] pp + -294.25 [-350.75, -231.50] ms − -0.97 [-2.88, +0.94] · PAIRED-IMPROVED
vanet-main-s9 4 +1.83 [+1.03, +2.62] pp + -304.00 [-365.75, -241.25] ms − +0.08 [-2.85, +3.01] · PAIRED-IMPROVED
vanet-main-s13 4 +1.67 [+0.50, +2.85] pp + -267.75 [-330.50, -205.00] ms − +1.11 [-0.18, +2.39] · PAIRED-IMPROVED
vanet-main-s17 4 +2.42 [+1.63, +3.22] pp + -245.50 [-288.00, -205.00] ms − -1.32 [-3.46, +0.82] · PAIRED-IMPROVED
vanet-sparse-s1 10 +0.55 [+0.35, +0.75] pp + -108.00 [-147.90, -62.90] ms − +1.62 [+1.33, +1.91] + PAIRED-MIXED
vanet-sparse-s11 10 +0.42 [+0.08, +0.76] pp + -89.00 [-134.60, -44.80] ms − +1.75 [+1.33, +2.18] + PAIRED-MIXED
sat-base 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +1.01 [+1.00, +1.01] + PAIRED-WORSE
sat-failcell 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.99 [+0.99, +1.00] + PAIRED-WORSE
sat-corridor 20 +0.00 [+0.00, +0.00] pp · -4.15 [-16.60, +8.30] ms · +18.17 [+18.13, +18.21] + PAIRED-WORSE
sat-seam 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +2.10 [+2.09, +2.11] + PAIRED-WORSE
leo-walker16-anthocnet 20 +2.57 [+2.16, +2.98] pp + -3.00 [-14.05, +7.55] ms · +75.96 [+73.50, +78.42] + PAIRED-MIXED
leo-starlink1-anthocnet 20 +6.46 [+5.72, +7.20] pp + +29.05 [+21.85, +36.45] ms + +550.99 [+503.69, +598.29] + PAIRED-MIXED
leo-starlink1-storm-anthocnet 20 +5.94 [+4.81, +7.08] pp + +27.00 [+19.70, +34.05] ms + +538.94 [+492.40, +585.48] + PAIRED-MIXED
  • Grid: halving the hello period adds about 4 NRL of beacons. That costs delivery, worst on Nakagami (−5.8 to −8.0 pp), where the beacons collide with data under fading.
  • VANET, FANET and the LEO shells: here links break faster than 1 s, and the earlier neighbour detection pays for itself.
  • LEO shells: this is the largest gain in the campaign, +2.6 to +6.5 pp. It costs NRL +76 on walker16 and about +540 on the Starlink shell, roughly doubling the routing load.

reconv1s (#537)

cell n dPDR d delay99 d NRL verdict
grid-rwp-tworay 20 +0.49 [+0.34, +0.64] pp + +16.80 [+13.40, +20.25] ms + +0.06 [-0.00, +0.12] · PAIRED-MIXED
grid-rwp-nakagami 20 -1.43 [-2.24, -0.62] pp − +330.45 [+266.05, +394.65] ms + +2.22 [+1.34, +3.11] + PAIRED-WORSE
grid-ssrwp-tworay 20 +0.32 [+0.15, +0.49] pp + +9.60 [+4.80, +14.45] ms + +0.07 [-0.01, +0.16] · PAIRED-MIXED
grid-ssrwp-nakagami 20 -1.59 [-3.22, +0.05] pp · +311.50 [+258.65, +363.70] ms + +3.69 [+1.76, +5.61] + PAIRED-WORSE
grid-gaussmarkov-tworay 20 +1.18 [+0.96, +1.41] pp + +78.55 [+65.50, +93.25] ms + +0.10 [+0.01, +0.19] + PAIRED-MIXED
grid-gaussmarkov-nakagami 20 -6.02 [-7.96, -4.09] pp − +469.75 [+394.80, +541.20] ms + +12.63 [+8.86, +16.41] + PAIRED-WORSE
static-mesh 20 +0.18 [-0.00, +0.35] pp · +0.15 [-0.25, +0.55] ms · -0.00 [-0.07, +0.07] · PAIRED-NOISE
fanet-main 20 +1.33 [+1.02, +1.64] pp + +178.50 [+155.60, +204.05] ms + -0.01 [-0.04, +0.03] · PAIRED-MIXED
fanet-sparse 20 +4.37 [+3.98, +4.75] pp + +592.50 [+575.90, +608.95] ms + -0.23 [-0.41, -0.06] − PAIRED-MIXED
vanet-main-s1 4 +5.55 [+4.38, +6.72] pp + +209.25 [+104.00, +314.50] ms + +0.78 [-5.34, +6.90] · PAIRED-MIXED
vanet-main-s5 4 +5.38 [+4.09, +6.66] pp + +224.00 [+156.50, +291.50] ms + +0.72 [-5.68, +7.12] · PAIRED-MIXED
vanet-main-s9 4 +5.20 [+4.44, +5.96] pp + +262.00 [+217.25, +322.25] ms + +2.63 [-0.70, +5.96] · PAIRED-MIXED
vanet-main-s13 4 +4.97 [+4.09, +5.86] pp + +337.75 [+281.50, +412.25] ms + +5.70 [+0.93, +10.46] + PAIRED-MIXED
vanet-main-s17 4 +5.38 [+4.37, +6.38] pp + +251.75 [+184.75, +321.00] ms + +2.46 [+0.39, +4.53] + PAIRED-MIXED
vanet-sparse-s1 10 +6.26 [+6.01, +6.51] pp + +356.70 [+308.90, +415.60] ms + -4.08 [-4.91, -3.26] − PAIRED-MIXED
vanet-sparse-s11 10 +6.19 [+5.95, +6.43] pp + +360.60 [+321.40, +398.60] ms + -3.16 [-3.85, -2.47] − PAIRED-MIXED
sat-base 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-failcell 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-corridor 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
sat-seam 20 +0.00 [+0.00, +0.00] pp · +0.00 [+0.00, +0.00] ms · +0.00 [+0.00, +0.00] · PAIRED-NOISE
leo-walker16-anthocnet 20 +0.20 [-0.08, +0.47] pp · -3.30 [-9.80, +2.05] ms · -0.48 [-1.60, +0.64] · PAIRED-NOISE
leo-starlink1-anthocnet 20 +0.83 [+0.36, +1.30] pp + +96.70 [+86.35, +106.05] ms + +12.62 [-13.80, +39.04] · PAIRED-MIXED
leo-starlink1-storm-anthocnet 20 +0.53 [-0.14, +1.20] pp · +117.75 [+109.65, +125.60] ms + -2.96 [-61.04, +55.13] · PAIRED-WORSE

Holding packets for up to 1 s across a reconvergence pays where a break is clean and a new route arrives within the hold: - VANET main +5.3 pp, VANET sparse +6.2 pp, FANET sparse +4.4 pp; - the price is delay99, +180–600 ms.

On a fading channel, many "breaks" are transient fades. Held packets queue behind ones that would have got through, so PDR falls (by up to 6 pp) and delay99 rises by 300–470 ms. On the LEO shells the hold adds about 100–120 ms of delay99 for at most +0.8 pp.

What this means

  • The defaults stand as shipped. This is ADR-0019 working as intended: every arm wins somewhere, and no arm wins everywhere.
  • The per-regime recommendations are in network-regimes.md §7. The VANET page has a tuning section for users who run that regime.
  • #537's finding stands.
  • The three knobs each claw back part of VANET main's reconvergence loss: reconv1s +5.3 pp, hello500 +1.9 pp, repair200 +1.1 pp.
  • None closes the 39.6 pp gap to the oracle.
  • The measured cause, link lifetime at corners, keeps v2.3.0's link-lifetime mechanism (#574) in place.
  • #181 is answered. The thesis's best metric is not the best default on ns-3's PHY and MAC across families. LinkMetric=classic (delay + hops) stays the default.

Data

Every cell is committed under results/cells/: - control: <cell>-v220.txt; - arms: <cell>-v220-<arm>.txt; - the recheck and the attribution controls: -v220-recheck, -v220-attrib-repair200.

Each file opens with a # line naming its runs and commit. The artifacts carried no ##PROV## line, so each run's line is rebuilt from its Actions run record.

Reproduce a row:

python3 tools/bench/bench_parse.py --ab --proto anthocnet \
    results/cells/grid-rwp-tworay-v220.txt results/cells/grid-rwp-tworay-v220-repair200.txt