Files
ruvnet--RuView/examples/research-sota/r6_2_2_multistatic_results.json
T
rUv 065521dc9e research(R6.2.2): N-anchor multistatic placement saturation — practical knee at N=5 (#720)
Extends R6.2 from single-pair to N-anchor placement search via union of
all C(N,2) pairwise Fresnel ellipses. Greedy + K=8 random restarts.

Saturation curve on 5x5 m bedroom (3 target zones: bed + chair + desk,
40 wall-candidates, 434 grid points, 2.4 GHz):

| N | Pairs | Coverage | Marginal |
|---|------:|---------:|---------:|
| 2 |     1 |   35.7%  |  +35.7 pp |
| 3 |     3 |   63.4%  |  +27.6 pp |
| 4 |     6 |   86.2%  |  +22.8 pp |
| 5 |    10 |   96.8%  |  +10.6 pp |  <- knee
| 6 |    15 |  100.0%  |   +3.2 pp |
| 7 |    21 |  100.0%  |   +0.0 pp |

Practical knee at N=5. Past this, diminishing returns.

Three regimes:
- Single-feature (presence):       2-3 anchors  (36-63%)
- Multi-feature (pose+vitals+count): 4-5 anchors  (86-97%)
- Mission-critical (medical):       6 anchors   (100%)
- Beyond 6:                         wasted

Cost-optimisation: Cognitum Seed BOM is 9-15 USD. The 4->5 anchor jump
buys +10.6 pp coverage; the 5->6 jump buys only +3.2 pp for the same
cost. Consumer recommendation: 5 anchors. Commercial / medical: 6.

Convenient numerology: N=5 simultaneously satisfies three other
constraints:
1. R7 multi-link mincut: needs N >= 4 for single-anchor-compromise
   detection
2. ADR-105 federation Krum: f=1 byzantine tolerance requires K >= 5
3. R6.2.2 coverage knee: 5 hits practical saturation

These all bound by similar inverse-square-of-geometry scaling, so the
alignment is not coincidental.

ADR-029 (multistatic) didn't specify anchor counts; R6.2.2 fills that
gap with a benchmark-backed number.

Honest scope: single 5x5m geometry tested, 2D still (R6.2.1 = 3D not
yet built), free-space (multipath adds +5-15% beyond Fresnel), greedy
with 8 restarts approximates global optimum to 1-2 pp.

Composes with:
- R6/R6.2 (direct generalisation)
- R7 (mincut needs N>=4)
- R1 (placement x precision = full geometry budget)
- ADR-029 (architectural recommendation now has a number)
- ADR-105 (Krum bound matches)
- R10, R11, R14 (other geometries / use cases)

Coordination: ticks/tick-17.md, no PROGRESS.md edit.
2026-05-22 03:17:14 -04:00

253 lines
3.5 KiB
JSON

{
"room": {
"width_m": 5.0,
"height_m": 5.0
},
"frequency_ghz": 2.4,
"target_zones": [
{
"name": "bed",
"x0": 1.5,
"y0": 0.5,
"width": 2.0,
"height": 1.5
},
{
"name": "chair",
"x0": 3.5,
"y0": 3.5,
"width": 0.8,
"height": 0.8
},
{
"name": "desk",
"x0": 0.2,
"y0": 2.5,
"width": 1.0,
"height": 0.6
}
],
"saturation": [
{
"n_anchors": 2,
"coverage": 0.35714285714285715,
"n_pairs_used": 1,
"anchors": [
[
0.0,
2.0
],
[
5.0,
1.0
]
]
},
{
"n_anchors": 3,
"coverage": 0.6336405529953917,
"n_pairs_used": 3,
"anchors": [
[
0.0,
2.0
],
[
5.0,
1.0
],
[
0.0,
0.5
]
]
},
{
"n_anchors": 4,
"coverage": 0.8617511520737328,
"n_pairs_used": 6,
"anchors": [
[
0.0,
2.0
],
[
5.0,
1.0
],
[
0.0,
0.5
],
[
3.5,
5.0
]
]
},
{
"n_anchors": 5,
"coverage": 0.967741935483871,
"n_pairs_used": 10,
"anchors": [
[
3.0,
0.0
],
[
2.5,
0.0
],
[
0.0,
4.0
],
[
4.0,
5.0
],
[
1.5,
0.0
]
]
},
{
"n_anchors": 6,
"coverage": 1.0,
"n_pairs_used": 15,
"anchors": [
[
4.5,
5.0
],
[
0.0,
1.0
],
[
1.5,
0.0
],
[
5.0,
2.0
],
[
0.5,
5.0
],
[
2.5,
0.0
]
]
},
{
"n_anchors": 7,
"coverage": 1.0,
"n_pairs_used": 21,
"anchors": [
[
5.0,
3.0
],
[
5.0,
1.0
],
[
0.0,
0.5
],
[
1.5,
5.0
],
[
0.0,
2.0
],
[
3.0,
5.0
],
[
0.0,
5.0
]
]
},
{
"n_anchors": 8,
"coverage": 1.0,
"n_pairs_used": 28,
"anchors": [
[
5.0,
3.0
],
[
5.0,
1.0
],
[
0.0,
0.5
],
[
1.5,
5.0
],
[
0.0,
2.0
],
[
3.0,
5.0
],
[
0.0,
5.0
],
[
0.0,
0.0
]
]
}
],
"marginal_gains_pp": [
{
"from_n": 2,
"to_n": 3,
"marginal_coverage_pp": 27.649769585253452
},
{
"from_n": 3,
"to_n": 4,
"marginal_coverage_pp": 22.811059907834107
},
{
"from_n": 4,
"to_n": 5,
"marginal_coverage_pp": 10.599078341013824
},
{
"from_n": 5,
"to_n": 6,
"marginal_coverage_pp": 3.2258064516129004
},
{
"from_n": 6,
"to_n": 7,
"marginal_coverage_pp": 0.0
},
{
"from_n": 7,
"to_n": 8,
"marginal_coverage_pp": 0.0
}
]
}