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

Uploaded CPython 3.9+Windows x86-64

turboswarm-0.2.1-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.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (456.9 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.9+macOS 11.0+ ARM64

turboswarm-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl (410.4 kB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: turboswarm-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 f8e17c197a0f38664fb80dc69f416c24b2d3673ffe699fe59c7a307f6e8fdc5f
MD5 00ca3ddf529de1f02cb9c29f0a259784
BLAKE2b-256 825ebc991923c2a03ed945618c93e317d38d2b02999f6c776fe4b8e0a9a78b79

See more details on using hashes here.

File details

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

File metadata

  • Download URL: turboswarm-0.2.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 315.7 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.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 0da16e523e57d24bf6850e48cece25e8d5c8998fb86b16e2c998a0ffa3a9d84d
MD5 f290f3b8eec817980b7857aaf4b56db3
BLAKE2b-256 2e49dec99c91003072c647feafb27c091b849757794c85370a345c255b03f538

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6cf63221c376f3c756911b1b4633e1941acbb57a97de6bd1a9eb2131a9d98162
MD5 d7ac796ae800c7094a775540760afe38
BLAKE2b-256 929d33e0153033d232532d2be91aa99aa4f37c782c28e38340a5056525206f94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 719468f5c35888e66d660b272f167f81ea9328bdf45f0776a9559da81fea90ff
MD5 7c0b18f3c7671864574f0b152e685bb8
BLAKE2b-256 843711b00d8ba3efaa0d6b4dba0228138871f6323b0c68cd34d7f3b45a834f41

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5b90b93c0d6a362068b6039df53885682771a9a07a8332cc965c4029f4e0a324
MD5 2f8ab2a36af6f044206eb7a768544487
BLAKE2b-256 935ade624053dafa2e084969fac6b965481bbec570d0552d759928631f2e94d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for turboswarm-0.2.1-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3a8e6fc3c5862eef8b3d488ae638546ec961d565516a7ded89029866e5a82054
MD5 8147560a799876bb22f5523cd84743e0
BLAKE2b-256 e1735140a68838eda882922ef1473bfec0b01081e2e7bcd4cf933cfbe3f8d086

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