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)] * 2, seed=42)

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

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

# Variant and topology by name
r = pso.minimize("ackley", bounds=[(-32.768, 32.768)] * 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.1.2.tar.gz (47.4 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.1.2-cp39-abi3-win_amd64.whl (280.2 kB view details)

Uploaded CPython 3.9+Windows x86-64

turboswarm-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (428.7 kB view details)

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

turboswarm-0.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (420.5 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

turboswarm-0.1.2-cp39-abi3-macosx_11_0_arm64.whl (375.5 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

turboswarm-0.1.2-cp39-abi3-macosx_10_12_x86_64.whl (376.4 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for turboswarm-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c92da95a084ab5be5fb13556e59f68ba6709a55b6db9c97449b45ee374c71a2c
MD5 938595a32d12dee3f06e3fa9950d4c6a
BLAKE2b-256 cdc90bf8b2ae6b77e912f6465fc4d3a926af456fbed63a6c9fa7abb404b7198e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turboswarm-0.1.2-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 280.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.1.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 020b0d70cfb32ad1b976cddfc61f1b3f4fcc73c58bdb56bf45e1074971c7ef6d
MD5 8fd78dc2bbbeb1efe4e2e44821f8b3db
BLAKE2b-256 12100a43a6d2dfe55bc13b4834f22dbdec0beb4449d294225401dc9c321120c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2a8bf070392d059fa47578ff4a9d3367c9532db19c9b23a69f0f55344b66548d
MD5 bbeec214902584f23421b6b5f13b1832
BLAKE2b-256 1e397761616f3c4b5d00548f13831293a6bfcec0360d14b984de8edc2621bb67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2ed08541f6f72e80a8d1aedf03d25908f70819be08154f785ba1890ae56b6ec1
MD5 8410f42c790d34abb4294c7655d3d312
BLAKE2b-256 f01ee9c4cdee6db9779f7c3ba7b01bd05bb07e8578504246a8d00a590974b66f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e53c827f3bb2841c3bf9ccc34d2c7889eb812ab21b150cf92072fd0b0985737
MD5 56aae27f6aeecd823bee8db3629b308a
BLAKE2b-256 0bc645e710ede51e41d813967c613a844dbab0129360013f7b236084c588ac13

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 acfae62e56706b0b519773125f9995ac42288e80bc2a55e4ce018a5fbf5f2877
MD5 0f16d50cc06fa138e49fc57248fefed6
BLAKE2b-256 4de8f4d2913f48b8468509b911502efae40e67208d70134a996566e041cbc5a8

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