Add ant docs
This commit is contained in:
parent
d90a6784c5
commit
a3bbc258be
2 changed files with 522 additions and 0 deletions
308
docs/INFRASTRUCTURE.md
Normal file
308
docs/INFRASTRUCTURE.md
Normal file
|
|
@ -0,0 +1,308 @@
|
||||||
|
# Infrastructure Requirements
|
||||||
|
|
||||||
|
Foundational data structures and capabilities needed to support all features
|
||||||
|
described in REALISM-IDEAS.md. These are the structural primitives — every
|
||||||
|
realism feature reduces to needing one or more of these five layers.
|
||||||
|
|
||||||
|
|
||||||
|
## A. Expanded ant state
|
||||||
|
|
||||||
|
Currently all 4 RGBA Float32 channels are used:
|
||||||
|
R = pos.x, G = pos.y, B = angle, A = packed(storage | isCarrying)
|
||||||
|
|
||||||
|
Most realism features need more per-ant data. This means a second ant
|
||||||
|
texture (RGBA Float32, same dimensions, same ping-pong pattern).
|
||||||
|
|
||||||
|
What needs to live in ant state:
|
||||||
|
|
||||||
|
personality/threshold float #3 individuality, #4 adaptive noise
|
||||||
|
steps since pickup int #1 distance-modulated deposition
|
||||||
|
cargo quality float #5 food quality encoding
|
||||||
|
path integration dx float #9 path integration
|
||||||
|
path integration dy float #9 path integration
|
||||||
|
role/caste float #11 caste switching
|
||||||
|
colony ID int #12 CHC recognition
|
||||||
|
|
||||||
|
That's 7 values. Two RGBA textures give 8 floats total, so with some
|
||||||
|
packing of ints into float bits (steps, colony ID, carrying flag are all
|
||||||
|
small integers) it fits in 2 textures. If the packing gets uncomfortable
|
||||||
|
a third texture is an option — WebGL supports up to 16 texture units per
|
||||||
|
shader, current shaders use 2-3, so headroom is fine.
|
||||||
|
|
||||||
|
Layout sketch for texture 2:
|
||||||
|
|
||||||
|
R = personality (0.0 = pure follower, 1.0 = pure explorer)
|
||||||
|
G = cargo quality (0.0 when not carrying, otherwise food quality value)
|
||||||
|
B = path integration dx (accumulated displacement since last reset)
|
||||||
|
A = packed(path_integration_dy | role | colony_id | steps_since_pickup)
|
||||||
|
|
||||||
|
The A channel packing is tight. Alternative: move steps_since_pickup into
|
||||||
|
texture 1's storage bits (current storage uses ~20 of 31 available bits)
|
||||||
|
and give path_integration_dy its own float in texture 2.A. Then role and
|
||||||
|
colony_id pack together (role quantized to 8 bits, colony_id in 8 bits =
|
||||||
|
16 bits, fits in the fractional part of another channel).
|
||||||
|
|
||||||
|
Pipeline impact:
|
||||||
|
- AntsComputeScene needs to read/write 2 textures per ant instead of 1
|
||||||
|
- Ping-pong doubles from 2 textures to 4
|
||||||
|
- antsCompute.frag gets a second sampler input and second render target
|
||||||
|
(requires MRT — multiple render targets — or a second pass)
|
||||||
|
- MRT is available in WebGL2 via gl.drawBuffers(), clean solution
|
||||||
|
|
||||||
|
Features unlocked: #1, #3, #4, #5, #9, #11, #12
|
||||||
|
|
||||||
|
|
||||||
|
## B. Generalized pheromone system
|
||||||
|
|
||||||
|
Currently 2 pheromone channels in the world texture:
|
||||||
|
G = scentToHome, B = scentToFood
|
||||||
|
A = unused (free slot for one more)
|
||||||
|
|
||||||
|
Minimum viable expansion: put repellent pheromone in world.A. That gives
|
||||||
|
3 channels with zero new textures.
|
||||||
|
|
||||||
|
But alarm pheromone (#6) and multicomponent blends (#8) need more. Options:
|
||||||
|
|
||||||
|
Option 1: Second world texture (RGBA Float32, same worldSize)
|
||||||
|
R = alarm pheromone
|
||||||
|
G = blend component A
|
||||||
|
B = blend component B
|
||||||
|
A = reserved
|
||||||
|
|
||||||
|
Option 2: Multiplex channels temporally or semantically
|
||||||
|
Less clean, harder to reason about, not recommended
|
||||||
|
|
||||||
|
Going with option 1, total pheromone channels = 6:
|
||||||
|
world1.G scentToHome
|
||||||
|
world1.B scentToFood
|
||||||
|
world1.A repellent
|
||||||
|
world2.R alarm
|
||||||
|
world2.G blend component A
|
||||||
|
world2.B blend component B
|
||||||
|
|
||||||
|
The blur/diffusion shader must generalize:
|
||||||
|
- Currently applies one blur radius and one fade-out factor uniformly
|
||||||
|
- Needs per-channel parameters:
|
||||||
|
channel decay rate diffusion radius notes
|
||||||
|
toHome medium medium standard trail
|
||||||
|
toFood medium medium standard trail
|
||||||
|
repellent slow (2x) narrow persists longer per biology
|
||||||
|
alarm fast wide spreads fast, fades fast
|
||||||
|
blend A configurable configurable depends on compound
|
||||||
|
blend B configurable configurable depends on compound
|
||||||
|
|
||||||
|
- Pass these as a uniform array or pack into a small config texture
|
||||||
|
- The blur pass runs once but processes all channels with their own params
|
||||||
|
|
||||||
|
Pipeline impact:
|
||||||
|
- worldBlur.frag becomes per-channel parameterized
|
||||||
|
- world.frag merges deposits into more channels
|
||||||
|
- antsCompute.frag reads more pheromone channels for decision-making
|
||||||
|
- antsDiscretize.frag may need more output channels (MRT again, or
|
||||||
|
expand discrete texture to RGBA Float32 to carry more deposit types)
|
||||||
|
|
||||||
|
Features unlocked: #2, #6, #8
|
||||||
|
|
||||||
|
|
||||||
|
## C. World cell metadata
|
||||||
|
|
||||||
|
Currently world.R uses 3 bits for cell flags:
|
||||||
|
bit 0 = hasFood, bit 1 = isHome, bit 2 = isObstacle
|
||||||
|
bits 3-31 = unused (29 bits free in float representation)
|
||||||
|
|
||||||
|
Several features need more per-cell information:
|
||||||
|
|
||||||
|
terrain type 3-4 bits #7 substrate-dependent decay
|
||||||
|
colony ownership 4-8 bits #12 multi-colony territories
|
||||||
|
food quality ~8 bits #5 quality encoding (quantized)
|
||||||
|
|
||||||
|
Terrain type (3 bits = 8 terrain types) and colony ownership (4 bits = 16
|
||||||
|
colonies) fit cleanly into world.R's unused bits:
|
||||||
|
|
||||||
|
bits 0-2: cell type flags (food, home, obstacle) — existing
|
||||||
|
bits 3-5: terrain type (0=default, 1-7 = surface variants)
|
||||||
|
bits 6-9: colony ID that owns this cell (0=neutral, 1-15 = colonies)
|
||||||
|
bits 10-17: food quality (0-255 quantized, only meaningful when hasFood)
|
||||||
|
bits 18-31: reserved
|
||||||
|
|
||||||
|
This keeps everything in a single channel with bit operations the shader
|
||||||
|
already uses (the existing code does bitwise AND/OR on world.R).
|
||||||
|
|
||||||
|
Terrain type feeds into the blur shader — the decay rate per cell becomes:
|
||||||
|
effective_decay = base_decay * terrain_decay_multiplier[terrain_type]
|
||||||
|
This means the blur shader needs to read the world texture (not just the
|
||||||
|
blurred copy) to know each cell's terrain type. Small perf cost but
|
||||||
|
the texture is already bound.
|
||||||
|
|
||||||
|
Food quality feeds into ant pickup behavior — when an ant grabs food, it
|
||||||
|
reads the quality bits and stores them in its cargo quality channel
|
||||||
|
(ant texture 2.G from section A).
|
||||||
|
|
||||||
|
Features unlocked: #5, #7, #12
|
||||||
|
|
||||||
|
|
||||||
|
## D. Ant-ant spatial interaction
|
||||||
|
|
||||||
|
Currently zero. Ants only interact through stigmergy (pheromone trails in
|
||||||
|
the world texture). No ant knows about any other ant's position or state.
|
||||||
|
|
||||||
|
The discrete ants texture maps ant deposits to grid cells but doesn't
|
||||||
|
preserve ant identity — it just accumulates pheromone values.
|
||||||
|
|
||||||
|
To enable ant-ant awareness, options:
|
||||||
|
|
||||||
|
Option 1: Identity-preserving discrete texture
|
||||||
|
Instead of (or in addition to) accumulating pheromone deposits,
|
||||||
|
store the ant index of whoever occupies each cell. Multiple ants
|
||||||
|
per cell requires either:
|
||||||
|
a) Last-write-wins (lossy but simple, GPU-friendly)
|
||||||
|
b) Linked list in a buffer (complex, needs WebGL2 atomic ops or
|
||||||
|
compute shaders)
|
||||||
|
c) Spatial hash with fixed bucket size (e.g. 4 ants per cell,
|
||||||
|
pack 4 ant indices into RGBA)
|
||||||
|
|
||||||
|
Option (a) is probably fine — tandem running only needs to know
|
||||||
|
"is there an ant near me" and check one neighbor, not enumerate
|
||||||
|
all neighbors.
|
||||||
|
|
||||||
|
Option 2: Proximity via world texture overlay
|
||||||
|
A separate texture where each cell stores the ID (or packed state)
|
||||||
|
of an ant occupying it. Ants sample neighboring cells to find nearby
|
||||||
|
ants. Radius-1 gives 8 neighbors, radius-2 gives 24.
|
||||||
|
|
||||||
|
For tandem running: leader deposits its ID in the cell. Follower
|
||||||
|
checks adjacent cells for the leader's ID, moves toward it.
|
||||||
|
|
||||||
|
For CHC recognition: ant reads neighbor cell, extracts colony ID
|
||||||
|
from neighbor's state, compares to own colony ID.
|
||||||
|
|
||||||
|
Implementation:
|
||||||
|
- New texture: antsPresenceTexture (RGBA Float32, worldSize x worldSize)
|
||||||
|
- R = ant index (or packed ant state subset)
|
||||||
|
- G = colony ID of occupant
|
||||||
|
- B = role/caste of occupant
|
||||||
|
- A = reserved
|
||||||
|
- Written during discretize pass, read during ant compute pass
|
||||||
|
- Cleared each frame before discretize
|
||||||
|
|
||||||
|
Tandem running specifics:
|
||||||
|
- Leader state: "has follower" flag, movement gated on follower proximity
|
||||||
|
- Follower state: "leader index" reference, moves toward leader cell
|
||||||
|
- Pairing logic: when a returning forager passes a naive ant, the naive
|
||||||
|
ant checks if the forager is available as a leader (not already paired)
|
||||||
|
- Race condition on pairing: last-write-wins means two ants might both
|
||||||
|
claim the same leader. Acceptable — worst case is a broken tandem that
|
||||||
|
reforms next frame.
|
||||||
|
|
||||||
|
Pipeline impact:
|
||||||
|
- New texture in discretize pass
|
||||||
|
- antsCompute.frag gets a new sampler for neighbor awareness
|
||||||
|
- Possibly a CPU readback for complex pairing logic that's too hard on GPU
|
||||||
|
|
||||||
|
Features unlocked: #10, #12
|
||||||
|
|
||||||
|
|
||||||
|
## E. Colony-level feedback
|
||||||
|
|
||||||
|
Currently no aggregate state. Individual ants have no information about the
|
||||||
|
colony as a whole — they only react to local pheromone concentrations.
|
||||||
|
|
||||||
|
Caste switching (#11) and alarm response scaling (#6) need colony-wide stats:
|
||||||
|
|
||||||
|
forager count how many ants are currently foraging
|
||||||
|
scout count how many ants are currently exploring
|
||||||
|
total food collected cumulative food delivered to nest
|
||||||
|
threat level number of alarm pheromone cells above threshold
|
||||||
|
colony size total ants (static, but relevant for ratios)
|
||||||
|
|
||||||
|
Two approaches:
|
||||||
|
|
||||||
|
Option 1: GPU reduction
|
||||||
|
Run a reduction shader that sums values across the ant texture:
|
||||||
|
- Count ants with isCarrying = 1 (foragers returning)
|
||||||
|
- Count ants with role > threshold (scouts)
|
||||||
|
- Sum food deposits at home cells
|
||||||
|
Requires multiple passes halving texture dimensions each time
|
||||||
|
(standard parallel reduction). Result lands in a 1x1 texture.
|
||||||
|
Read the 1x1 texture as a uniform for the next frame.
|
||||||
|
|
||||||
|
Pros: stays on GPU, no sync stall
|
||||||
|
Cons: multiple passes, more textures, latency (stats are 1 frame old)
|
||||||
|
|
||||||
|
Option 2: CPU readback
|
||||||
|
Use gl.readPixels on the ant texture (or a downsampled version).
|
||||||
|
Compute stats on CPU. Upload as uniforms next frame.
|
||||||
|
|
||||||
|
Pros: simpler to implement, flexible computation
|
||||||
|
Cons: GPU-CPU sync stall (readPixels is blocking in WebGL1, async in
|
||||||
|
WebGL2 via pixel buffer objects / fences). Could downsample first to
|
||||||
|
reduce transfer size.
|
||||||
|
|
||||||
|
Option 3: Hybrid
|
||||||
|
Reduce on GPU to a small texture (e.g. 4x4), read back 16 pixels
|
||||||
|
instead of thousands, compute final stats on CPU.
|
||||||
|
|
||||||
|
This is probably the pragmatic choice.
|
||||||
|
|
||||||
|
Colony stats feed back as uniforms into antsCompute.frag:
|
||||||
|
|
||||||
|
uniform float u_foragerRatio; // foragers / total ants
|
||||||
|
uniform float u_scoutRatio; // scouts / total ants
|
||||||
|
uniform float u_foodCollected; // cumulative food at nest
|
||||||
|
uniform float u_threatLevel; // alarm pheromone intensity
|
||||||
|
|
||||||
|
Individual ants use these to adjust their role variable:
|
||||||
|
- If foragerRatio is high and scoutRatio is low, some foragers transition
|
||||||
|
toward scouting (role variable drifts)
|
||||||
|
- If threatLevel is high, nearby ants shift toward defensive behavior
|
||||||
|
- Transitions are gradual (continuous role variable, not discrete switch)
|
||||||
|
|
||||||
|
Features unlocked: #6, #11
|
||||||
|
|
||||||
|
|
||||||
|
## Dependency graph
|
||||||
|
|
||||||
|
Which infrastructure layers does each feature need?
|
||||||
|
|
||||||
|
feature A B C D E
|
||||||
|
ant pher cell a2a agg
|
||||||
|
#1 distance-modulated deposition x
|
||||||
|
#2 negative pheromone x
|
||||||
|
#3 individual thresholds x
|
||||||
|
#4 adaptive noise x
|
||||||
|
#5 food quality encoding x x
|
||||||
|
#6 alarm pheromone x x
|
||||||
|
#7 substrate-dependent decay x x
|
||||||
|
#8 multicomponent blends x
|
||||||
|
#9 path integration x
|
||||||
|
#10 tandem running x x
|
||||||
|
#11 caste switching x x
|
||||||
|
#12 CHC recognition x x x
|
||||||
|
|
||||||
|
Layer A (expanded ant state) unlocks: 9 of 12 features
|
||||||
|
Layer B (generalized pheromones) : 4 of 12 features
|
||||||
|
Layer C (cell metadata) : 3 of 12 features
|
||||||
|
Layer D (ant-ant interaction) : 2 of 12 features
|
||||||
|
Layer E (colony feedback) : 2 of 12 features
|
||||||
|
|
||||||
|
Suggested build order based on feature unlock count and dependency:
|
||||||
|
1. Layer A — second ant texture + MRT (unlocks most features)
|
||||||
|
2. Layer B — pheromone channel expansion + per-channel blur params
|
||||||
|
3. Layer C — bit-packed cell metadata (small change, high leverage)
|
||||||
|
4. Layer E — colony aggregate readback (needed before caste switching)
|
||||||
|
5. Layer D — spatial neighbor queries (hardest, fewest features, do last)
|
||||||
|
|
||||||
|
|
||||||
|
## WebGL2 requirements
|
||||||
|
|
||||||
|
Several infrastructure pieces depend on WebGL2 features:
|
||||||
|
|
||||||
|
MRT (multiple render targets) layers A, D
|
||||||
|
gl.drawBuffers() writing 2+ textures per pass
|
||||||
|
pixel buffer objects layer E async readback
|
||||||
|
integer textures (optional) cleaner bit packing in layers A, C
|
||||||
|
|
||||||
|
The simulation already uses three.js WebGLRenderer. Confirm it's running
|
||||||
|
in WebGL2 mode (three.js defaults to WebGL2 when available). If targeting
|
||||||
|
WebGL1 fallback, MRT requires WEBGL_draw_buffers extension and some
|
||||||
|
features may not be feasible.
|
||||||
214
docs/REALISM-IDEAS.md
Normal file
214
docs/REALISM-IDEAS.md
Normal file
|
|
@ -0,0 +1,214 @@
|
||||||
|
# Realism Improvements for Ant Simulation
|
||||||
|
|
||||||
|
Research notes on real ant biology that could improve the simulation.
|
||||||
|
Based on current literature through early 2026.
|
||||||
|
|
||||||
|
## Current simulation model
|
||||||
|
|
||||||
|
- 2 pheromone channels (toHome, toFood) with uniform deposition rate
|
||||||
|
- 3-way sampling (ahead/left/right) for trail following
|
||||||
|
- Random noise for exploration
|
||||||
|
- Binary carrying state (has food or doesn't)
|
||||||
|
- Uniform ant behavior (no individuality beyond ±20% scent storage)
|
||||||
|
- Exponential decay + blur for pheromone diffusion
|
||||||
|
|
||||||
|
|
||||||
|
## High impact, probably feasible on GPU
|
||||||
|
|
||||||
|
### 1. Concentration-dependent pheromone deposition
|
||||||
|
|
||||||
|
Real ants deposit up to 22x more pheromone near the food source vs near the
|
||||||
|
nest (Lasius niger study, Springer 2024). They also modulate based on food
|
||||||
|
quality — Pharaoh's ants deposit significantly more trail pheromone for 1.0M
|
||||||
|
sucrose vs 0.01M sucrose.
|
||||||
|
|
||||||
|
Currently `scentPerMarker` is constant (200). Making it decay with distance
|
||||||
|
traveled since pickup (or scale with a food quality value) would produce more
|
||||||
|
realistic trail dynamics. The concentration gradient effectively encodes
|
||||||
|
distance information for other ants.
|
||||||
|
|
||||||
|
Shader change: track steps-since-pickup in ant state, use it to scale
|
||||||
|
deposition.
|
||||||
|
|
||||||
|
### 2. Negative/repellent pheromone ("no entry")
|
||||||
|
|
||||||
|
Pharaoh's ants deposit a repellent pheromone at trail junctions leading to
|
||||||
|
unrewarding branches. Key details:
|
||||||
|
- Lasts ~2x longer than attractive pheromone (~78 min vs ~33 min half-life)
|
||||||
|
- Ants encountering it U-turn or exhibit zigzagging
|
||||||
|
- Deposited specifically at bifurcation points, not along entire failed paths
|
||||||
|
|
||||||
|
Source: Nature 438, 442 (2005)
|
||||||
|
|
||||||
|
This would prevent the colony from getting stuck on depleted food sources.
|
||||||
|
The alpha channel in the world texture is available for a 3rd pheromone type.
|
||||||
|
|
||||||
|
Shader change: add repellent channel, deposit on failed searches or at
|
||||||
|
depleted food, make ants U-turn on contact.
|
||||||
|
|
||||||
|
### 3. Individual response thresholds (ant "personality")
|
||||||
|
|
||||||
|
Real ants show consistent individual differences:
|
||||||
|
- Bolder/more exploratory individuals become scouts, discover new food
|
||||||
|
- Less exploratory individuals become recruits, exploit known trails
|
||||||
|
- Scouts show lower responsiveness to trail pheromone
|
||||||
|
- Recruits are highly attracted to trail pheromone and nestmates
|
||||||
|
- These differences affect learning strategies (personal vs social info)
|
||||||
|
|
||||||
|
Source: Frontiers in Ecology and Evolution (2021)
|
||||||
|
|
||||||
|
The dominant model for task allocation is the "response threshold model" —
|
||||||
|
each ant has a threshold for each stimulus. When pheromone concentration
|
||||||
|
exceeds the ant's threshold, it follows; below threshold, it explores.
|
||||||
|
Thresholds are determined by genetics, age, body size, experience, and
|
||||||
|
spatial location.
|
||||||
|
|
||||||
|
Shader change: pack a per-ant exploration/exploitation bias into the ant
|
||||||
|
texture. Use it to modulate the balance between pheromone following and
|
||||||
|
random walk.
|
||||||
|
|
||||||
|
### 4. Adaptive stochastic noise
|
||||||
|
|
||||||
|
In real colonies, noise prevents deadlocking onto suboptimal food sources.
|
||||||
|
When a better source appears, noise is what allows some ants to discover it
|
||||||
|
instead of all ants reinforcing the first trail found.
|
||||||
|
|
||||||
|
Source: arXiv 1508.06816
|
||||||
|
|
||||||
|
Could make noise level inversely proportional to pheromone strength — ants
|
||||||
|
on weak trails explore more, ants on strong trails follow more tightly.
|
||||||
|
This is a small change to the existing random walk logic.
|
||||||
|
|
||||||
|
|
||||||
|
## Medium impact, moderate complexity
|
||||||
|
|
||||||
|
### 5. Food quality encoding
|
||||||
|
|
||||||
|
Real ants encode food quality in trail strength — the number of ants
|
||||||
|
recruited scales directly with pheromone quantity released by returning
|
||||||
|
foragers.
|
||||||
|
|
||||||
|
Adding multiple food sources with different quality values would let ants
|
||||||
|
deposit proportionally more pheromone for better food. The colony would
|
||||||
|
naturally converge on the best source first, then shift when it depletes.
|
||||||
|
|
||||||
|
Requires: food quality attribute per food cell, ants read it on pickup,
|
||||||
|
store it, use it as a deposition multiplier.
|
||||||
|
|
||||||
|
### 6. Alarm pheromone
|
||||||
|
|
||||||
|
A separate fast-spreading, fast-decaying signal that causes nearby ants to
|
||||||
|
either flee or swarm depending on context. Transgenic ant research mapped
|
||||||
|
alarm pheromone processing to just 6 glomeruli — a sparse "panic button"
|
||||||
|
with simple encoding.
|
||||||
|
|
||||||
|
Could interact with obstacle placement or painted "danger zones." Would
|
||||||
|
need a 4th pheromone channel or multiplexing with existing channels.
|
||||||
|
|
||||||
|
Real compounds: formic acid + n-undecane in carpenter ants, pyrazines in
|
||||||
|
Tetramorium. The blend ratio determines whether ants flee vs attack.
|
||||||
|
|
||||||
|
### 7. Substrate-dependent pheromone decay
|
||||||
|
|
||||||
|
Real pheromone half-life varies ~3x depending on surface type:
|
||||||
|
- ~9 min on plastic
|
||||||
|
- ~3 min on paper (Pharaoh's ant trail pheromone)
|
||||||
|
- Temperature also accelerates degradation
|
||||||
|
|
||||||
|
If the world had terrain types (encoded in unused bits of the world
|
||||||
|
texture), pheromone could persist longer on some surfaces. This would
|
||||||
|
create emergent preferred highway corridors on "good" terrain.
|
||||||
|
|
||||||
|
### 8. Multicomponent pheromone blends
|
||||||
|
|
||||||
|
Real pheromone signals are multicomponent blends, not single compounds.
|
||||||
|
A single gland secretion can contain 32+ hydrocarbons, acids, aldehydes,
|
||||||
|
etc. Different ratios trigger different responses — in Tetramorium,
|
||||||
|
workers respond maximally to a specific 3:7 ratio of two pyrazine
|
||||||
|
components.
|
||||||
|
|
||||||
|
Could model as ratio between two co-deposited channels rather than
|
||||||
|
single-channel signals.
|
||||||
|
|
||||||
|
|
||||||
|
## Lower priority but fascinating
|
||||||
|
|
||||||
|
### 9. Path integration
|
||||||
|
|
||||||
|
Desert ants (Cataglyphis) maintain a running home vector — a cumulative
|
||||||
|
sum of direction + distance traveled. This gives them a "home vector"
|
||||||
|
pointing back to the nest at all times, even without pheromone trails.
|
||||||
|
|
||||||
|
Key details:
|
||||||
|
- The integrator resets at known locations (nest entrance, landmarks)
|
||||||
|
- No cognitive map — it's a procedural "when you see this, go that way"
|
||||||
|
- Ants can store multiple reference vectors to different food sites
|
||||||
|
- Works even in featureless environments
|
||||||
|
|
||||||
|
Source: Springer, Journal of Comparative Physiology A (2024)
|
||||||
|
|
||||||
|
Shader change: accumulate displacement vector per ant, use it as fallback
|
||||||
|
navigation when no pheromone detected.
|
||||||
|
|
||||||
|
### 10. Tandem running
|
||||||
|
|
||||||
|
One-to-one recruitment where a knowledgeable leader guides a naive
|
||||||
|
follower:
|
||||||
|
- Follower maintains antennal contact with leader's legs/abdomen
|
||||||
|
- Leader only advances after being tapped (feedback loop)
|
||||||
|
- Leader moves slowly so follower can learn landmarks
|
||||||
|
- Follower can become leader after learning the route
|
||||||
|
|
||||||
|
Source: Journal of Experimental Biology 223(9), 2020
|
||||||
|
|
||||||
|
Hard to implement on GPU due to ant-ant interaction requirements, but
|
||||||
|
would produce striking emergent behavior. Might need a CPU-side pass for
|
||||||
|
pairing logic.
|
||||||
|
|
||||||
|
### 11. Caste role switching via neuropeptides
|
||||||
|
|
||||||
|
2025 Cell paper (Rockefeller): two neuropeptides — CCAP and NPA — control
|
||||||
|
division of labor in leafcutter ants. Manipulating them turns defenders
|
||||||
|
into nurses or gardeners into harvesters. Same molecular mechanism found
|
||||||
|
in naked mole-rats (convergent evolution, 600M+ years).
|
||||||
|
|
||||||
|
Could model as a continuous "role" variable per ant that shifts based on
|
||||||
|
colony-level signals (ratio of foragers to scouts, food availability,
|
||||||
|
threat level).
|
||||||
|
|
||||||
|
### 12. Cuticular hydrocarbon (CHC) recognition
|
||||||
|
|
||||||
|
Ants recognize nestmates via complex blends of dozens of cuticular
|
||||||
|
hydrocarbons. Non-nestmates are attacked. This is relevant if the
|
||||||
|
simulation ever has multiple colonies competing for resources.
|
||||||
|
|
||||||
|
|
||||||
|
## Ant brain / connectome status (for reference)
|
||||||
|
|
||||||
|
- No ant connectome exists yet
|
||||||
|
- Drosophila adult connectome completed Oct 2024: 139K neurons, 50M
|
||||||
|
synapses, 8,400+ cell types (FlyWire Consortium, Nature)
|
||||||
|
- Clonal raider ant (Ooceraea biroi) reference brain published 2025
|
||||||
|
(Rockefeller). TEM imaging for full connectome is underway
|
||||||
|
- Ant antennal lobes have ~460 olfactory glomeruli vs ~50 in Drosophila,
|
||||||
|
reflecting the centrality of chemical communication
|
||||||
|
- Alarm pheromone processing maps to just 6 glomeruli — validates using
|
||||||
|
simple threshold rules in simulation
|
||||||
|
- 2025 PNAS paper describes ant colonies as "liquid brains" where
|
||||||
|
heterogeneity in individual movement patterns (not uniformity) drives
|
||||||
|
collective efficiency
|
||||||
|
|
||||||
|
|
||||||
|
## Key sources
|
||||||
|
|
||||||
|
- Pharaoh's ant pheromone modulation: ScienceDirect S0003347207002278
|
||||||
|
- Spatial pheromone deposition in Lasius niger: Springer s00040-024-00995-y
|
||||||
|
- Negative pheromone: Nature 438, 442 (2005)
|
||||||
|
- Individual personality: Frontiers in Ecology and Evolution (2021)
|
||||||
|
- Stochastic noise in foraging: arXiv 1508.06816
|
||||||
|
- Drosophila connectome: Nature s41586-024-07968-y
|
||||||
|
- Ant reference brain: Current Biology S0960-9822(25)01520-9
|
||||||
|
- Neuropeptide caste control: Cell S0092867425005732
|
||||||
|
- Path integration: Springer s00359-024-01725-2
|
||||||
|
- Tandem running: JEB 223(9) jeb221408
|
||||||
|
- Liquid brains: PNAS 2506930122
|
||||||
Loading…
Reference in a new issue