Skip to content

Commit

Permalink
Update notebooks for API consistency (#297)
Browse files Browse the repository at this point in the history
  • Loading branch information
Christopher McClure authored and ljvmiranda921 committed May 1, 2019
1 parent 215ba17 commit 323cfe1
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 167 deletions.
195 changes: 61 additions & 134 deletions docs/examples/basic_optimization.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,27 @@ capabilities of the library when applied to benchmark problems.
# Change directory to access the pyswarms module
sys.path.append('../')
.. code-block:: python
print('Running on Python version: {}'.format(sys.version))
.. parsed-literal::
Running on Python version: 3.6.3 |Anaconda custom (64-bit)| (default, Oct 13 2017, 12:02:49)
[GCC 7.2.0]
Running on Python version: 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0]
.. code-block:: python
# Import modules
import numpy as np
# Import PySwarms
import pyswarms as ps
from pyswarms.utils.functions import single_obj as fx
# Some more magic so that the notebook will reload external python modules;
# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython
%load_ext autoreload
Expand Down Expand Up @@ -66,38 +67,26 @@ several variables at once.
%%time
# Set-up hyperparameters
options = {'c1': 0.5, 'c2': 0.3, 'w':0.9}
# Call instance of PSO
optimizer = ps.single.GlobalBestPSO(n_particles=10, dimensions=2, options=options)
# Perform optimization
cost, pos = optimizer.optimize(fx.sphere, iters=1000)
.. parsed-literal::
INFO:pyswarms.single.global_best:Iteration 1/1000, cost: 0.11075768527574707
INFO:pyswarms.single.global_best:Iteration 101/1000, cost: 7.521863508083004e-08
INFO:pyswarms.single.global_best:Iteration 201/1000, cost: 2.8159915186067273e-11
INFO:pyswarms.single.global_best:Iteration 301/1000, cost: 8.794923638889175e-17
INFO:pyswarms.single.global_best:Iteration 401/1000, cost: 1.4699516547190895e-21
INFO:pyswarms.single.global_best:Iteration 501/1000, cost: 5.111264897313781e-23
INFO:pyswarms.single.global_best:Iteration 601/1000, cost: 8.329697430155943e-27
INFO:pyswarms.single.global_best:Iteration 701/1000, cost: 1.662161785541961e-30
INFO:pyswarms.single.global_best:Iteration 801/1000, cost: 6.140424420222279e-34
INFO:pyswarms.single.global_best:Iteration 901/1000, cost: 2.0523902169204634e-39
INFO:pyswarms.single.global_best:================================
Optimization finished!
Final cost: 0.0000
Best value: [-2.431421462417008e-22, -9.502018378214418e-23]
2019-01-30 04:23:31,846 - pyswarms.single.global_best - INFO - Optimize for 1000 iters with {'c1': 0.5, 'c2': 0.3, 'w': 0.9}
pyswarms.single.global_best: 100%|██████████|1000/1000, best_cost=5.34e-43
2019-01-30 04:23:46,631 - pyswarms.single.global_best - INFO - Optimization finished | best cost: 5.3409429804817095e-43, best pos: [-4.84855366e-22 -5.46817677e-22]
.. parsed-literal::
CPU times: user 144 ms, sys: 14.8 ms, total: 159 ms
Wall time: 151 ms
CPU times: user 5.63 s, sys: 916 ms, total: 6.55 s
Wall time: 14.8 s
We can see that the optimizer was able to find a good minima as shown
above. You can control the verbosity of the output using the ``verbose``
Expand All @@ -111,38 +100,26 @@ Now, let’s try this one using local-best PSO:
%%time
# Set-up hyperparameters
options = {'c1': 0.5, 'c2': 0.3, 'w':0.9, 'k': 2, 'p': 2}
# Call instance of PSO
optimizer = ps.single.LocalBestPSO(n_particles=10, dimensions=2, options=options)
# Perform optimization
cost, pos = optimizer.optimize(fx.sphere, print_step=100, iters=1000, verbose=3)
cost, pos = optimizer.optimize(fx.sphere, iters=1000)
.. parsed-literal::
INFO:pyswarms.single.local_best:Iteration 1/1000, cost: 0.01379181672220725
INFO:pyswarms.single.local_best:Iteration 101/1000, cost: 2.084056061999154e-07
INFO:pyswarms.single.local_best:Iteration 201/1000, cost: 9.44588224259351e-10
INFO:pyswarms.single.local_best:Iteration 301/1000, cost: 1.5414149511766008e-13
INFO:pyswarms.single.local_best:Iteration 401/1000, cost: 3.283944854760787e-16
INFO:pyswarms.single.local_best:Iteration 501/1000, cost: 2.093366830537641e-20
INFO:pyswarms.single.local_best:Iteration 601/1000, cost: 5.0279508047072096e-24
INFO:pyswarms.single.local_best:Iteration 701/1000, cost: 1.0492646748670006e-27
INFO:pyswarms.single.local_best:Iteration 801/1000, cost: 2.2616819643931453e-29
INFO:pyswarms.single.local_best:Iteration 901/1000, cost: 8.48269618909152e-35
INFO:pyswarms.single.local_best:================================
Optimization finished!
Final cost: 0.0000
Best value: [2.122881378865588e-18, -5.35447408455737e-19]
2019-01-30 04:23:46,672 - pyswarms.single.local_best - INFO - Optimize for 1000 iters with {'c1': 0.5, 'c2': 0.3, 'w': 0.9, 'k': 2, 'p': 2}
pyswarms.single.local_best: 100%|██████████|1000/1000, best_cost=1.19e-48
2019-01-30 04:24:02,254 - pyswarms.single.local_best - INFO - Optimization finished | best cost: 1.1858559943008184e-48, best pos: [5.47013119e-24 7.95177208e-25]
.. parsed-literal::
CPU times: user 355 ms, sys: 4.36 ms, total: 359 ms
Wall time: 353 ms
CPU times: user 6.63 s, sys: 1.04 s, total: 7.68 s
Wall time: 15.6 s
Optimizing a function with bounds
---------------------------------
Expand Down Expand Up @@ -186,38 +163,27 @@ constant.
%%time
# Initialize swarm
options = {'c1': 0.5, 'c2': 0.3, 'w':0.9}
# Call instance of PSO with bounds argument
optimizer = ps.single.GlobalBestPSO(n_particles=10, dimensions=2, options=options, bounds=bounds)
# Perform optimization
cost, pos = optimizer.optimize(fx.rastrigin, print_step=100, iters=1000, verbose=3)
cost, pos = optimizer.optimize(fx.rastrigin, iters=1000)
.. parsed-literal::
INFO:pyswarms.single.global_best:Iteration 1/1000, cost: 12.243865048066269
INFO:pyswarms.single.global_best:Iteration 101/1000, cost: 1.1759164022634394
INFO:pyswarms.single.global_best:Iteration 201/1000, cost: 0.9949603350768896
INFO:pyswarms.single.global_best:Iteration 301/1000, cost: 0.9949590581556009
INFO:pyswarms.single.global_best:Iteration 401/1000, cost: 0.9949590570934177
INFO:pyswarms.single.global_best:Iteration 501/1000, cost: 0.9949590570932898
INFO:pyswarms.single.global_best:Iteration 601/1000, cost: 0.9949590570932898
INFO:pyswarms.single.global_best:Iteration 701/1000, cost: 0.9949590570932898
INFO:pyswarms.single.global_best:Iteration 801/1000, cost: 0.9949590570932898
INFO:pyswarms.single.global_best:Iteration 901/1000, cost: 0.9949590570932898
INFO:pyswarms.single.global_best:================================
Optimization finished!
Final cost: 0.9950
Best value: [3.5850411183743393e-09, -0.9949586379966202]
2019-01-30 04:24:02,463 - pyswarms.single.global_best - INFO - Optimize for 1000 iters with {'c1': 0.5, 'c2': 0.3, 'w': 0.9}
pyswarms.single.global_best: 100%|██████████|1000/1000, best_cost=0
2019-01-30 04:24:17,995 - pyswarms.single.global_best - INFO - Optimization finished | best cost: 0.0, best pos: [1.99965504e-09 9.50602717e-10]
.. parsed-literal::
CPU times: user 213 ms, sys: 7.55 ms, total: 221 ms
Wall time: 210 ms
CPU times: user 6.74 s, sys: 1.01 s, total: 7.75 s
Wall time: 15.5 s
Basic Optimization with Arguments
---------------------------------
Expand All @@ -231,24 +197,24 @@ version of the rosenbrock function to demonstrate
import sys
# change directory to access pyswarms
sys.path.append('../')
print("Running Python {}".format(sys.version))
.. parsed-literal::
Running Python 3.5.2 |Anaconda custom (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Running Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0]
.. code-block:: python
# import modules
import numpy as np
# create a parameterized version of the classic Rosenbrock unconstrained optimzation function
def rosenbrock_with_args(x, a, b, c=0):
f = (a - x[:, 0]) ** 2 + b * (x[:, 1] - x[:, 0] ** 2) ** 2 + c
return f
Expand All @@ -265,93 +231,54 @@ than the design variables, and one optional keyword argument, ``a``,
.. code-block:: python
from pyswarms.single.global_best import GlobalBestPSO
# instatiate the optimizer
# instantiate the optimizer
x_max = 10 * np.ones(2)
x_min = -1 * x_max
bounds = (x_min, x_max)
options = {'c1': 0.5, 'c2': 0.3, 'w': 0.9}
optimizer = GlobalBestPSO(n_particles=10, dimensions=2, options=options, bounds=bounds)
# now run the optimization, pass a=1 and b=100 as a tuple assigned to args
cost, pos = optimizer.optimize(rosenbrock_with_args, 1000, print_step=100, verbose=3, a=1, b=100, c=0)
cost, pos = optimizer.optimize(rosenbrock_with_args, 1000, a=1, b=100, c=0)
.. parsed-literal::
INFO:pyswarms.single.global_best:Arguments Passed to Objective Function: {'c': 0, 'b': 100, 'a': 1}
INFO:pyswarms.single.global_best:Iteration 1/1000, cost: 1022.9667801907804
INFO:pyswarms.single.global_best:Iteration 101/1000, cost: 0.0011172801146408992
INFO:pyswarms.single.global_best:Iteration 201/1000, cost: 7.845605970774126e-07
INFO:pyswarms.single.global_best:Iteration 301/1000, cost: 1.313503109901238e-09
INFO:pyswarms.single.global_best:Iteration 401/1000, cost: 5.187079604907219e-10
INFO:pyswarms.single.global_best:Iteration 501/1000, cost: 1.0115283486088853e-10
INFO:pyswarms.single.global_best:Iteration 601/1000, cost: 2.329870757208421e-13
INFO:pyswarms.single.global_best:Iteration 701/1000, cost: 4.826176894160183e-15
INFO:pyswarms.single.global_best:Iteration 801/1000, cost: 3.125715456651088e-17
INFO:pyswarms.single.global_best:Iteration 901/1000, cost: 1.4236768129666014e-19
INFO:pyswarms.single.global_best:================================
Optimization finished!
Final cost: 0.0000
Best value: [0.99999999996210465, 0.9999999999218413]
2019-01-30 04:24:18,385 - pyswarms.single.global_best - INFO - Optimize for 1000 iters with {'c1': 0.5, 'c2': 0.3, 'w': 0.9}
pyswarms.single.global_best: 100%|██████████|1000/1000, best_cost=1.65e-18
2019-01-30 04:24:33,873 - pyswarms.single.global_best - INFO - Optimization finished | best cost: 1.6536536065757395e-18, best pos: [1. 1.]
It is also possible to pass a dictionary of key word arguments by using
``**`` decorator when passing the dict

