Backbone Phase 2 — Proaktiver Regions-/Backbone-Control-Plane: Nutzen vs. Verlust vs. NETTO-Airtime
Mechanismus A der Phase 2. Ehrliche, getrennte Airtime-Bilanz auf der ECHTEN Topologie.
Skript: backbone_sim.py · Daten: backbone_results.json · Plots: fig_bb_*.png.
Reproduzierbar (Seed 42, 6 Seeds, 120 Paare/Seed).
Die Kernfrage: Spart ein proaktiver Backbone (stabile Repeater tauschen periodisch Distance-Vector-Updates aus, sodass DATA als Unicast statt netzweitem Flood läuft) NETTO Airtime — nach Abzug der Kontroll-Updates, die er selbst kostet? Und wenn ja: in welchem Fenster aus Backbone-Größe, DV-Periode und Adoption?
1. Methodik (ehrlich, getrennt gemessen)
Topologie: echte neighbor_graph.json (1956 Kanten, ambiguous verworfen) → Riesenkomponente
632 Knoten / 1577 Kanten, Ø-Grad 4,99. Per-Link-Reliability aus echtem avg_snr (logistisch
um die Empfangsschwelle), ETX = 1/p². Identisch zu mhr_sim_real_v4.py.
Zwei Airtime-Einheiten — der entscheidende methodische Schritt: 1. TX-Ereignisse (sendende Knoten) — vergleichbar mit der Vorarbeit (v4/Studie). 2. Physische Time-on-Air (ms) per LoRa-ToA (Semtech-Formel, SF11/BW250k „long-fast"). Nötig, weil DATA-Pakete (≈40 B → 494 ms ToA) und kleine DV-Kontroll-Pakete unterschiedlich groß sind. Nur in ms lassen sich Daten-Ersparnis und Kontroll-Kosten ehrlich gegeneinander aufrechnen — TX-Zählung allein würde die Kontroll-Kosten systematisch unterschätzen oder überschätzen.
Backbone-Modell:
- Auswahl stabiler Repeater nach relay_count_24h (aktiver Transit), Tie-Break Grad (Hub/Border).
Companions sind per Definition nicht backbone-fähig (leiten nicht weiter). 563 Kandidaten.
- DATA: Endpunkte „kleben" via lokalem ≤2-Hop-Flood an den nächsten aktiven Backbone-Knoten
(Ingress/Egress); dazwischen ETX-kürzester, proaktiv bekannter Unicast-Pfad (0 Discovery-Airtime).
Nicht über den Backbone erreichbare Paare → Fallback auf heutiges Flood-and-cache.
- Kontroll-Kosten (DV): jeder aktive Backbone-Knoten sendet je Periode einen Zero-Hop-Broadcast
(kein Flood, 1 TX). Paketgröße = Header + #Einträge × 4 B. ToA je Update per LoRa-Formel.
NETTO (über 24 h, Kernzahl):
NETTO = (Baseline-Daten-ToA − Backbone-Daten-ToA) × #Discovery-Floods − Kontroll-ToA
└──────────────── NUTZEN (gespart) ────────────────┘ └── VERLUST ──┘
Baseline (reines Flood-and-cache): Lieferquote 0,929, 617 TX-Ereignisse/Zustellung (= 304 s ToA bei 494 ms/Hop), Ø 5,0 Hops.
Zwei DV-Skalierungs-Modelle (beide gezeigt — ehrlich in beide Richtungen): - FLACHES DV (Default aller Sweeps): jeder Knoten trägt alle Ziele seiner Backbone-Komponente → O(N). Pessimistische, aber faire Annahme für einen naiven Backbone. - REGIONS-HIERARCHIE (H1): intra-Region auf ~20 Ziele gedeckelt + aggregierte Inter-Region-Einträge → O(Regionsgröße). Die design-intendierte Variante.
2. Daten- vs. Kontroll- vs. NETTO-Airtime (Zahlen)
2a. Über Backbone-Größe (FLACHES DV, DV 300 s, Adoption 100 %, 2000 Floods/24 h)
| Backbone | Knoten | % über BB | Daten-Ersparnis | Kontroll-Kosten | NETTO | Liefer |
|---|---|---|---|---|---|---|
| 5 % | 28 | 4 % | +29 194 s | −2 447 s | +26 748 s | 0,950 |
| 10 % | 56 | 24 % | +151 067 s | −9 871 s | +141 196 s | 0,967 |
| 20 % | 113 | 53 % | +333 689 s | −59 872 s | +273 817 s ✅ best | 0,958 |
| 35 % | 197 | 60 % | +381 189 s | −230 755 s | +150 434 s | 0,954 |
| 50 % | 282 | 67 % | +428 611 s | −564 887 s | −136 277 s ❌ | 0,949 |
| 70 % | 394 | 80 % | +497 560 s | −1 371 112 s | −873 552 s ❌ | 0,976 |
| 100 % | 563 | 98 % | +593 297 s | −3 045 451 s | −2 452 154 s ❌ | 0,999 |
→ Die Daten-Ersparnis wächst sublinear (sättigt), die Kontroll-Kosten wachsen superlinear
(mehr Knoten × größere DV-Tabellen). Beim flachen DV kippt NETTO oberhalb ~35–40 % ins Negative.
Plot: fig_bb_net_airtime.png.
2b. Über DV-Periode (Backbone 35 %, flach)
| DV-Periode | Kontroll-Kosten | NETTO |
|---|---|---|
| 30 s | −2 307 551 s | −1 926 362 s ❌ |
| 60 s | −1 153 775 s | −772 587 s ❌ |
| 120 s | −576 888 s | −195 699 s ❌ |
| 300 s | −230 755 s | +150 434 s ✅ |
| 600 s | −115 378 s | +265 811 s ✅ |
| 1800 s | −38 459 s | +342 730 s ✅ |
| 3600 s | −19 230 s | +361 959 s ✅ |
→ Kipppunkt bei flachem 35 %-Backbone liegt zwischen 120 s und 300 s. Schneller als alle ~5 min
zu aktualisieren frisst der Kontroll-Traffic den gesamten Nutzen. Plot: fig_bb_dv_period.png.
2c. Flaches DV vs. Regions-Hierarchie (H1) — der Rettungsanker bei großem Backbone
| Backbone | FLACH Einträge | FLACH NETTO | H1 Einträge | H1 NETTO |
|---|---|---|---|---|
| 35 % | 114 | +150 434 s | 21 | +331 150 s |
| 50 % | 204 | −136 277 s ❌ | 27 | +345 527 s ✅ |
| 70 % | 354 | −873 552 s ❌ | 36 | +345 672 s ✅ |
| 100 % | 552 | −2 452 154 s ❌ | 47 | +329 255 s ✅ |
→ Genau der vom Design (H1) vorhergesagte Effekt: ohne Hierarchie skaliert ein flacher Backbone nicht (DV-Tabellen O(N), Pakete fragmentieren, Kontroll-Airtime explodiert). Mit Regions-Deckelung bleibt NETTO auch bei 100 % Backbone klar positiv und nahezu größeninvariant (~+330 000 s/24 h).
3. GO / NO-GO
✅ GO — aber bedingt, kein Freifahrtschein.
Der proaktive Backbone lohnt netto, wenn alle vier Bedingungen erfüllt sind:
- Regions-Hierarchie (H1) ist Pflicht, nicht optional. Ein flacher netzweiter DV ist nur in einem engen Fenster (kleiner Backbone ≤ 35 % und DV-Periode ≥ 300 s) netto positiv und kippt sonst stark negativ. Mit H1 ist NETTO über alle Backbone-Größen positiv (~+330 000 s/24 h).
- DV-Periode ≥ 300 s (5 min). Darunter frisst der Kontroll-Traffic den Nutzen (Kipppunkt 120–300 s bei flachem 35 %-Backbone).
- Ausreichend DATA-Traffic. Der Backbone ist eine fixe Kontroll-Investition; sie amortisiert erst ab ~2000 netzweiten Discovery-Floods/24 h (bei 35 %/300 s flach — siehe §4). Bei niedrigem Traffic (≤ 1000/24 h) ist NETTO negativ: man bezahlt einen Backbone, den kaum jemand nutzt.
- Moderate Backbone-Größe. Ohne H1: 10–35 %. Mit H1: nahezu beliebig, optimal um 35–50 % (maximale Abdeckung bei noch tragbarer Tabellengröße).
Bestes Fenster (gemessen): - Ohne H1: Backbone 20 %, DV ≥ 300 s → NETTO +273 817 s/24 h (= 4,6 h Funkbelegung gespart), 53 % der Paare über Backbone, Lieferquote 0,958 ≥ Baseline 0,929. - Mit H1: Backbone 35–50 %, DV 300–600 s → NETTO +330 000–345 000 s/24 h, 60–67 % über Backbone.
Wann NO-GO:
- DV-Periode < 120 s (Kontroll-Traffic dominiert immer).
- Flacher Backbone > 40 % (ohne H1 stark negativ).
- Geringes Daten-Aufkommen (< ~1000 Floods/24 h) — fixe Kontroll-Kosten amortisieren nicht.
4. Amortisation (Traffic-Sensitivität, Backbone 35 %/300 s flach)
| Floods/24 h | Daten-Ersparnis | Kontroll (fix) | NETTO |
|---|---|---|---|
| 100 | +19 059 s | −230 755 s | −211 696 s ❌ |
| 500 | +95 297 s | −230 755 s | −135 458 s ❌ |
| 1000 | +190 594 s | −230 755 s | −40 161 s ❌ |
| 2000 | +381 189 s | −230 755 s | +150 434 s ✅ break-even |
| 4000 | +762 377 s | −230 755 s | +531 622 s ✅ |
| 8000 | +1 524 755 s | −230 755 s | +1 294 000 s ✅ |
→ Break-even ≈ 2000 Discovery-Floods/24 h. Die Kontroll-Kosten sind fix (traffic-unabhängig),
die Ersparnis skaliert linear mit dem Daten-Aufkommen. Mit H1 sinkt der Break-even drastisch
(Kontroll-Kosten bei 35 % nur ~50 000 s statt 230 755 s → Break-even bei ~260 Floods/24 h).
Plot: fig_bb_traffic.png.
5. Delivery, Pfad-Optimalität, Konvergenz, Mixed-Firmware
- Lieferquote (Safety): In allen NETTO-positiven Szenarien ≥ Baseline (0,929) — Bereich 0,947–0,999. Der Backbone verschlechtert die Zustellung nicht (Fallback-Flood garantiert das, wo keine Backbone-Route existiert). Safety-Invariante erfüllt.
- Pfad-Optimalität: Unicast über den ETX-kürzesten proaktiven Pfad → deterministisch, kein Zufalls-Umweg. Detour gegen Shortest-Path wird mitgeführt; der Backbone wählt metrisch, nicht „first-wins".
- Konvergenz: im analytischen DV-Modell nicht zeitlich simuliert; das Design (H2: Babel-Feasibility
- Seqno) garantiert Schleifenfreiheit während der Konvergenz. Kosten der Konvergenz stecken in den periodischen Updates (hier voll bilanziert). Eine echte zeit-/churn-aufgelöste Konvergenz-Simulation ist die nächste offene Validierung (s. Limitierungen).
- Mixed-Firmware (Adoption, Backbone 35 %/300 s, flach):
| Adoption | aktive BB-Knoten | % über BB | Kontroll | NETTO | Liefer |
|---|---|---|---|---|---|
| 10 % | 20 | 11 % | −1 703 s | +67 071 s ✅ | 0,947 |
| 25 % | 49 | 14 % | −5 589 s | +84 594 s ✅ | 0,968 |
| 50 % | 98 | 32 % | −26 951 s | +171 009 s ✅ | 0,961 |
| 75 % | 148 | 54 % | −109 053 s | +223 836 s ✅ | 0,972 |
| 100 % | 197 | 60 % | −230 755 s | +150 434 s ✅ | 0,954 |
→ Graceful & monoton positiv ab dem ersten Knoten. Schon bei 10 % Adoption NETTO positiv;
Nicht-Adoptierer fluten weiter (sicherer Fallback), Lieferquote bleibt ≥ Baseline. Der Gewinn steigt
mit Adoption, bis (bei flachem DV) die wachsenden Kontroll-Kosten ihn ab ~100 % wieder drücken — mit
H1 träte dieser Rückgang nicht ein. Plot: fig_bb_adoption.png.
6. Bugs / Fehler während der Entwicklung
- Einrückungs-Syntaxfehler (führendes Leerzeichen vor
in_bb = attach_repeater(...)) — beim ersten Schreiben eingebaut, sofort gefixt; Skript läuft seitdem fehlerfrei in einem Durchlauf. - Keine Laufzeitfehler.
BB_FAST=1-Smoke-Test und voller Lauf (6 Seeds) sauber.
7. Dateien
docs/MHR/study/backbone_sim.py— Simulation (selbst ausgeführt, fehlerfrei).docs/MHR/study/backbone_results.json— alle Roh-Sweeps + Kennzahlen-Summary.docs/MHR/study/fig_bb_net_airtime.png— Daten/Kontroll/NETTO über Backbone-Größe (Kernplot).docs/MHR/study/fig_bb_adoption.png— Mixed-Firmware: NETTO & Abdeckung über Adoption.docs/MHR/study/fig_bb_dv_period.png— Kipppunkt der DV-Periode.docs/MHR/study/fig_bb_traffic.png— Amortisation über Daten-Aufkommen.docs/MHR/study/fig_bb_grid.png— 2D-NETTO-Fenster (Größe × Periode).
8. Limitierungen (ehrlich)
- Idealisierter Flood ohne Kollisionen. Das Flood-Modell zählt sendende Knoten, modelliert aber keine CSMA-Kollisionen/Capture. Realer Flood ist durch Kollisionen teurer → die Daten-Ersparnis ist hier eher konservativ (untere Schranke des Nutzens).
- DV-Kosten als analytisches Modell. Periode × ToA × #aktive Knoten, mit DV-Tabellengröße aus der Komponenten-/Regionsgröße. Keine simulierte Retransmits/Verluste der DV-Pakete (die Kontroll-Kosten wären real eher höher → NETTO-Schätzung hier eher optimistisch auf der Kostenseite). Diese beiden Effekte (1 konservativ, 2 optimistisch) wirken gegenläufig.
- neighbor-graph = nur GENUTZTE Links. Die echte Topologie enthält nur beobachtete Kanten; latente Links fehlen. Backbone-Konnektivität und Attach-Hops könnten real günstiger sein.
- Traffic-Annahme (#Floods/24 h) ist der dominierende freie Parameter. NETTO hängt linear davon ab; der reale netzweite Discovery-Flood-Rate ist nicht direkt aus den Daten messbar (nur relay_count als Proxy). Darum als expliziter Sweep geführt, nicht als feste Zahl behauptet.
- Konvergenzzeit / Churn-Flattern nicht zeit-aufgelöst. Schleifenfreiheit & Stabilität sind Design-Argumente (H2/H3), hier nicht dynamisch simuliert. Offene nächste Validierung.
- Regions-Zuordnung approximiert (region_cap als Deckel, nicht aus echten
region_map-Grenzen) — die H1-Zahlen sind die Größenordnung der Skalierung, nicht eine exakte Deployment-Vorhersage.
9. Einordnung gegenüber der unsichtbaren Schicht
Die unsichtbare, node-lokale Schicht (Invisible_Optimizing_Layer.md) spart Airtime zu 0 Kontroll-Kosten
und ist immer sicher. Der Backbone ist mächtiger (deterministische Unicast-Pfade, höhere Abdeckung),
aber nicht gratis: er ist NETTO nur in einem definierten Fenster (H1 + DV ≥ 300 s + genug Traffic)
ein Gewinn. Empfehlung: Backbone als optionale Phase-2-Kür mit Pflicht-H1, defaultmäßig konservative
DV-Periode (≥ 300 s), und nur dort aktivieren, wo das Daten-Aufkommen die fixe Kontroll-Investition trägt —
die unsichtbare Schicht bleibt das risikolose Fundament darunter.
🇬🇧 English Translation
Backbone Phase 2 — Proactive Regional/Backbone Control Plane: Benefit vs. Cost vs. NET Airtime
Mechanism A of Phase 2. Honest, separately measured airtime accounting on the REAL topology.
Script: backbone_sim.py · Data: backbone_results.json · Plots: fig_bb_*.png.
Reproducible (Seed 42, 6 seeds, 120 pairs/seed).
The core question: Does a proactive backbone (stable repeaters periodically exchange Distance-Vector updates, so that DATA runs as unicast instead of network-wide flood) save NET airtime — after subtracting the control updates it costs itself? And if so: in which window of backbone size, DV period, and adoption?
1. Methodology (honest, measured separately)
Topology: real neighbor_graph.json (1956 edges, ambiguous ones discarded) → giant component
632 nodes / 1577 edges, avg. degree 4.99. Per-link reliability from real avg_snr (logistic
around the reception threshold), ETX = 1/p². Identical to mhr_sim_real_v4.py.
Two airtime units — the decisive methodological step: 1. TX events (transmitting nodes) — comparable with prior work (v4/study). 2. Physical time-on-air (ms) per LoRa ToA (Semtech formula, SF11/BW250k "long-fast"). Required because DATA packets (≈40 B → 494 ms ToA) and small DV control packets are differently sized. Only in ms can data savings and control costs be honestly compared — TX counting alone would systematically underestimate or overestimate control costs.
Backbone model:
- Selection of stable repeaters by relay_count_24h (active transit), tie-break by degree (hub/border).
Companions are by definition not backbone-capable (do not forward). 563 candidates.
- DATA: endpoints "attach" via local ≤2-hop flood to the nearest active backbone node
(ingress/egress); between them ETX-shortest, proactively known unicast path (0 discovery airtime).
Pairs not reachable via backbone → fallback to current flood-and-cache.
- Control costs (DV): each active backbone node sends one zero-hop broadcast per period
(no flood, 1 TX). Packet size = header + #entries × 4 B. ToA per update via LoRa formula.
NET (over 24 h, key figure):
NET = (Baseline-Data-ToA − Backbone-Data-ToA) × #Discovery-Floods − Control-ToA
└────────────────── BENEFIT (saved) ──────────────────┘ └── COST ──┘
Baseline (pure flood-and-cache): delivery rate 0.929, 617 TX events/delivery (= 304 s ToA at 494 ms/hop), avg. 5.0 hops.
Two DV scaling models (both shown — honest in both directions): - FLAT DV (default of all sweeps): each node carries all destinations of its backbone component → O(N). Pessimistic but fair assumption for a naive backbone. - REGION HIERARCHY (H1): intra-region capped at ~20 destinations + aggregated inter-region entries → O(region size). The design-intended variant.
2. Data vs. Control vs. NET Airtime (Numbers)
2a. Over Backbone Size (FLAT DV, DV 300 s, adoption 100 %, 2000 floods/24 h)
| Backbone | Nodes | % via BB | Data savings | Control costs | NET | Delivery |
|---|---|---|---|---|---|---|
| 5 % | 28 | 4 % | +29,194 s | −2,447 s | +26,748 s | 0.950 |
| 10 % | 56 | 24 % | +151,067 s | −9,871 s | +141,196 s | 0.967 |
| 20 % | 113 | 53 % | +333,689 s | −59,872 s | +273,817 s ✅ best | 0.958 |
| 35 % | 197 | 60 % | +381,189 s | −230,755 s | +150,434 s | 0.954 |
| 50 % | 282 | 67 % | +428,611 s | −564,887 s | −136,277 s ❌ | 0.949 |
| 70 % | 394 | 80 % | +497,560 s | −1,371,112 s | −873,552 s ❌ | 0.976 |
| 100 % | 563 | 98 % | +593,297 s | −3,045,451 s | −2,452,154 s ❌ | 0.999 |
→ Data savings grow sublinearly (saturating), control costs grow superlinearly
(more nodes × larger DV tables). With flat DV, NET tips negative above ~35–40 %.
Plot: fig_bb_net_airtime.png.
2b. Over DV Period (backbone 35 %, flat)
| DV period | Control costs | NET |
|---|---|---|
| 30 s | −2,307,551 s | −1,926,362 s ❌ |
| 60 s | −1,153,775 s | −772,587 s ❌ |
| 120 s | −576,888 s | −195,699 s ❌ |
| 300 s | −230,755 s | +150,434 s ✅ |
| 600 s | −115,378 s | +265,811 s ✅ |
| 1800 s | −38,459 s | +342,730 s ✅ |
| 3600 s | −19,230 s | +361,959 s ✅ |
→ Tipping point for flat 35 % backbone lies between 120 s and 300 s. Updating faster than every
~5 min consumes the entire benefit via control traffic. Plot: fig_bb_dv_period.png.
2c. Flat DV vs. Region Hierarchy (H1) — the rescue anchor for large backbones
| Backbone | FLAT entries | FLAT NET | H1 entries | H1 NET |
|---|---|---|---|---|
| 35 % | 114 | +150,434 s | 21 | +331,150 s |
| 50 % | 204 | −136,277 s ❌ | 27 | +345,527 s ✅ |
| 70 % | 354 | −873,552 s ❌ | 36 | +345,672 s ✅ |
| 100 % | 552 | −2,452,154 s ❌ | 47 | +329,255 s ✅ |
→ Exactly the effect predicted by design (H1): without hierarchy, a flat backbone does not scale (DV tables O(N), packets fragment, control airtime explodes). With regional capping, NET remains clearly positive even at 100 % backbone and is nearly size-invariant (~+330,000 s/24 h).
3. GO / NO-GO
✅ GO — but conditional, not a blank check.
The proactive backbone is worthwhile net, when all four conditions are met:
- Region hierarchy (H1) is mandatory, not optional. A flat network-wide DV is net-positive only in a narrow window (small backbone ≤ 35 % and DV period ≥ 300 s) and otherwise tips sharply negative. With H1, NET is positive across all backbone sizes (~+330,000 s/24 h).
- DV period ≥ 300 s (5 min). Below that, control traffic consumes the benefit (tipping point 120–300 s at flat 35 % backbone).
- Sufficient DATA traffic. The backbone is a fixed control investment; it does not amortize until ~2000 network-wide discovery floods/24 h (at 35 %/300 s flat — see §4). At low traffic (≤ 1000/24 h), NET is negative: you are paying for a backbone that barely anyone uses.
- Moderate backbone size. Without H1: 10–35 %. With H1: almost arbitrary, optimal around 35–50 % (maximum coverage at still manageable table size).
Best window (measured): - Without H1: Backbone 20 %, DV ≥ 300 s → NET +273,817 s/24 h (= 4.6 h radio occupancy saved), 53 % of pairs via backbone, delivery rate 0.958 ≥ baseline 0.929. - With H1: Backbone 35–50 %, DV 300–600 s → NET +330,000–345,000 s/24 h, 60–67 % via backbone.
When NO-GO:
- DV period < 120 s (control traffic always dominates).
- Flat backbone > 40 % (without H1 strongly negative).
- Low data volume (< ~1000 floods/24 h) — fixed control costs do not amortize.
4. Amortization (Traffic Sensitivity, Backbone 35 %/300 s flat)
| Floods/24 h | Data savings | Control (fixed) | NET |
|---|---|---|---|
| 100 | +19,059 s | −230,755 s | −211,696 s ❌ |
| 500 | +95,297 s | −230,755 s | −135,458 s ❌ |
| 1000 | +190,594 s | −230,755 s | −40,161 s ❌ |
| 2000 | +381,189 s | −230,755 s | +150,434 s ✅ break-even |
| 4000 | +762,377 s | −230,755 s | +531,622 s ✅ |
| 8000 | +1,524,755 s | −230,755 s | +1,294,000 s ✅ |
→ Break-even ≈ 2000 discovery floods/24 h. Control costs are fixed (traffic-independent),
savings scale linearly with data volume. With H1, break-even drops drastically
(control costs at 35 % only ~50,000 s instead of 230,755 s → break-even at ~260 floods/24 h).
Plot: fig_bb_traffic.png.
5. Delivery, Path Optimality, Convergence, Mixed Firmware
- Delivery rate (safety): In all NET-positive scenarios ≥ baseline (0.929) — range 0.947–0.999. The backbone does not worsen delivery (fallback flood guarantees that where no backbone route exists). Safety invariant satisfied.
- Path optimality: Unicast over the ETX-shortest proactive path → deterministic, no random detour. Detour vs. shortest path is tracked; the backbone chooses by metric, not "first-wins".
- Convergence: not time-simulated in the analytical DV model; the design (H2: Babel-Feasibility
- Seqno) guarantees loop-freedom during convergence. Convergence costs are embedded in the periodic updates (fully accounted here). A real time-/churn-resolved convergence simulation is the next open validation (see Limitations).
- Mixed firmware (adoption, backbone 35 %/300 s, flat):
| Adoption | Active BB nodes | % via BB | Control | NET | Delivery |
|---|---|---|---|---|---|
| 10 % | 20 | 11 % | −1,703 s | +67,071 s ✅ | 0.947 |
| 25 % | 49 | 14 % | −5,589 s | +84,594 s ✅ | 0.968 |
| 50 % | 98 | 32 % | −26,951 s | +171,009 s ✅ | 0.961 |
| 75 % | 148 | 54 % | −109,053 s | +223,836 s ✅ | 0.972 |
| 100 % | 197 | 60 % | −230,755 s | +150,434 s ✅ | 0.954 |
→ Graceful & monotonically positive from the first node. Already NET-positive at 10 % adoption;
non-adopters continue to flood (safe fallback), delivery rate stays ≥ baseline. The gain increases
with adoption until (with flat DV) growing control costs push it back down from ~100 % — with
H1 this decline would not occur. Plot: fig_bb_adoption.png.
6. Bugs / Errors During Development
- Indentation syntax error (leading space before
in_bb = attach_repeater(...)) — introduced on first write, immediately fixed; script has run error-free in a single pass since then. - No runtime errors.
BB_FAST=1smoke test and full run (6 seeds) clean.
7. Files
docs/MHR/study/backbone_sim.py— simulation (self-executed, error-free).docs/MHR/study/backbone_results.json— all raw sweeps + key metrics summary.docs/MHR/study/fig_bb_net_airtime.png— data/control/NET over backbone size (core plot).docs/MHR/study/fig_bb_adoption.png— mixed firmware: NET & coverage over adoption.docs/MHR/study/fig_bb_dv_period.png— tipping point of DV period.docs/MHR/study/fig_bb_traffic.png— amortization over data volume.docs/MHR/study/fig_bb_grid.png— 2D NET window (size × period).
8. Limitations (honest)
- Idealized flood without collisions. The flood model counts transmitting nodes but models no CSMA collisions/capture. Real flooding is more expensive due to collisions → the data savings here are rather conservative (lower bound of benefit).
- DV costs as an analytical model. Period × ToA × #active nodes, with DV table size from component/region size. No simulated retransmits/losses of DV packets (real control costs would be higher → NET estimate here rather optimistic on the cost side). These two effects (1 conservative, 2 optimistic) act in opposite directions.
- neighbor-graph = only USED links. The real topology contains only observed edges; latent links are missing. Backbone connectivity and attach hops could be more favorable in reality.
- Traffic assumption (#floods/24 h) is the dominant free parameter. NET depends linearly on it; the real network-wide discovery flood rate is not directly measurable from the data (only relay_count as proxy). Therefore presented as an explicit sweep, not asserted as a fixed number.
- Convergence time / churn flutter not time-resolved. Loop-freedom & stability are design arguments (H2/H3), not dynamically simulated here. Next open validation.
- Region assignment approximated (region_cap as a cap, not from real
region_mapboundaries) — the H1 numbers represent the order of magnitude of scaling, not an exact deployment prediction.
9. Classification vs. the Invisible Layer
The invisible, node-local layer (Invisible_Optimizing_Layer.md) saves airtime at 0 control costs
and is always safe. The backbone is more powerful (deterministic unicast paths, higher coverage),
but not free: it is NET-positive only in a defined window (H1 + DV ≥ 300 s + sufficient traffic).
Recommendation: backbone as an optional Phase-2 enhancement with mandatory H1, conservative
DV period by default (≥ 300 s), and only activated where data volume justifies the fixed control
investment — the invisible layer remains the risk-free foundation beneath it.