Workshop · The Nest — the core's API, liveworld: Ad hoc · t 1:12 · chambers glow when called
ns-3 module ns3::anthocnet::RoutingProtocol Browser adapter (this game) ahn_web::World SURFACE · the adapters IClock · IRng · ITimerScheduler INeighborProvider · ILinkState IRouterObserver TUNNELS · the ports (ports.h) Queen chamber AntRouterLogic → RouteDecision ● 1,284 calls this run Pheromone store PheromoneTable · PheromoneEngine ◆ open in the reader → The gate AntMessage · codec Senses ILinkMetric · ClassicMetric Memory AntHistoryTracker · GenerationTracker Rule stone Config Map room ShortestPathGraph
● live call counts from the running worldclick a chamber → its API pageevery public class in core/include is on the map (CI)
API · PheromoneTablepheromone_table.h
Workshop › The Nest › Pheromone store

PheromoneTable

Per-node routing state: the regular and virtual pheromone maps keyed by (neighbour, destination), the neighbour set, and the per-table destination sets.

Members, with their live values at node 7 (illustrative)

getPheromoneRegular(dest, neighbor) consttoward 29 via 12: 0.0841 · via 3: 0.0217
bestRegular(dest) constBest regular pheromone any neighbour holds for dest; advertised in hellos. 0.0841
bestVirtual(dest) constSame units as bestRegular; the comparison is the proactive emission gate (#180). 0.0590

Who calls it

AntRouterLogic on every ant and data decision; adapters only read it (the game's route overlay, ns-3's routing-table printout).

◉ Show it on the mapFull referenceSource
X-ray · node 7toward node 29
next hopregular
getPheromoneRegular
virtual
getPheromoneVirtual
P(data)
RouteDecision
120.08410.0590≈ 1.00
30.02170.0204< 0.001
18—0.01020

P(data) is the core's own probability: pheromoneβ, β = Config::betaData = 20.

X-ray · forward ant 7 → 12the real codec bytes
030211000000001d0000000700000000 000000000000400000000000000000ff ffffff020000000000…
versionwire format 0x03 — checked firstkWireVersion type · direction0x02 Reactive · 0x11 Up (forward)AntType src → dstnode 0 → node 29AntMessage seqNum7 (u32 — the original wrapped at 256)wire-format.md timeStart2.0 s (f64, little-endian)AntMessage broadcastBudget−1 = untrackeditem 05 nVisited2 hops so far → visited[] follows, 12 bytes eachAntHop

The game serializes every ant with the same codec::serialize the ns-3 module puts on the air — these are those bytes.

Tuning bench · ConfigA/B on the same seed
betaData BetaData12
helloInterval HelloInterval1 s
enableRepair EnableRepairon

Delivered: 91 % vs the default's ghost run 94 %, same seed (illustrative). Each default's source: configuration.

# the same change in ns-3
--ns3::anthocnet::RoutingProtocol::BetaData=12
▶ browser · disk radioseed 1
This game
simplified radio
live, in your browser
◼ ns-3 replay · two-ray + buildingsseed 1 of 20
ns-3 3.42 · committed trace
42.10 % PDR
main cell, mean of 20 seeds
❚❚t 341 s
● route changes diverge heresame renderer, two sources
Take it to ns-3 · your City streets levelnothing leaves your browser

The level you built, as an ns-3 run: your devices' positions over time, your calls, your upgrades.

📄 mobility.ns_movements📄 flows.txt📄 run.sh📄 README.md
# inside the release image, or after make install-ns3 && make doctor
./ns3 run "anthocnet-compare --mobility=trace --traceFile=mobility.ns_movements \
  --flowsFile=flows.txt --propagation=urban --blocksX=5 --blocksY=5 --runs=20 \
  --ns3::anthocnet::RoutingProtocol::EnableRepair=true"
⬇ Download the ns-3 kitCopy the commandWhy the numbers differ
Quest · Field engineer — install AntHocNet in ns-33 / 5
✓ns-3 tree found: 3.48make doctor
✓compiler g++ 13.2, CMake 3.28make doctor
✓module installed to contrib/anthocnetmake install-ns3
✗baselines: AOMDV not built — re-run with BASELINES=0 or install the patch#605
○run the smoke and paste its ##BENCH## linereward: Lab badge

Paste make doctor's output: the game reads its ##DOCTOR## block locally and ticks what passed.