.. code-block:: python
kwargs={"a": 1.0, "b": 100.0, 'c':0}
cost, pos = optimizer.optimize(rosenbrock_with_args, 1000, print_step=100, verbose=3, **kwargs)
cost, pos = optimizer.optimize(rosenbrock_with_args, 1000, **kwargs)
.. parsed-literal::
INFO:pyswarms.single.global_best:Arguments Passed to Objective Function: {'c': 0, 'b': 100.0, 'a': 1.0}
INFO:pyswarms.single.global_best:Iteration 1/1000, cost: 1.996797703363527e-21
INFO:pyswarms.single.global_best:Iteration 101/1000, cost: 1.0061676299213387e-24
INFO:pyswarms.single.global_best:Iteration 201/1000, cost: 4.8140236741112245e-28
INFO:pyswarms.single.global_best:Iteration 301/1000, cost: 2.879342304056693e-29
INFO:pyswarms.single.global_best:Iteration 401/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 501/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 601/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 701/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 801/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 901/1000, cost: 0.0
INFO:pyswarms.single.global_best:================================
Optimization finished!
Final cost: 0.0000
Best value: [1.0, 1.0]
2019-01-30 04:24:33,904 - pyswarms.single.global_best - INFO - Optimize for 1000 iters with {'c1': 0.5, 'c2': 0.3, 'w': 0.9}
pyswarms.single.global_best: 100%|██████████|1000/1000, best_cost=9.13e-19
2019-01-30 04:24:49,482 - pyswarms.single.global_best - INFO - Optimization finished | best cost: 9.132114249459913e-19, best pos: [1. 1.]
Any key word arguments in the objective function can be left out as they
will be passed the default as defined in the prototype. Note here, ``c``
is not passed into the function.

.. code-block:: python
cost, pos = optimizer.optimize(rosenbrock_with_args, 1000, print_step=100, verbose=3, a=1, b=100)
cost, pos = optimizer.optimize(rosenbrock_with_args, 1000, a=1, b=100)
.. parsed-literal::
INFO:pyswarms.single.global_best:Arguments Passed to Objective Function: {'b': 100, 'a': 1}
INFO:pyswarms.single.global_best:Iteration 1/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 101/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 201/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 301/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 401/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 501/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 601/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 701/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 801/1000, cost: 0.0
INFO:pyswarms.single.global_best:Iteration 901/1000, cost: 0.0
INFO:pyswarms.single.global_best:================================
Optimization finished!
Final cost: 0.0000
Best value: [1.0, 1.0]
2019-01-30 04:24:49,518 - pyswarms.single.global_best - INFO - Optimize for 1000 iters with {'c1': 0.5, 'c2': 0.3, 'w': 0.9}
pyswarms.single.global_best: 100%|██████████|1000/1000, best_cost=9.13e-19
2019-01-30 04:25:05,071 - pyswarms.single.global_best - INFO - Optimization finished | best cost: 9.125748012380431e-19, best pos: [1. 1.]

0 comments on commit 323cfe1

Please sign in to comment.