https://github.com/nathanrooy/particle-swarm-optimization
Learn about particle swarm optimization (PSO) through Python!
https://github.com/nathanrooy/particle-swarm-optimization
minimization optimization particle-swarm-optimization pso python tutorial
Last synced: 4 months ago
JSON representation
Learn about particle swarm optimization (PSO) through Python!
- Host: GitHub
- URL: https://github.com/nathanrooy/particle-swarm-optimization
- Owner: nathanrooy
- License: gpl-3.0
- Created: 2016-08-31T15:06:07.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2021-01-26T20:23:20.000Z (almost 5 years ago)
- Last Synced: 2025-08-31T00:52:39.538Z (5 months ago)
- Topics: minimization, optimization, particle-swarm-optimization, pso, python, tutorial
- Language: Python
- Homepage:
- Size: 34.2 KB
- Stars: 278
- Watchers: 8
- Forks: 121
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Particle Swarm Optimization with Python
[](https://github.com/nathanrooy/particle-swarm-optimization/actions?query=workflow%3Aci)
[](https://github.com/nathanrooy/particle-swarm-optimization/blob/master/LICENSE)
[](https://codecov.io/gh/nathanrooy/particle-swarm-optimization)
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...
## Installation
You can either download/clone this repo and use as is, or you can pip install it with the following command:
```sh
pip install git+https://github.com/nathanrooy/particle-swarm-optimization
```
## Usage
### particle swarm optimization - simple
Once you have completed the installation, usage is similar to that of other common optimization frameworks.
```py
>>> 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.
```py
>>> from pso.cost_functions import sphere
```
Next, let's specify some bounds and an initial starting location:
```py
>>> 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!
```py
>>> pso_simple.minimize(sphere, initial, bounds, num_particles=15, maxiter=30, verbose=True)
```
The output of which should look like this:
```py
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
```
### particle swarm optimization - advanced
(coming soon...)