Particle swarm optimization (PSO) is amazing and I created a series of tutorials that cover the topic using Python. The first (pso-simple) is comprised of a bare bones implementation and is useful for anyone new to PSO and looking to get a good understanding of how it works. The tutorial can be found here: https://nathanrooy.github.io/posts/2016-08-17/simple-particle-swarm-optimization-with-python/
The second version (pso-advanced) is still a work in progress...
You can either download/clone this repo and use as is, or you can pip install it with the following command:
pip install git+https://github.com/nathanrooy/particle-swarm-optimization
Once you have completed the installation, usage is similar to that of other common optimization frameworks.
>>> from pso import pso_simple
Next, you need to specify a cost fucntion. I included the sphere function for example purposes, but you'll probably end up using your own.
>>> from pso.cost_functions import sphere
Next, let's specify some bounds and an initial starting location:
>>> initial=[5,5] # initial starting location [x1,x2...]
>>> bounds=[(-10,10),(-10,10)] # input bounds [(x1_min,x1_max),(x2_min,x2_max)...]
Lastly, lets minimize this thing!
>>> pso_simple.minimize(sphere, initial, bounds, num_particles=15, maxiter=30, verbose=True)
The output of which should look like this:
iter: 0, best solution: -1.000000
iter: 1, best solution: 50.000000
iter: 2, best solution: 44.186379
iter: 3, best solution: 37.884043
iter: 4, best solution: 26.485279
iter: 5, best solution: 15.552986
iter: 6, best solution: 8.098333
iter: 7, best solution: 2.697282
iter: 8, best solution: 0.514359
iter: 9, best solution: 0.111682
iter: 10, best solution: 0.010832
iter: 11, best solution: 0.002607
iter: 12, best solution: 0.002607
iter: 13, best solution: 0.002607
iter: 14, best solution: 0.000507
iter: 15, best solution: 0.000507
iter: 16, best solution: 0.000507
iter: 17, best solution: 0.000507
iter: 18, best solution: 0.000507
iter: 19, best solution: 0.000507
iter: 20, best solution: 0.000507
iter: 21, best solution: 0.000415
iter: 22, best solution: 0.000268
iter: 23, best solution: 0.000194
iter: 24, best solution: 0.000064
iter: 25, best solution: 0.000064
iter: 26, best solution: 0.000018
iter: 27, best solution: 0.000013
iter: 28, best solution: 0.000001
iter: 29, best solution: 0.000001
FINAL SOLUTION:
> [0.0010272779593734505, -0.00023254128511081273]
> 1.109375455095469e-06
(coming soon...)