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.2.2.tar.gz (62.6 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.2.2-cp39-abi3-win_amd64.whl (316.6 kB view details)

Uploaded CPython 3.9+Windows x86-64

turboswarm-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (466.5 kB view details)

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

turboswarm-0.2.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (457.3 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

turboswarm-0.2.2-cp39-abi3-macosx_11_0_arm64.whl (409.7 kB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

turboswarm-0.2.2-cp39-abi3-macosx_10_12_x86_64.whl (409.9 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

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

File hashes

Hashes for turboswarm-0.2.2.tar.gz
Algorithm Hash digest
SHA256 9d544c97c9929c1db074a921fb4d8163b75868b0a534a5ec9acd6067104e97c9
MD5 88ef0d8c38da131e1661bf69214e8590
BLAKE2b-256 1f5fdba57dc7ded2465810c75655e58185051fdd0ef91561259e2c0ba052477f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turboswarm-0.2.2-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 316.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.2.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a7b9258624ac2a61a2cea82c1682bb09781bdd313f75c6fe2b473c6600b7ab2e
MD5 1c1c6fede1b21a6d06ef48191d4be792
BLAKE2b-256 8075017ad681bda9c5ebbdd15bc59ad2899df03e9fec567fbebea43de961fe4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f226b5f98b52eafc94f904d774e51bb6710447342fdaa118318a2da2bd4999d8
MD5 fe102ad8d3775c5265c39bb38dd8c932
BLAKE2b-256 97e8a4e8c548bd3398a2478daa940b4f11fc6ff252396da4a0f9d59ecd77639a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d99669779ef3e4feb1a6440afd84d55531bf90962522fe906cfee7d43b941039
MD5 f3d3ddcadc7776a5815b4d90a667ce7f
BLAKE2b-256 8afcb51e696ab557d6b832782c29a8a49f5a91ea16def314e4b05f2c3c29e996

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f2a3ca74e8857ec01418aaab20c1e22923de979bb76857c79722dde72e7cc640
MD5 aeac461fae4074b8b2a0b75ba008ba34
BLAKE2b-256 ba84b31f2e7462d314359b60716b25b91bd19a295b137cc40945d74b61e67b36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bc33bb2595b0e048b34b9ebd714315b898aa665c02ccb8653f8d70520e972f3b
MD5 bba49e4a0b8057d3072e6cbee85939cd
BLAKE2b-256 dfc555f457c7939fa960b22c44d87d9aa9329e8c137dc63b73a59f35f0a1646c

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