Add roaming simulator evaluation#4
Open
sergio-gimenez wants to merge 15 commits into
Open
Conversation
compose_topologies(home, visited) accepted exactly two single-operator
topologies and concatenated them — sufficient for the Iberia §7.4 roaming
scenario (K=2, Movistar + MEO) but not for the federation "network of
networks" vision in §7.5.1 where K≥3 operator fields share one topology.
Replace the fixed two-argument signature with a K-ary vector form:
compose_topologies(members::Vector{NetworkTopology}; operators=1:K)
Members are concatenated in order with edge/PSA indices offset per
preceding member, gNBs and PSAs tagged by operator id. Municipalities
are deduplicated by code so that overlapping members (two operators
covering the same country) do not double-count population weight, while
every member's infrastructure stays in — the placement distribution
reflects real population, the roaming trigger reflects real coverage.
A backward-compatible two-argument method delegates to the K-ary form,
preserving the existing Iberia call sites unchanged.
Add the pan-Iberian federation scenario: K real operator fields (existing OpenCellID data, no new downloads) composed into one shared topology, K swept 2..5. The K=2 prefix reproduces the Iberia §7.4 baseline (Movistar + MEO); K≥3 exercises the federation vision where agent fields overlap and inter-operator crossings become routine attach-to-best-coverage events — the per-crossing σ decides viability. run_federation.jl drives the sweep across three mobility models (pedestrian / urban / highway) with configurable semantics (:reestablish | :ideal_ho), agent count, and duration. It prints the agreement-mesh growth analytic alongside the sim: 5G needs O(K(K-1)/2) bilateral agreements (GSMA NG.113 §4.2 Model 1; Models 2.3/3/4 add Group SEPPs, aggregators and Roaming Hubs to compress that mesh), RUPA needs O(K) enrollments into the shared internetwork DIF. FederationTests.jl covers: - K-ary compose: offsets, operator tags, merged population weights - overlapping members: shared municipalities counted once, infra kept - custom operator ids - 2-ary backward compat delegates to K-ary - crossings among 3 members each charge σ, intra-member moves do not; roam stretch samples accumulate on every handover while abroad, not only at crossings (HR hairpin persists for the whole visit) All 452 tests pass.
…y collisions The K-ary compose_topologies deduplicated municipalities by code alone, but Int-normalized codes collide across countries: Spain INE and Portugal DICO share numeric ranges, so "1001" in Spain (Alegría- Dulantzi) and "1001" in Portugal (Aveiro) are different places. The old key collapsed them into one, dropping population weight — Iberia showed 8310 municipalities instead of 8322. Key is now (code, name). Same code + same name = same place (dedup); same code + different name = different places (both kept). Adds a regression test that composes two fields with colliding codes and verifies both municipalities survive with correct population weights. All 454 tests pass (2 new).
Move the 20 run scripts scattered at the repo root into two directories:
runs/ — parametric, dispatcher-friendly scripts (national,
iberia, federation, deployment_sweep, churn_data,
trajectories)
runs/legacy/ — one-off diagnostic and debugging scripts superseded
by the parametric runs (mobility_eval v1/v2/v3,
spain_focused, spain_forced_handover, etc.)
Each script's header comment is normalized to show invocation via the
upcoming main.jl dispatcher (`julia --project main.jl <run> [args...]`)
instead of direct `julia --project run_X.jl`. Data and config paths
switch from `@__DIR__` (which broke once scripts moved out of root) to
`pkgdir(DesJulia6gRupa)` so they resolve correctly regardless of where
the dispatcher is invoked from.
Replace the old interactive-only main.jl (3-option menu: run sim / plot / quit) with a dispatcher that supports both interactive and command- line invocation: julia --project main.jl # interactive menu julia --project main.jl list # list available runs julia --project main.jl national spain # parametric dispatch julia --project main.jl iberia reestablish 500 300 julia --project main.jl federation reestablish 0 1200 all The dispatcher auto-discovers runs/*.jl and runs/legacy/*.jl, parses each script's header comment for description and usage examples, and injects user args into ARGS before include(). The interactive menu shows current runs, legacy runs (behind a submenu), and keeps the original simulation/plot entries. Old direct-invocation examples in script headers are normalized to the dispatcher form by parse_header.
Point all reproduction commands and file references at the new main.jl dispatcher and runs/ directory structure: - INFOCOM_PAPER_STATUS.md: `run_national.jl` → `main.jl national`, `run_minimal_topology.jl` → `runs/legacy/run_minimal_topology.jl` - README.md: `run_deployment_sweep.jl` → `main.jl deployment_sweep` - docs/agents/countries/portugal.md: `run_national.jl portugal` → `main.jl national portugal`, `run_iberia.jl` → `main.jl iberia` - frontend/README.md: `gen_trajectories.jl` → `main.jl trajectories` - frontend/index.html: bundle-not-found message updated to suggest `main.jl trajectories` invocation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Testing
julia --project -e 'include("test/RoamingTests.jl")'passes: 43/43julia --project -e 'using Pkg; Pkg.test()'reports 393 passed, 1 failed: pre-existing Aqua stale-deps forStatsPlotsandPlots