Skip to main content

WODA — World Ocean Dynamics Arena

A test environment and benchmark suite for SwarmOpt: swarms must recover a target (“the penny”) dropped into a multi-fluid ocean on a moon-tide world. Deployments happen on arbitrary schedules; algorithms are ranked by time-to-convergence under heterogeneous physics and swarm-separation constraints.

WODA (working name): a world where Waves, Orbits, Dispersion, and Agents interact—not a closed-form benchmark function, but a dynamical search landscape.

WODA water world: cross-section of fluid layers with currents, plus 3D cutaway

spring_tide as planned — distinct liquid layers (brine, thin channel, open ocean, syrup) with different tide currents in each. Fast channel jet vs slow syrup shear (drag ∝ ν); right panel is the same stack in 3D cutaway.

Flat simulator view (2D domain)

WODA spring_tide ocean: viscosity zones with penny track and tide speed field

Left: viscosity map, tide quiver, and penny path on the 2D grid. Right: tide speed magnitude at mid-episode.


Intent

SwarmOpt already excels at comparing algorithms on analytic landscapes (sphere, Rastrigin, multi-objective fronts). WODA asks a different question:

How do swarms perform when the “fitness landscape” is really a fluid environment—changing in space, time, and viscosity—and agents cannot crowd arbitrarily close together?

Underneath the benchmark is a teaching goal: build intuition for collective movement strategy—the kinds of coordination our species (and other social animals) use under currents, crowding, and uneven ground—by feeling them in a world you can watch and, later, inhabit in VR.

We throw a penny into the ocean. The penny is the global attractor: minimum “cost” is proximity to its true position (possibly unknown until sensed). The ocean is not uniform:

  • Regions differ in liquid type and kinematic viscosity (and thus drag, diffusion, and effective swim speed).
  • Tides from eight moons superpose; flow fields shift on periods we can compute from orbital parameters.
  • Swarms are launched after arbitrary intervals—some agents may enter during calm water, others into a rip current.

The research metric is which swarm designs reach the penny fastest (and how reliably). The product arc is the same physics as a playable / VR experience: players or algorithms wear suits in the fluid world and learn why spread, timing, and local conditions beat blind clumping.

This is deliberately challenging for swarms that assume:

  • homogeneous dynamics across particles,
  • unconstrained particle overlap,
  • static or gradient-only objectives.

Scenario (narrative spec)

Ocean world
├── Surface mesh / zones (N liquid types, each with ν, density, optional barriers)
├── Tide field T(x, y, t) = Σᵢ Aᵢ(x,y) · sin(ωᵢ t + φᵢ)   # 8 moon-driven components
├── Penny event at (x*, y*, t_drop) — target for all swarms
└── Episode clock — swarm injections at user-defined intervals

Swarm deployment
├── Wave 1 at t₀, Wave 2 at t₀ + Δ₁, …  (arbitrary intervals)
├── Per-agent: max speed capped by local ν, optional min pairwise distance d_min
└── Sensing: penny range/noise model (full, delayed, or partial)

Scoring
├── Primary: time-to-threshold ε (first epoch where best agent < ε of penny)
├── Secondary: success rate, path length, energy, violation of d_min
└── Stratify by tide phase bucket and viscosity zone at spawn

Design goals, phases, benchmark protocol, and open questions: docs/DEVELOPMENT_PLAN.md.
Physics notes: docs/physics.md.

WODA is a downstream consumer of SwarmOpt—not a fork. Agents wear a suit: SwarmOpt chooses intent; the suit + ocean enact motion. See docs/physics.md.


Install

pip install woda
# optional realtime viewer deps:
pip install "woda[viz]"

From a git checkout (editable): pip install -e ".[dev]" — see docs/SETUP.md.


Development setup

Local path: ~/code/woda
Git remote: https://github.com/SioKCronin/woda

Run the realtime simulator

From the repo root (creates .venv, installs WODA, opens the viewer):

./start

Optional world / flags:

./start configs/worlds/calm.yaml
./start configs/worlds/spring_tide.yaml --realtime 3 --gain 1.5

Keys: p / space pause, r restart, q quit.

No module named woda means the package isn’t installed in your current Python — use ./start (or pip install -e ".[viz]" inside an activated venv) instead of calling python scripts/run_realtime.py alone.

Dev install & tests

See docs/SETUP.md. Short version:

python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest -q

Dependency (expected later): swarmopt via pip install -e ../swarmopt.

License & contributing

WODA is released under the MIT License.
Contribution guidelines: CONTRIBUTING.md.


Status

Phase 0–3 underway — ocean + suits + thin SwarmOpt adapter + benchmark snapshots (scripts/run_benchmark.py). See docs/benchmark-protocol.md.

python scripts/run_benchmark.py --t-max 25 --seeds 0,1,2

Next step: tighten SwarmOpt→suit coupling and Phase 4 leaderboard polish. See the development plan.

Metadata

Release files for woda 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for woda 0.1.0
File Size Uploaded
woda-0.1.0.tar.gz 35.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for woda 0.1.0
File Interpreter ABI Platform
woda-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 64.3 kB

Release files / woda-0.1.0.tar.gz

Download URL woda-0.1.0.tar.gz
Size 35.7 kB
Tags Source
SHA-256 checksum
How to use checksums
0ff00520f3f52ea137a7a58308da0f18cbfbc29f5a1a57f6de52d61c3f7ff77d
BLAKE2b-256 checksum
How to use checksums
7bd35a3a9e723227f965ed821eafa022db1163eace240d7c58b31c26e0111cb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / woda-0.1.0-py3-none-any.whl

Download URL woda-0.1.0-py3-none-any.whl
Size 28.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
31fdc826ff6578360a5d8ba36a2ea26980eebfa7e753b31411ce445be17fd5e5
BLAKE2b-256 checksum
How to use checksums
007abb47a08dcf0f09c7507a325feeaad5a93e6af4476a6a754f5a0dc2dee7d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page