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.1.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.1-cp39-abi3-win_amd64.whl (280.5 kB view details)

Uploaded CPython 3.9+Windows x86-64

turboswarm-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (429.8 kB view details)

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

turboswarm-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (420.4 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

turboswarm-0.1.1-cp39-abi3-macosx_11_0_arm64.whl (375.8 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

turboswarm-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl (376.2 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: turboswarm-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 24e91c7364e494df154b36fba9b0fbab8bf518c6a7f76a65bd07b198f6a1a98a
MD5 f05cba49b2b03c42ca7fdb8efd3c5f86
BLAKE2b-256 15195f8bd6617fa69fce43978810d69dc1f2551c9bd5050141d0758fb5b57195

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turboswarm-0.1.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 280.5 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.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 556195f921b95f21bd2e5d1baa2b7f746e2cc86916927d20cece8692a5ac91e8
MD5 839f726d012547aecead6362fa9d271f
BLAKE2b-256 ea2f7e0a4c2fdf959e74704494fb9e311d04a134764d94a6a99db5fc628b34c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 92bc674e98b9b381d2cdb611ae9feb7e8ec5f661907596b88c523d895d970d17
MD5 15cd87c09e6e891cf09ceb103d8a6397
BLAKE2b-256 ee22dacd6cbec951a8e1fc6e72ff033ab41e9671ad3ad7666a5a2439d22836ed

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1a74b7254ef2121373ad5dc2632b8a787814ee0dc1a676bec4263e63db0e2715
MD5 8deac10de7c74be7fb9af5cb3fea56ee
BLAKE2b-256 89a019b8d2f28d0e7e2db4429e8fbe56aaf07d4f8749491c34474988475b3493

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5902be14a34bbb0a10c023b139b780a712d9cba813fbe93890b7661f7bd66942
MD5 3a1f281632e1ba17dace90a680abcfcb
BLAKE2b-256 eba98d0184d80f0152311840131d430ec15d0c1fc481970ef40e7a23365a08fd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4a61f63540faf5889c11f61377d5799acdbabead357d3aec5076dfdce994a1d5
MD5 fb1192500947e60948a1a73a14cd9b08
BLAKE2b-256 bc82cd0dd4861ecfff0907fd59bed84702b031ed5eeb854b43d15e358c175a32

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