Swarm Search is a multi-agent simulation of an autonomous drone swarm searching for bandit camps and hostages in Northwest Nigeria. Designed for communication-degraded environments, it eliminates centralized control by using stigmergy—coordinating drones entirely through a shared virtual pheromone grid.
# Swarm Search — Project Handoff
*Last updated: June 2026*
## What this project is
A simulation of a drone swarm performing autonomous search over conflict-affected
terrain in Nigeria — specifically targeting two tasks:
1. **Hideout detection** — coverage search across large terrain (forests, hills,
rural settlements) for structures or heat/RF signatures suggesting bandit
camps.
2. **Victim/hostage localization** — once a zone of interest is flagged,
narrowing down to precise location.
The motivating context is the banditry crisis in Nigeria's Northwest
(Zamfara, Katsina, Sokoto). This is a generalized-unit simulation — no
specific hardware platform is assumed. The goal right now is to get the
coordination algorithm right in simulation before any hardware
considerations enter the picture.
## Core idea: unified pheromone field
Instead of coordinating robots with a central controller or explicit
communication protocol, the swarm coordinates indirectly through a shared
**virtual pheromone field** — stigmergy, the same mechanism ants use.
The field is a scalar grid, each cell holding a value in **[-1, 1]**:
- **Negative** = repulsive — "this area is covered, go elsewhere"
- **Positive** = attractive — "something interesting here, investigate"
- **Zero** = neutral — unexplored
This single scale unifies what would otherwise be two separate systems
(coverage logic and detection logic) into one number a robot can read and
act on.
### Why two channels under the hood
Although robots act on a single net field value, the field is actually
computed from two separate channels that are tracked and decayed
independently:
- `F_cov` — coverage/repulsion, written whenever a robot passes through a
cell, decays fast
- `F_det` — detection/attraction, written when a robot's sensor confidence
crosses a threshold, decays slow
These are summed into `F_net = clip(F_cov + F_det, -1, 1)` for movement
decisions. The reason for keeping them separate rather than just using one
field: …