AntHocNet 2.0.0
Paper-faithful ant-colony ad hoc routing: the shared core and its adapters
Loading...
Searching...
No Matches
config.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-only
2// Copyright (C) 2026 Daniel Henrique Joppi
3
4/**
5 * Tunable AntHocNet parameters.
6 *
7 * These were compile-time constants in AntHocNetUtils (ALFA/BETA/GAMA/...).
8 * Promoting them to a value type lets each adapter expose them as TCL binds
9 * (NS-2) or TypeId attributes (NS-3) without touching the algorithm code.
10 * The defaults reproduce the original constants.
11 */
12#ifndef ANTHOCNET_CORE_CONFIG_H
13#define ANTHOCNET_CORE_CONFIG_H
14
15#include <cstddef>
16
17namespace anthocnet {
18namespace core {
19
20struct Config {
21 /// Pheromone reinforcement / evaporation weights.
22 /// ALFA: evaporation retains alpha of the value per evaporationInterval
23 /// (ADR-0012, a repo extension). **This is NOT the thesis's α.** The 2007
24 /// thesis has three distinct 0.7s: γ (pheromone running average → `gamma`),
25 /// η (MAC send-time average → ns-3 `MacServiceAlpha`) and α (the hop-count
26 /// moving average, eq. 4.2 → `hopCountAlpha` below). This field is none of
27 /// them — the thesis has no evaporation term at all (#182, #185).
28 double alpha = 0.7;
29
30 /// The thesis's α — hop-count moving average, eq. 4.2:
31 /// h ← α·h + (1−α)·h_ant, per (destination, next hop), applied before the
32 /// hop count enters the pheromone metric (#185). 2007 thesis: "α is a
33 /// parameter regulating how quickly the formula adapts to new information.
34 /// In our experiments, α is always kept on 0.7." **Defaults to 0.0**, which
35 /// makes h equal the ant's own hop count — exactly the pre-#185 behaviour —
36 /// so enabling the thesis value (0.7) is an A/B decision, not a silent
37 /// change. Must be in [0, 1).
38 double hopCountAlpha = 0.0;
39
40 double gamma = 0.7; ///< GAMA: weight of the old value when reinforcing.
41
42 /// Eq.1 exponents for the stochastic next-hop choice, from the primary
43 /// source (#179): Ducatelle, *Adaptive Routing in Ad Hoc Wireless Multi-hop
44 /// Networks*, PhD thesis, USI Lugano, 2007 — beta1 (reactive ants, eq 4.1)
45 /// "we keep beta1 relatively high, on 20"; beta2 (proactive ants, eq 4.5)
46 /// "normally kept on 20"; beta3 (data, eq 4.6) "we normally keep beta3
47 /// on 20". All three are 20, so ants and data share one value here.
48 ///
49 /// This is a deliberate departure from [1] (PPSN 2004), which gives no
50 /// absolute values but does state a *ratio*: data uses pheromone squared
51 /// (§3.2 "the square ... to be more greedy") while ants use it unsquared
52 /// (§3.3 "not squared, so that they sample the paths more evenly"). At the
53 /// thesis values that asymmetry disappears. The thesis reaches exploration
54 /// by other means — proactive ants route on max(regular, virtual) pheromone
55 /// and carry a per-node broadcast probability — rather than by a lower
56 /// exponent. Same precedent as hopTimeSec (#88): the thesis supplies numbers
57 /// the paper omits, and its numbers win where the two disagree.
58 ///
59 /// Measured, not merely sourced (#179): a 20-seed x 900 s A/B over the six
60 /// discrete scenarios, paired per seed, moved 5 of 6 to PAIRED-IMPROVED with
61 /// no scenario regressing — PDR +0.50..+3.23 pp and routing load -9.7..-16.7%
62 /// where significant. Only dense-small is neutral. The full table, the
63 /// controls and the one adverse signal are on #179.
64 ///
65 /// betaAnts conflates the thesis's beta1 (reactive) and beta2 (proactive),
66 /// which the thesis parameterises separately. They coincide at 20, so the
67 /// conflation is harmless *here*; it stops being harmless if we ever want a
68 /// value the thesis does not have — the thesis itself sweeps beta2 alone in
69 /// chapter 5. Split the field before deviating per ant type, not after.
70 double betaAnts = 20.0; ///< exponent for ant next-hop choice (thesis beta1/beta2).
71 double betaData = 20.0; ///< exponent for data next-hop choice (thesis beta3).
72
73 /// Per-hop time estimate used by the back-ant pheromone formula (Eq.2):
74 /// the time to take one hop in unloaded conditions. In seconds, matching
75 /// IClock, so it is comparable in magnitude to the measured path time.
76 /// Value from the primary source (#88): Ducatelle, *Adaptive Routing in Ad
77 /// Hoc Wireless Multi-hop Networks*, PhD thesis, USI Lugano, 2007 — "we
78 /// kept thop on 0.003 sec". [1] (PPSN 2004) defines the constant but gives
79 /// no number, which is why this was a provisional 50 ms until 2026-07-25.
80 double hopTimeSec = 0.003; ///< T_hop = 3 ms (2007 thesis)
81
82 /// Congestion-aware per-hop cost (item 10/A2, [1] §3.2): when on and an
83 /// ILinkState is injected, a forward ant records each node's expected
84 /// send time (Q_mac+1)*T̂_mac instead of its own wall-clock transit delta,
85 /// so the path-time term T̂_d reflects sustained MAC load. Gated + default
86 /// off so the simpler item-02 metric stays the shipped default until a
87 /// benchmark justifies the switch.
88 bool enableMacMetric = false;
89
90 /// Links whose pheromone drops below this are pruned.
91 double minPheromone = 0.00001; ///< MIN_PHEROMONE
92
93 /// Time-proportional evaporation (ADR-0012): a secondary safety net, the
94 /// only source of aging (reinforcement no longer ages competitors). Each
95 /// tick ages every regular link by alpha^(dt/evaporationInterval). Gated so
96 /// item 08 can run the paper-faithful "running-average only" ablation.
97 bool enableEvaporation = true;
98 double evaporationInterval = 1.0; ///< reference interval (s) for the decay.
99
100 /// At most one reactive forward ant per destination per this window, so a
101 /// stream of packets to an unreachable destination doesn't flood ants
102 /// ([1] §4.2).
104
105 /// Proactive / diffusion subsystem (ADR-0007), config-gated so the
106 /// benchmark ablation (item 08) can justify the shipped default.
107 bool enableProactive = true; ///< master: proactive ants + diffusion.
108 bool enableDiffusion = true; ///< hello pheromone adverts + virtual table.
109
110 /// Diffusion advert cap k: at most this many destinations per hello ant
111 /// (#186). 2007 thesis: "picks a maximum number k of destinations it has
112 /// routing information for. k is normally kept on 10" — and its §5.3.4
113 /// sweeps k = 0/2/5/10/20, reporting performance improving monotonically
114 /// with k. Clamped to the wire bound kMaxHelloOnWire (64) so a large value
115 /// can never produce a hello the codec would reject. Which k destinations
116 /// fill the slots is a separate, documented deviation: active sessions
117 /// first, then best pheromone (#26 item 6.5), where the thesis picks k at
118 /// random — see docs/fidelity.md.
119 std::size_t maxHelloAdverts = 10;
120
121 /// Per-ant-type gates, completing the ablation surface the other
122 /// `enable*` flags already provide. **All default true: turning none of
123 /// them off reproduces current behaviour exactly.** They exist so the
124 /// question "which ant types earn their keep in regime X?" is a
125 /// measurement rather than an argument — the same discipline that chose
126 /// the multipath and A2 defaults.
127 ///
128 /// There is deliberately **no** hello gate: ADR-0008 makes the
129 /// hello-timeout detector the one mandatory liveness path, and hello also
130 /// carries the diffusion adverts (`enableDiffusion`) and, on
131 /// multi-interface adapters, the canonical→link-local peer mapping. Use
132 /// `helloInterval` to make it cheaper; do not remove it.
133 ///
134 /// Note `enableReactive = false` removes the only source of *regular*
135 /// pheromone in the default configuration, so routes never form unless
136 /// something else installs them — which is exactly the interaction
137 /// `enableDirectedReactive` + `enableDiffusion` is there to test.
138 bool enableReactive = true; ///< reactive forward ants (route discovery).
139 bool enableRepair = true; ///< local repair ants after a link break ([1] §3.5).
140 bool enableLinkFail = true; ///< link-failure notifications ([1] §3.5).
141
142 /// Directed reactive discovery (default **off** — an explicit deviation
143 /// from [1] §3.1, kept behind a gate until a benchmark justifies it).
144 ///
145 /// [1] broadcasts a reactive forward ant wherever the current node has no
146 /// pheromone for the destination. That is the right move when nothing is
147 /// known — but it ignores information the protocol has already collected:
148 /// the **virtual** pheromone table, built from hello diffusion adverts
149 /// (ADR-0007), frequently holds a usable gradient toward a destination for
150 /// which no *regular* pheromone exists yet. `selectNextHop` only blends the
151 /// virtual table in for proactive ants, so a reactive ant floods past it.
152 ///
153 /// With this on, a reactive forward ant consults the virtual table before
154 /// falling back to broadcast, and unicasts along it when it finds one. The
155 /// flood becomes a directed walk wherever diffusion has reached, and stays
156 /// a flood everywhere else.
157 ///
158 /// Deliberately **not** position- or topology-specific: the gradient is
159 /// the protocol's own, so this behaves identically on a MANET and on a
160 /// satellite ISL mesh, and needs neither GPS (cf. LAR/GPSR) nor an orbital
161 /// model. Nothing new travels on the wire — the virtual table is local
162 /// state — so this costs no `kWireVersion` bump.
163 ///
164 /// Risk to measure, not assume: a stale or wrong gradient sends the ant
165 /// down a dead end where a flood would have found a path, trading overhead
166 /// for discovery latency and possibly for delivery.
168
169 /// Per-hop probability that an in-transit proactive forward ant is broadcast
170 /// to explore for new paths rather than unicast along pheromone ([1] §3.3).
172 /// A destination stays an "active session" (and is probed by proactive ants)
173 /// for this many seconds after the last locally-originated data packet to it.
174 double sessionTtl = 5.0;
175
176 /// Emission gate for proactive forward ants (issue #180). The proactive
177 /// timer *considers* one ant per active session; this is the fraction by
178 /// which the best **virtual** pheromone for that destination must exceed the
179 /// best **regular** pheromone before the ant is actually sent.
180 ///
181 /// Ducatelle 2007 thesis (lines 4084-4088): *"In order to improve
182 /// efficiency, the actual sending of a proactive forward ant is conditional
183 /// to the availability of good new virtual pheromone: only if the best
184 /// virtual pheromone is significantly better (in our experiments: at least
185 /// 10% better) than the best regular pheromone, a proactive forward ant is
186 /// sent out."*
187 ///
188 /// Expressed as a **margin** (0.10 = "at least 10% better"), not as a 1.10
189 /// ratio, so that `0` reads unambiguously as "no margin required" — i.e. the
190 /// gate is off and every considered ant is sent, reproducing pre-#180
191 /// behaviour for the ablation. See `shouldSendProactive()` for the
192 /// boundary cases (no virtual pheromone; no regular route at all).
193 ///
194 /// **The comparison is per-link, not the thesis's literal best-vs-best**
195 /// (ADR-0018, the #180 re-derivation): pass iff some neighbour's virtual
196 /// pheromone beats the regular pheromone on that SAME link by the margin,
197 /// with a hint on an unsampled link passing trivially. The scalar
198 /// best-vs-best form compares estimators of different paths; its ratio has
199 /// a structural ceiling tau(h-1)/tau(h) ~ h/(h-1) (measured byte-exact by
200 /// `exp_uniformity_probe`), so any fixed margin m silently disables the
201 /// gate for destinations farther than 1 + 1/m hops — on the old, corrupted
202 /// clocks this was measured as pass rates of 0-3.8 % and, when forced on,
203 /// +36-68 % NRL / -5 to -6.4 pp PDR (PR #188). The per-link ratio is
204 /// degree- and hop-independent (probe: centred 0.97-1.06).
205 ///
206 /// **Defaults to 0 (gate OFF).** The re-derived shape makes a non-zero
207 /// margin *meaningful* (probe-measured: m in 0.2-0.5 selects the genuine
208 /// anomaly tail rather than a phase/hop artefact); adopting one as default
209 /// is a benchmark decision on the regime that keeps proactive on (#248:
210 /// satellite), owned by #180's A/B record.
211 /// `core/tests/exp_gate_cascade.cpp` reproduces the historical failure.
213
214 /// Timer intervals (seconds).
215 double helloInterval = 1.0;
216 /// Proactive forward-ant period per active session. 10.0 is the
217 /// long-standing repo value with no recorded source (#182); the thesis's
218 /// §5.3.3 measured optimum is 2 s, but adopting it is #248's sweep to
219 /// decide — PR #252 accidentally shipped 2.0 here while claiming not to,
220 /// which the per-merge refresh measured as NRL ×4.7 / PDR −12 pp at
221 /// paper-base (#254). Do not change this default without that A/B.
222 double proactiveInterval = 10.0;
223 double lifeAnt = 2.0;
224
225 /// A neighbour is presumed gone after this many missed hellos
226 /// (maxIdle = helloInterval * allowedHelloLoss), per [1] §3.5.
228
229 /// Max times a repair / link-failure ant may be (re)broadcast before being
230 /// dropped, so local repair and failure notifications can't storm ([1] §3.5).
232
233 /// Minimum spacing (s) between LinkFail notifications this node originates
234 /// about the same destination. Under link flapping (evict -> hello
235 /// re-learn -> evict) every cycle re-broadcast a fresh note about the same
236 /// destinations, making origins ~98% of linkfail volume (issue #20).
237 /// The #20 sweep picked 5.0: 1 s misses the ~3+ s flap cycle (no effect),
238 /// 10 s starts costing PDR/delay. 0 disables the cooldown (the original
239 /// spec has no rate limit).
241 /// Consecutive MAC transmit-failures to the same next hop (with no reception
242 /// from it in between) before the adapter's fast-path detector (ADR-0008
243 /// detector D) treats the link as broken. Debounces transient congestion
244 /// drops: a single retry-limit drop in a dense/contended network is usually a
245 /// collision, not a topology change, and evicting the neighbour on it
246 /// destroys valid routes and triggers rediscovery floods (issue #19).
248 /// Max times **one node** may broadcast **one reactive generation**
249 /// `(src, seqNum)`. `-1` = unbounded. Default 2.
250 ///
251 /// **The unit of this field changed in #173 — read this before comparing it
252 /// to an older run or an older sweep.** It used to be a budget carried on
253 /// the ant and decremented at every hop, i.e. per *ant path*; it is now a
254 /// counter held at each node per generation. Same name, same default,
255 /// different meaning — the `alpha`/ADR-0012 trap, so it is spelled out
256 /// here (see `docs/configuration.md`).
257 ///
258 /// Why per node. A reactive forward ant broadcasts wherever there is no
259 /// pheromone for the destination, so a *per-path* budget is a hop limit on
260 /// discovery: at 2, destinations more than ~5 hops away were permanently
261 /// undiscoverable (#169), which is what made sparse/static fields look like
262 /// an AntHocNet weakness. A *per-node* count does not limit reach at all —
263 /// the ant may still travel arbitrarily far, each node along the way simply
264 /// does not re-broadcast the same generation indefinitely.
265 ///
266 /// Why a bound is needed at all, given the sources describe none. The 2007
267 /// thesis bounds proliferation by duplicate suppression ("subsequent copies
268 /// are destroyed"), `maxPathLength` and the `antAcceptanceFactor` band. But
269 /// with `enableMultipath` on (the default) a reactive forward ant is
270 /// admitted by the acceptance band *instead of* `(src,seq)` duplicate
271 /// suppression, and the band admits rather than suppresses. Removing the
272 /// per-path budget in #169 therefore left no bound: one discovery on a
273 /// 7x7 grid cost 30,090 ants, and ns-3 `large-scale` fell to 21.7% PDR at
274 /// NRL 3071 (#173). This restores duplicate suppression's *intent* for the
275 /// one ant type that bypasses it.
276 ///
277 /// **Default is now `-1` (unbounded), as of #177.** The two-factor band
278 /// below (a1=0.9 / a2=2.0) bounds the flood on its own — one discovery on a
279 /// 7x7 grid costs 154 ants with no count in force, ~3.1n and flat in n — so
280 /// the per-node counter is no longer load-bearing, and leaving it on cost
281 /// delivery in dense graphs (heavy-load +1.8 pp, large-scale +4.7 pp at
282 /// 11.6%/25.6% less overhead once removed). Kept configurable for
283 /// sensitivity experiments; any finite value still bounds re-broadcasts
284 /// per (node, generation).
286 /// Multipath reactive setup ([1] §3.1, issue #96): when on, a *later*
287 /// reactive forward ant of an already-seen generation is forwarded if it
288 /// passes the antAcceptanceFactor band below, laying down *multiple* good
289 /// paths — and losing a best hop that leaves a usable alternate is absorbed
290 /// instead of flooding a LinkFail (the churn bound; without it multipath
291 /// regressed PDR on the ns-3 disk-model harness, #96 round 1). When off,
292 /// every ant type uses strict (src,seq) dedup — only the first-arriving
293 /// copy propagates (single-path setup). Default on: with the churn bound,
294 /// multipath beat single-path on every headline metric in the paper regime
295 /// (PDR 92.3 vs 89.4, delay/jitter/NRL all no worse; #96 round 2).
296 bool enableMultipath = true;
297 /// Multipath acceptance factor ([1] §3.1, "empirically set to 1.5"), used
298 /// only when enableMultipath is on: a later same-generation reactive
299 /// forward ant is forwarded only if both its hop count and its travel time
300 /// are within this factor of the best ant of that generation seen so far.
301 /// *Higher* admits *more* copies (more multipath, up to a flood); 1.0 still
302 /// admits equal-metric copies, so no factor value reproduces strict
303 /// single-path dedup — that is what enableMultipath=false is for.
304 ///
305 /// **Default is 0.9, not the 1.5 of [1] §3.1, as of #177.** The 2007
306 /// Ducatelle thesis describes the same mechanism
307 /// but states the value its authors actually ran, and it is *below* 1.0:
308 ///
309 /// "If the number of hops and travel time of a newly received ant are
310 /// both within an acceptance factor a1 of those of the best previously
311 /// received ant of the same route setup, the new ant is accepted and
312 /// forwarded; otherwise, it is discarded. a1 is set quite low (to 0.9),
313 /// in order to only allow the best ants through and avoid too much
314 /// proliferation of forward ants in the network."
315 /// -- 2007 thesis, lines 4655-4659
316 ///
317 /// So a1 < 1 is deliberate: a later ant must be *strictly better* than the
318 /// generation's best by ~10% on **both** metrics to be forwarded, which is
319 /// what makes the band a suppressor rather than an admitter. This is the
320 /// same field and the same meaning as on `main` — only the default moves —
321 /// so it is not the #173 "unit changed under the name" trap.
323 /// Disjoint-path acceptance factor **a2** — the less restrictive factor
324 /// applied when a reactive forward ant's *first hop* (the node it travelled
325 /// to immediately after the source) has **not** been seen among the ants
326 /// this node already accepted for that `(src, seqNum)` generation:
327 ///
328 /// "To boost the creation of disjoint paths, a different mechanism is
329 /// applied, which takes into account the first hop taken by each ant. If
330 /// this first hop is different from those taken by previously accepted
331 /// ants, we apply a higher (less restrictive) acceptance factor a2 than
332 /// in the case the first hop was already seen before (a2 was set to 2)."
333 /// -- 2007 thesis, lines 4667-4671
334 ///
335 /// A new first hop is evidence that the ant arrived over a genuinely
336 /// *disjoint* branch of the network, which is worth a path even when its
337 /// metrics are worse than the incumbent's; a repeat first hop is a likely
338 /// near-copy of a path already laid, so it must clear `antAcceptanceFactor`
339 /// (a1). Used only when `enableMultipath` is on. Set below a1 and this
340 /// mechanism inverts — it would penalise disjointness — so keep a2 >= a1.
341 ///
342 /// New field, deliberately not folded into `antAcceptanceFactor`: silently
343 /// redefining an existing field's meaning is the #173 defect this repo has
344 /// already paid for once (see `docs/configuration.md` §2).
346 /// Max times a proactive forward ant may be (re)broadcast — covering both the
347 /// per-hop exploratory broadcast ([1] §3.3) and a route gap en route. Proactive
348 /// ants monitor known paths; an unbounded budget let them flood any region of
349 /// missing routes, amplifying route churn into control storms (issue #45).
351
352 /// Local repair wait ([1] §3.5): after launching a repair ant, wait
353 /// repairWaitFactor × the estimated end-to-end delay of the lost path for a
354 /// backward repair ant; if none arrives, discard the buffered packets for
355 /// that destination and send a link-failure notification (spec D6). The
356 /// paper sets the factor empirically to 5.
357 double repairWaitFactor = 5.0;
358 /// Flat repair wait (seconds) used when the lost path has no usable delay
359 /// estimate (e.g. its pheromone was already gone).
360 double repairTimeout = 1.0;
361
362 /// Conservative upper bound on path length for the expanding-ring search.
364
365 /// Bound the visited-node stack carried in a packet, and the (src,seq)
366 /// dedup history, so a long-running simulation cannot grow them without
367 /// limit (a latent issue in the original fixed-size malloc arrays).
368 std::size_t maxPathLength = 100;
369 std::size_t maxHistory = 4096;
370};
371
372} // namespace core
373} // namespace anthocnet
374
375#endif // ANTHOCNET_CORE_CONFIG_H
AntHistoryTracker: (src, seqNum) duplicate detection.
Definition ant_history.h:24
std::size_t maxHistory
Definition config.h:369
double helloInterval
Timer intervals (seconds).
Definition config.h:215
double alpha
Pheromone reinforcement / evaporation weights.
Definition config.h:28
bool enableMacMetric
Congestion-aware per-hop cost (item 10/A2, [1] §3.2): when on and an ILinkState is injected,...
Definition config.h:88
bool enableDirectedReactive
Directed reactive discovery (default off — an explicit deviation from [1] §3.1, kept behind a gate un...
Definition config.h:167
bool enableLinkFail
link-failure notifications ([1] §3.5).
Definition config.h:140
double linkfailNotifyInterval
Minimum spacing (s) between LinkFail notifications this node originates about the same destination.
Definition config.h:240
double reactiveRetryInterval
At most one reactive forward ant per destination per this window, so a stream of packets to an unreac...
Definition config.h:103
double betaAnts
Eq.1 exponents for the stochastic next-hop choice, from the primary source (#179): Ducatelle,...
Definition config.h:70
bool enableProactive
Proactive / diffusion subsystem (ADR-0007), config-gated so the benchmark ablation (item 08) can just...
Definition config.h:107
int networkDiameter
Conservative upper bound on path length for the expanding-ring search.
Definition config.h:363
std::size_t maxHelloAdverts
Diffusion advert cap k: at most this many destinations per hello ant (#186).
Definition config.h:119
double antAcceptanceFactor
Multipath acceptance factor ([1] §3.1, "empirically set to 1.5"), used only when enableMultipath is o...
Definition config.h:322
bool enableEvaporation
Time-proportional evaporation (ADR-0012): a secondary safety net, the only source of aging (reinforce...
Definition config.h:97
int repairMaxBroadcasts
Max times a repair / link-failure ant may be (re)broadcast before being dropped, so local repair and ...
Definition config.h:231
bool enableMultipath
Multipath reactive setup ([1] §3.1, issue #96): when on, a later reactive forward ant of an already-s...
Definition config.h:296
double hopTimeSec
Per-hop time estimate used by the back-ant pheromone formula (Eq.2): the time to take one hop in unlo...
Definition config.h:80
int reactiveMaxBroadcasts
Max times one node may broadcast one reactive generation (src, seqNum).
Definition config.h:285
double betaData
exponent for data next-hop choice (thesis beta3).
Definition config.h:71
double proactiveBroadcastProb
Per-hop probability that an in-transit proactive forward ant is broadcast to explore for new paths ra...
Definition config.h:171
bool enableReactive
Per-ant-type gates, completing the ablation surface the other enable* flags already provide.
Definition config.h:138
int proactiveMaxBroadcasts
Max times a proactive forward ant may be (re)broadcast — covering both the per-hop exploratory broadc...
Definition config.h:350
double antAcceptanceFactorNewHop
Disjoint-path acceptance factor a2 — the less restrictive factor applied when a reactive forward ant'...
Definition config.h:345
std::size_t maxPathLength
Bound the visited-node stack carried in a packet, and the (src,seq) dedup history,...
Definition config.h:368
double minPheromone
Links whose pheromone drops below this are pruned.
Definition config.h:91
double sessionTtl
A destination stays an "active session" (and is probed by proactive ants) for this many seconds after...
Definition config.h:174
int allowedHelloLoss
A neighbour is presumed gone after this many missed hellos (maxIdle = helloInterval * allowedHelloLos...
Definition config.h:227
double evaporationInterval
reference interval (s) for the decay.
Definition config.h:98
double proactiveVirtualMargin
Emission gate for proactive forward ants (issue #180).
Definition config.h:212
double repairTimeout
Flat repair wait (seconds) used when the lost path has no usable delay estimate (e....
Definition config.h:360
bool enableDiffusion
hello pheromone adverts + virtual table.
Definition config.h:108
double repairWaitFactor
Local repair wait ([1] §3.5): after launching a repair ant, wait repairWaitFactor × the estimated end...
Definition config.h:357
double proactiveInterval
Proactive forward-ant period per active session.
Definition config.h:222
int txFailureThreshold
Consecutive MAC transmit-failures to the same next hop (with no reception from it in between) before ...
Definition config.h:247
double hopCountAlpha
The thesis's α — hop-count moving average, eq.
Definition config.h:38
bool enableRepair
local repair ants after a link break ([1] §3.5).
Definition config.h:139
double gamma
GAMA: weight of the old value when reinforcing.
Definition config.h:40