mirror of
https://github.com/ruvnet/RuView
synced 2026-08-07 20:01:43 +00:00
065521dc9e
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.
253 lines
3.5 KiB
JSON
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
|
|
}
|
|
]
|
|
} |