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
controlruns 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
repair200with every protocol. Its baseline rows must be byte-identical tocontrol's, or the harness moved and no delta in that family is attributable. This issweep_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
controlcells 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,
sinrreads "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¶
- The SINR metric and its attribute (#181/#144, ADR-0024), merged with its own tests and the WASM parity gate.
-
537's preflight rule.
round a street corner lives aboutscenario_check.py preflightnow WARNs that a link¶streetWidth / speed(1.0 s on the vanet preset) rather than the 10.6 s distance bound. Merged with this plan. - Every arm's attribute exists and is printed in
##CONFIG## attr, so each cell records which arm it is. scenario_check.py preflightpasses (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## attrline shows the default). The cell is void; re-dispatch it. sinrbehaves identically tocontrolon the Wi-Fi cells. That would mean the PHY hook is not delivering samples. Diagnose with a one-cellruns=2dispatch 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 resultsgives 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 wasee1b0ee8for the first dispatches, thenda146c66,65b7bde5and8da0fe27. - Between those commits the only change under
core/,ns3/or the benchmark workflows is one comment inns3/doctor.sh. - The phase-0 →
ee1b0ee8change 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:
repair200with every protocol in grid rwp/tworay, static mesh, FANET sparse, VANET sparse ×2 and satellite base. Every baseline row is byte-identical tocontrol's, with two expected exceptions: ##COMMON##, the set AntHocNet and the baseline both delivered, which moves with AnthocNet by construction;- satellite AODV, as above.
- Recheck: grid rwp/tworay at
- Every arm reached its run: each cell's
##CONFIG## attrline shows the arm's value. - Pairing: every comparison is paired per seed against
control, throughbench_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
starlink1the 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