An implementation of Particle Swarm Optimisation in Python
Typical usage:
import numpy as np
from pyshoal import PSO
def rastrigin(a, b):
"""Objective function."""
return 10 * 2 + \
(a**2 - (10 * np.cos(2 * np.pi * a))) + \
(b**2 - (10 * np.cos(2 * np.pi * b)))
my_pso = PSO(obj_func=rastrigin,
box_bounds=((-500, 500), (-500, 500)),
n_parts=144,
topo='gbest',
weights=[0.9, 0.4, 2.1, 2.1],
extra_args=None,
minimise=True)
results = my_pso.opt(max_itr=100,
tol_thres=(0.01, 0.01),
tol_win=5,
plot=True,
save_plots=False)
(swarm_best, swarm_best_perf, n_itrs) = resultsPlease see the docstrings in pso.py for more info on pyshoal usage.
Note that pyshoal originally allowed for parallel execution of the objective function at each PSO step. This is not presently supported.