SwarmBench
Measure how swarms really behave, and watch them work.
HyperSwarm's benchmarking and visualization tools run 34 optimization algorithms against 110 test functions, record every run, and let you watch or replay each one agent by agent. Benchmark any algorithm on any problem with standardized seeds, eliminate underperforming configs in multi-stage tournaments, and inspect live swarm dispersion on desktop HUD canvases.
Broad by default
Classic swarms, search methods, 14 hybrids and two multi-objective algorithms meet unimodal, multimodal, constrained, multi-objective, combinatorial, dynamic, niching, noisy and high-dimensional problems.
Repeatable
Every run takes a seed, the larger problem variants use fixed seeds, and tuned settings are cached per function and dimension bin.
Visible
A live and replay visualizer shows agents, subswarms, topology regions and feature planes as a run unfolds.
Checked
The algorithm library alone carries more than 2,500 automated tests, and characterization profiles validate themselves before they are written.
Benchmark Any Algorithm on Any Problem
One command-line runner, SwarmBenchmarkRunner, covers single runs, streamed telemetry, tournaments, tuning sweeps and cache maintenance. Every run takes the same core options: --algorithm, --function, --dimensions (default 10), --iterations (default 500), --swarm-size (default 50) and a random --seed (default 42).
list-functions, list-algorithms Discovery SwarmBenchmarkRunner list-functions --json run Execution SwarmBenchmarkRunner run --algorithm pso --function rosenbrock --dimensions 10 --iterations 500 --seed 42 run-full Execution SwarmBenchmarkRunner run-full --algorithm gwo --function ackley --features topology,hotspots run-stream Telemetry SwarmBenchmarkRunner run-stream --algorithm fa --function rastrigin --sample-interval-ms 16 run-diagnostic Diagnostics SwarmBenchmarkRunner run-diagnostic --algorithm mopso --function zdt1 --out trace.jsonl run-game Tournament SwarmBenchmarkRunner run-game --pool 50 --survivors 0.5 --split-subswarms --backend levelzero run-convergence-benchmark Analysis SwarmBenchmarkRunner run-convergence-benchmark --function sphere --budget 800 run-convergence-benchmark-matrix Analysis SwarmBenchmarkRunner run-convergence-benchmark-matrix --budgets 200,400,800,1600 run-hpo-sweep Tuning SwarmBenchmarkRunner run-hpo-sweep --algorithm pso_de --budget-type evaluations train Training SwarmBenchmarkRunner train --category multimodal --dimension-bin 10d high-dim-bench Scaling SwarmBenchmarkRunner high-dim-bench --dimensions 100,200,500 --seed 42 hypercache-export, hypercache-validate, hypercache-validate-recall Cache SwarmBenchmarkRunner hypercache-validate --check-recall Tournaments, not just single runs
The benchmark game puts a pool of agents (50 by default) through stages drawn from the test functions. Each stage elects agents for full trials, keeps a fraction as survivors, and can split the pool into subswarms once it converges together. Filter the stages by category, choose the algorithms in the pool, and set the hardware backend.
SwarmBenchmarkRunner run-game \
--pool 50 \
--survivors 0.5 \
--split-subswarms \
--backend levelzero Tuned settings you can reuse
The HyperCache stores the best configurations found for each function and dimension bin, and the validate commands check that every cached configuration can still be reached across consecutive seed replays.
SwarmBenchmarkRunner hypercache-validate \
--check-recall \
--dimension-bins 10d,30d,100d Characterization profiles
The SwarmCharacterization tool runs one algorithm on one function and dimension across several seeds (five by default). It self-validates the result before anything is written, then produces a machine-readable profile.json, a readable profile.md and a standalone LaTeX profile.tex per algorithm. Re-running a combination replaces only that entry, so profiles grow one function and dimension at a time.
SwarmCharacterization \
--algorithm cma_es \
--function rosenbrock \
--seeds 5 \
--emit json,md,tex Watch the Swarm Run
The visualizer turns any benchmark run into a scene you can watch live or replay later. It shows every agent, every subswarm and the landscape the swarm is reading.
Live Execution
Pipe a run straight in, or let the host launch and attach automatically.
SwarmBenchmarkRunner run-stream ... | SwarmVisualizer.Host stdin
# Or let the host launch the command:
SwarmVisualizer.Host capture <command> Deterministic Replay
Plays back saved per-agent, per-iteration traces with variable playback speed.
SwarmVisualizer.Host replay trace.jsonl Headless JSON Report
Turns a trace into an aggregated JSON run summary without rendering a window.
SwarmVisualizer.Host report trace.jsonl summary.json What is on screen
The Windows desktop app draws a live scatter plot of the agents and time-series charts of the run's metrics, with run, source, iteration, progress, best fitness and agent count in view. It auto-attaches to local swarm telemetry, opens replay files, launches captured runs, and reloads saved runs from the persistence catalog. It sits on the same scene stream as the console host, so a run looks the same wherever you open it.
7 Lifecycle Stages of a Run
What a Frame Carries
Each frame delivers rich spatial and telemetry layers across the search landscape:
Position, velocity, fitness, personal best, age, neighbour count, agent type, subswarm and algorithm mode
Parent and child links, depth, best fitness, stagnation count, active, grown or converged status
Centre, estimated radius, average fitness, fitness contrast, deflection count, region type
Strength, confidence, urgency, activation height, suggested operation and preferred mode
Centroid, strength, average fitness, observation count
Named values with units, sampled as the run goes (convergence rate, diversity entropy, velocity variance)
Scenes come from pluggable sources (JSONL file, stdin, launched process, stream, persisted runs) and go to pluggable plugins (console summary, JSON summary, desktop window). Add your own by implementing:
public interface ISwarmSceneSource {
IAsyncEnumerable<SwarmSceneFrame> ReadFramesAsync(CancellationToken ct);
}
public interface ISwarmScenePlugin {
Task OnFrameReceivedAsync(SwarmSceneFrame frame, CancellationToken ct);
} The 110 Registered Test Functions
The suite ships 110 registered test functions across nine problem families. Each reports recommended dimensions, default bounds and known optimum. Scaled variants share a name and differ by problem size so you can test high-dimensional scaling.
| Function ID | Function Name | Category | Dimensions | Known Optimum | Formulation & Characterization Notes |
|---|---|---|---|---|---|
sphere | Sphere | Unimodal | 30D | 0 | Continuous, convex, isotropic bowl |
rosenbrock | Rosenbrock | Unimodal | 10D | 0 | Banana valley, non-separable gradient flow |
zakharov | Zakharov | Unimodal | 10D | 0 | Non-separable quadratic with power term |
dixonprice | Dixon-Price | Unimodal | 10D | 0 | Valley with quadratic index scaling |
booth | Booth | Unimodal | 2D | 0 | Plate-shaped quadratic benchmark |
bent_cigar | Bent Cigar | Unimodal | 10D | 0 | Extremely conditioned ill-scaled ridge |
powell | Powell | Unimodal | 24D | 0 | Quartic non-differentiable singularity |
hyper_ellipsoid | Rotated Hyper-Ellipsoid | Unimodal | 10D | 0 | Cumulative sum coordinate axes |
sum_of_diff_powers | Sum of Different Powers | Unimodal | 10D | 0 | Variable exponent steepness |
rastrigin | Rastrigin | Multimodal | 10D | 0 | Cosine lattice of local traps |
ackley | Ackley | Multimodal | 10D | 0 | Nearly flat outer region with deep hole |
griewank | Griewank | Multimodal | 10D | 0 | Product of cosine terms on parabola |
schwefel | Schwefel | Multimodal | 10D | 0 | Deceptive optimum at search space boundary |
levy | Levy | Multimodal | 10D | 0 | Sinusoidal modulation with sharp basin |
michalewicz | Michalewicz | Multimodal | 10D | -9.66 | Steep valleys with factorial basin count |
beale | Beale | Multimodal | 2D | 0 | Sharp corner ridges |
goldstein_price | Goldstein-Price | Multimodal | 2D | 3 | Eighth-order polynomial landscape |
bukin_n6 | Bukin N.6 | Multimodal | 2D | 0 | Thin parabolic canyon with ripple waves |
eggholder | Eggholder | Multimodal | 2D | -959.6407 | Extreme multimodality with chaotic basins |
cross_in_tray | Cross-in-Tray | Multimodal | 2D | -2.0626 | Cross-shaped ridge with 4 global corners |
drop_wave | Drop-Wave | Multimodal | 2D | -1 | Concentric circular ripple oscillations |
easom | Easom | Multimodal | 2D | -1 | Microscopic basin surrounded by flat plane |
styblinski_tang | Styblinski-Tang | Multimodal | 10D | -391.6617 | Quartic double-well per dimension |
schaffer_n2 | Schaffer N.2 | Multimodal | 2D | 0 | Circular ripple bands |
schaffer_n4 | Schaffer N.4 | Multimodal | 2D | 0.292579 | Asymmetric concentric ring barrier |
alpine | Alpine N.1 | Multimodal | 10D | 0 | Absolute sine product peaks |
salomon | Salomon | Multimodal | 10D | 0 | Radial wave rings around origin |
hartmann3 | Hartmann 3D | Multimodal | 3D | -3.86278 | 4 local minima in unit hypercube |
hartmann6 | Hartmann 6D | Multimodal | 6D | -3.32237 | 6 local minima with non-linear exponential matrix |
happy_cat | Happy Cat | Multimodal | 10D | 0 | Curved valley with steep surrounding walls |
expanded_griewank_rosenbrock | Expanded Griewank-Rosenbrock | Multimodal | 10D | 0 | Nested Griewank cosine ripple inside Rosenbrock valley |
weierstrass | Weierstrass | Multimodal | 10D | 0 | Continuous everywhere, differentiable nowhere fractal |
g01 | G01 | Constrained | 13D | -15 | CEC 2006, 9 linear inequality constraints |
g02 | G02 | Constrained | 20D | -0.803619 | CEC 2006, 2 non-linear inequalities |
g03 | G03 | Constrained | 10D | -1 | CEC 2006, 1 non-linear equality constraint |
g04 | G04 | Constrained | 5D | -30665.539 | CEC 2006, 6 non-linear inequalities |
g05 | G05 | Constrained | 4D | 5126.4981 | CEC 2006, cubic equality constraints |
g06 | G06 | Constrained | 2D | -6961.81388 | CEC 2006, cubic inequality constraint |
g07 | G07 | Constrained | 10D | 24.3062 | CEC 2006, 8 non-linear inequalities |
g08 | G08 | Constrained | 2D | -0.095825 | CEC 2006, 2 non-linear inequality boundaries |
g09 | G09 | Constrained | 7D | 680.6301 | CEC 2006, 4 non-linear inequality constraints |
g10 | G10 | Constrained | 8D | 7049.3307 | CEC 2006, linear and cubic inequalities |
g11 | G11 | Constrained | 2D | 0.7499 | CEC 2006, quadratic equality constraint |
g12 | G12 | Constrained | 3D | -1 | CEC 2006, 729 disjoint feasible sub-spheres |
g13 | G13 | Constrained | 5D | 0.0539498 | CEC 2006, 3 non-linear equality constraints |
g14 | G14 | Constrained | 10D | -47.7649 | CEC 2006, 3 linear equality constraints |
g15 | G15 | Constrained | 3D | 961.715 | CEC 2006, 2 equality constraints |
g16 | G16 | Constrained | 5D | -1.9051553 | CEC 2006, 38 linear/quadratic inequalities |
g17 | G17 | Constrained | 6D | 8853.5396 | CEC 2006, 4 non-linear equality constraints |
g18 | G18 | Constrained | 9D | -0.8660254 | CEC 2006, 13 non-linear inequality constraints |
g19 | G19 | Constrained | 15D | 32.6555929 | CEC 2006, 5 non-linear equality constraints |
g21 | G21 | Constrained | 7D | 193.7245 | CEC 2006, linear and non-linear equalities |
g23 | G23 | Constrained | 9D | -400.0551 | CEC 2006, 6 inequalities, 2 equalities |
g24 | G24 | Constrained | 2D | -5.508 | CEC 2006, 2 non-linear inequalities |
pressure_vessel | Pressure Vessel Design | Constrained | 4D | 6059.714 | Engineering benchmark: Ts, Th, R, L design |
tension_compression_spring | Tension/Compression Spring Design | Constrained | 3D | 0.0126652 | Engineering benchmark: wire dia, mean coil dia, active coils |
welded_beam | Welded Beam Design | Constrained | 4D | 1.7249 | Engineering benchmark: weld thickness, length, bar depth, width |
zdt1 | ZDT1 2 Objectives | Multi-objective | 30D | Pareto Front [0, 1] | Convex Pareto optimal front |
zdt2 | ZDT2 2 Objectives | Multi-objective | 30D | Pareto Front [0, 1] | Non-convex Pareto optimal front |
zdt3 | ZDT3 2 Objectives | Multi-objective | 30D | Discontinuous Front | 5 disconnected Pareto optimal curves |
dtlz1 | DTLZ1 3 Objectives | Multi-objective | 7D | Linear Hyperplane | 11^k - 1 local Pareto fronts |
dtlz2 | DTLZ2 3 Objectives | Multi-objective | 12D | Spherical Sector | Spherical Pareto frontier |
dtlz3 | DTLZ3 3 Objectives | Multi-objective | 12D | Spherical with Traps | DTLZ2 front surrounded by dense local traps |
dtlz4 | DTLZ4 3 Objectives | Multi-objective | 12D | Biased Front | Parametric density bias along coordinate axes |
dtlz5 | DTLZ5 3 Objectives | Multi-objective | 12D | Degenerate Curve | Degenerate 1D curve in 3D objective space |
dtlz6 | DTLZ6 3 Objectives | Multi-objective | 12D | Extremely Degenerate | Severe bias testing frontier dimensionality reduction |
dtlz7 | DTLZ7 3 Objectives | Multi-objective | 22D | Disconnected Regions | 2^(M-1) disconnected Pareto optimal regions |
dtlz1_m5 | DTLZ1 (many-objective) 5 Objectives | Multi-objective | 9D | 5D Linear Hyperplane | Many-objective 5D linear simplex |
dtlz2_m5 | DTLZ2 (many-objective) 5 Objectives | Multi-objective | 14D | 5D Spherical Octant | Many-objective 5D spherical sector |
dtlz7_m5 | DTLZ7 (many-objective) 5 Objectives | Multi-objective | 24D | 5D Disconnected Fronts | Many-objective 16 disconnected Pareto regions |
dtlz3_m8 | DTLZ3 (many-objective) 8 Objectives | Multi-objective | 17D | 8D Spherical Hypersurface | 8-objective extreme multimodal traps |
dtlz4_m10 | DTLZ4 (many-objective) 10 Objectives | Multi-objective | 19D | 10D Biased Manifold | 10-objective dense boundary bias |
dtlz5_m15 | DTLZ5 (many-objective) 15 Objectives | Multi-objective | 24D | 15D Degenerate Manifold | 15-objective high-dimensional manifold test |
tsp_benchmark | TSP Benchmark (Continuous) | Combinatorial | 10D | Global Shortest Tour | Continuous relaxation encoding of TSP |
tsp_medium | TSP (Medium) | Combinatorial | 30D | Fixed Seed Tour | 30-city seeded Euclidean permutation |
tsp_high | TSP (High) | Combinatorial | 100D | Fixed Seed Tour | 100-city seeded Euclidean permutation |
tsp_very_high | TSP (Very High) | Combinatorial | 200D | Fixed Seed Tour | 200-city large-scale route optimization |
qap_benchmark | QAP Benchmark (Continuous) | Combinatorial | 10D | Optimal Facility Layout | Quadratic Assignment Problem 10 facilities |
qap_medium | QAP (Medium) | Combinatorial | 30D | Fixed Seed Assignment | 30 facilities, distance x flow tensor |
qap_high | QAP (High) | Combinatorial | 100D | Fixed Seed Assignment | 100 facilities, large-scale assignment |
qap_very_high | QAP (Very High) | Combinatorial | 200D | Fixed Seed Assignment | 200 facilities high-dimensional permutation |
knapsack | 0/1 Knapsack Problem | Combinatorial | 20D | Max Value Subset | 20 items, weight capacity constraint |
knapsack_medium | Knapsack (Medium) | Combinatorial | 30D | Fixed Seed Max Value | 30 items with correlated weights |
knapsack_high | Knapsack (High) | Combinatorial | 100D | Fixed Seed Max Value | 100 items strongly correlated profits |
knapsack_very_high | Knapsack (Very High) | Combinatorial | 200D | Fixed Seed Max Value | 200 items high-dimensional knapsack |
moving_peaks | Moving Peaks | Dynamic | 5D | Dynamic Peak | 5 moving cone peaks shifting in coordinate space |
moving_peaks_medium | Moving Peaks (Medium) | Dynamic | 30D | Dynamic Peak | 8 peaks, changes every 3,000 evaluations |
moving_peaks_high | Moving Peaks (High) | Dynamic | 100D | Dynamic Peak | 10 peaks, changes every 5,000 evaluations |
moving_peaks_very_high | Moving Peaks (Very High) | Dynamic | 200D | Dynamic Peak | 12 peaks, changes every 7,000 evaluations |
peaks_5 | Moving Peaks Niching (5 peaks) | Dynamic | 5D | Dynamic Niche | Changes every 5,000 evaluations |
peaks_10 | Moving Peaks Niching (10 peaks) | Dynamic | 5D | Dynamic Niche | Changes every 5,000 evaluations |
peaks_20 | Moving Peaks Niching (20 peaks) | Dynamic | 5D | Dynamic Niche | Changes every 5,000 evaluations |
df1 | DF1 Dynamic Function | Dynamic | 10D | Time-Varying Center | CEC dynamic benchmark; the optimum position shifts over time |
equal_maxima | Equal Maxima | Niching | 1D | 1.0 (5 equal peaks) | 5 identical height sinusoidal peaks |
five_uneven_peak_trap | Five Uneven Peak Trap | Niching | 1D | 1.0 (Global) | 1 global peak and 4 deceptive sub-peaks |
uneven_decreasing_maxima | Uneven Decreasing Maxima | Niching | 1D | 1.0 (Exponential Decay) | Exponentially attenuated peak heights |
himmelblau | Himmelblau's Function | Niching | 2D | 0 (4 global minima) | 4 identical global optima at symmetric coordinates |
six_hump_camel_back | Six-Hump Camel Back | Niching | 2D | -1.0316 (2 global) | 2 global and 4 local minima |
shubert | Shubert | Niching | 2D | -186.7309 (18 global) | 18 global and 742 local minima |
shubert_nd | Shubert N-D | Niching | 5D | High-Dimensional Niches | Exponentially exploding niche grid |
vincent | Vincent | Niching | 2D | 1.0 (36 global peaks) | 6^D = 36 global peaks with non-uniform spacing |
modified_rastrigin_niching | Modified Rastrigin, all global optima | Niching | 2D | 0 (Multiple Global) | Modulated Rastrigin equalizing all local peaks |
noisy_sphere | Noisy Sphere σ = 0.1 | Noisy | 30D | 0 | Gaussian noise sigma = 0.1 on evaluation |
noisy_sphere_high | Noisy Sphere (High) σ = 0.1 | Noisy | 100D | 0 | 100-dimensional noisy parabolic bowl |
noisy_sphere_very_high | Noisy Sphere (Very High) σ = 0.1 | Noisy | 200D | 0 | 200-dimensional noisy parabolic bowl |
noisy_rastrigin | Noisy Rastrigin σ = 0.05 | Noisy | 10D | 0 | Multimodal traps + stochastic jitter sigma = 0.05 |
noisy_rastrigin_high | Noisy Rastrigin (High) σ = 0.1 | Noisy | 100D | 0 | 100D multimodal traps with evaluation noise |
noisy_rastrigin_very_high | Noisy Rastrigin (Very High) σ = 0.1 | Noisy | 200D | 0 | 200D multimodal traps with evaluation noise |
highdim_sphere_low | High-D Sphere (Low) | High-dimensional | 10D | 0 | Seed expansion baseline (scales to 10,000D) |
highdim_rastrigin_medium | High-D Rastrigin (Medium) | High-dimensional | 30D | 0 | Multimodal seed expansion (scales to 5,000D) |