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.3.tar.gz (55.2 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.3-cp39-abi3-win_amd64.whl (296.6 kB view details)

Uploaded CPython 3.9+Windows x86-64

turboswarm-0.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (448.4 kB view details)

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

turboswarm-0.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (438.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

turboswarm-0.1.3-cp39-abi3-macosx_11_0_arm64.whl (392.4 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

turboswarm-0.1.3-cp39-abi3-macosx_10_12_x86_64.whl (393.4 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: turboswarm-0.1.3.tar.gz
  • Upload date:
  • Size: 55.2 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.3.tar.gz
Algorithm Hash digest
SHA256 82e611ba75d109f8ed038c077ce15e9d9952aeda8225b910d9400fdaae9814a2
MD5 6525bda8465c5ea3e0cf6ccfbe1ca722
BLAKE2b-256 8815973a0c94be501802b09554c918735908e549d8ca27107a9319146d9cde13

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turboswarm-0.1.3-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 296.6 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.3-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 ac5f13c574c346eb4b7cc204fb3f675362b07b674c950dd33e33d34713ef43ca
MD5 0176d0e9ac4c85f488bec9968811a0af
BLAKE2b-256 13d857777a2bda75f69f55c2b98b794e74b8472f6b173e2b57c882f2731a416a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 92ecc6ad1264ed6babd8f90ff0157b928ac3e3a86b443595eb9bf8b43b545acb
MD5 4ce193a68f6673af31e3a17d7dd0179f
BLAKE2b-256 f55650397a872e5086f622514b73d9a9f4d49499ac05897c12c302d6ed2db355

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 834546d6294b51c66e85b5b32b7b581097aa43362ea9bfcd11c01217f2b29dd9
MD5 e28d7c2128b716827cc0521b398bab19
BLAKE2b-256 343c9129890419a167141b45a83d28410f5cf3ebb22871c84ea1a4ed7125d1e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.3-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a89fa178be13e01197adbb6a2c04de3e1c19f6bc6d0f2cf0469abc6f797521fa
MD5 85d125f94b021a65e9192ab6823be64d
BLAKE2b-256 dfdedf60009a0c9482ec6ef06a59bb07cc5b7a620efb7bafd0c716c06e1b2bd0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.3-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 998986f42a8956079700cc91db9bac6a32c001fb445f1d517247265af033c57e
MD5 aba5f7a8f1c4e2f3206e0eb946f3d189
BLAKE2b-256 5a821224a7fd8a52c58b30777b77bf6f048abf97449b877b4ed316e0785d4a49

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