Skip to main content

Particle Swarm Optimization with a Rust core

Project description

turboswarm

Particle Swarm Optimization with a compute core in Rust and an API in Python. Focused on visualization, variant comparison and clear code. Supports real, integer, binary and mixed variables, constraints and multi-objective optimization.

Installation

From source (development), with maturin:

pip install maturin
python -m venv .venv && source .venv/bin/activate
maturin develop --release      # compiles the Rust core and installs it

Usage

import turboswarm as pso

# Native benchmark (fast, in Rust, without the GIL)
r = pso.minimize("rastrigin", bounds=(-5.12, 5.12), dim=2, seed=42)

# Your own function in Python
r = pso.minimize(lambda x: sum(xi**2 for xi in x), bounds=(-5, 5), dim=3)

# Integer variables
r = pso.minimize(f, bounds=(-10, 10), dim=2, integer=True)

# Variant and topology by name
r = pso.minimize("ackley", bounds=(-32.768, 32.768), dim=2,
                 velocity="fips", topology="ring", seed=1)

print(r.best_position, r.best_value)

Parameters of minimize

Parameter Default Description
objective callable f(list)->float, or name of a native benchmark
bounds list of (min, max) per dimension
integer / binary False optimize over integers / {0,1}
var_types None per-dimension "real"/"integer"/"binary" (mixed)
n_particles 30 swarm size
max_iter 100 iterations
w, c1, c2 0.729, 1.494, 1.494 inertia, cognitive, social
velocity "inertia" "inertia", "constriction", "fips"
topology "global" "global", "ring", "vonneumann", "random"
bounds_handling "clamp" "clamp", "reflect", "wrap", "reinit"
seed None seed (fix it for reproducibility)
record_history True store the trace for visualization
v_max None clamp each velocity component to [-v_max, v_max]
patience / tol 0 / 0.0 stop after patience iters without >tol improvement
max_evals / target / max_time None stop on evaluation / value / time budget
constraints / penalty None / 1e6 inequality constraints g(x)<=0 via penalty
callback None callback(iteration, best_value); return False to stop
vectorized False objective receives the whole swarm as a NumPy array

Native benchmarks: sphere, rastrigin, rosenbrock, ackley, griewank, schwefel. Their metadata (recommended bound and optimum) are in pso.benchmark_info(name) -> (bound, optimum).

FIPS performs better with local topologies ("ring", "vonneumann"). The "constriction" and "fips" variants derive their factor from c1 + c2.

Result (PsoResult)

  • best_position — list of floats (whole-valued for integer/binary dims)
  • best_value — float
  • convergence — best value per iteration (convergence curve)
  • historyhistory[iter][particle][dim] (empty if record_history=False)
  • evaluations — number of objective evaluations performed
  • stop_reason"max_iterations", "target", "max_evaluations", "stagnation", "max_time" or "callback"

Multi-objective (MOPSO)

minimize_multi returns a ParetoFront (.positions, .objectives):

front = pso.minimize_multi(
    lambda x: [sum(xi**2 for xi in x), sum((xi - 2) ** 2 for xi in x)],
    bounds=[(-5, 5)] * 2, seed=42,
)
print(len(front))            # non-dominated solutions

Visualization

import matplotlib.pyplot as plt

pso.viz.plot_convergence(r); plt.show()
pso.viz.compare({"inertia": rA, "fips": rB}); plt.show()
pso.viz.plot_pareto(front); plt.show()   # objective space of a Pareto front

anim = pso.viz.animate_swarm(r, pso.benchmarks.rastrigin, [(-5.12, 5.12)] * 2)
# in a notebook:  from IPython.display import HTML; HTML(anim.to_jshtml())

animate_swarm only supports 2D problems and requires record_history=True.

Documentation

A navigable documentation portal (narrative guide + API reference) is built with MkDocs Material:

pip install -e ".[docs]"
./scripts/build-docs.sh --serve   # http://127.0.0.1:8000

License

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

turboswarm-0.6.0.tar.gz (72.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

turboswarm-0.6.0-cp39-abi3-win_amd64.whl (331.2 kB view details)

Uploaded CPython 3.9+Windows x86-64

turboswarm-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (482.4 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

turboswarm-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (471.3 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

turboswarm-0.6.0-cp39-abi3-macosx_11_0_arm64.whl (424.4 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

turboswarm-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl (424.0 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file turboswarm-0.6.0.tar.gz.

File metadata

  • Download URL: turboswarm-0.6.0.tar.gz
  • Upload date:
  • Size: 72.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turboswarm-0.6.0.tar.gz
Algorithm Hash digest
SHA256 44662352b77b63c4462a96d3a1e6d6270a8b9c9956341d3b1f0cfb7099a6b83a
MD5 1ad34ddb84a096590ffa8122ff7abab4
BLAKE2b-256 30b3b6fceeb459edb58abadeba2c77d997b0c1480325b58187f0e49123a645a2

See more details on using hashes here.

File details

Details for the file turboswarm-0.6.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: turboswarm-0.6.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 331.2 kB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for turboswarm-0.6.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f2ca9ebc4c64a519c99d9fe654d7cd1c38d1e73254ec643d95fa5661544733e8
MD5 33d5177608de96ae95d1dfb87ed6f8da
BLAKE2b-256 9608a0e18628c657ab9418e5dd6331a62666a62514c4d7b72f0d01099ab6238a

See more details on using hashes here.

File details

Details for the file turboswarm-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for turboswarm-0.6.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2f8dcd8b16cfe380b6539c05112a8807e61fb35af5250d36150ca3fcd9e4592f
MD5 e6d6dccc79889b4d2a9b82a411a5385d
BLAKE2b-256 87aba6387db51a0341b3985cb03d8ceedad38ba105305d4fc1852b1fcdb043e1

See more details on using hashes here.

File details

Details for the file turboswarm-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for turboswarm-0.6.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e12cb940165803ff84158b28aca0132c82600239c4331643025a56683d941d6a
MD5 1418181e41fff57c4688328cebe9f712
BLAKE2b-256 45fcce15274370b2b36c70a25134d3f41c005876d747fe6195709d75a0272677

See more details on using hashes here.

File details

Details for the file turboswarm-0.6.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for turboswarm-0.6.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2f980a9122d68888d35ac50f9fd7f407b02b58f7d8671a0d2b01ac74e5ad8151
MD5 4d9c1c9adc84f4b6d97875179ededa6d
BLAKE2b-256 33fb4a9d3bce2ad2b5da22c1dc0316aba9dcbb62c5ebf82545bdff864d124818

See more details on using hashes here.

File details

Details for the file turboswarm-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for turboswarm-0.6.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f1614f8318155466fde3c90d89701d9d12847cbba2948141a65fdf0e7041a768
MD5 fc48e6871183fb4ef9a7b3abb3106f56
BLAKE2b-256 3968e304085e0680b12fb4b615689a46f6fe04b866b954e2abdefeefba7ef107

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page