This document introduces the Particle Swarm Optimization (PSO) in Scilab.
The PSO method, published by Kennedy and Eberhart in 1995, is based on a
population of points at first stochastically deployed on a search field.
Each member of this particle swarm could be a solution of the optimization
This swarm flies in the search field (of D dimensions) and each member of it is
attracted by its personal best solution and by the best solution of its
neighbours. Each particle has a memory storing all data relating to its flight
(location, speed and its personal best solution).
It can also inform its neighbours, i.e. communicate its speed and position. This
ability is known as socialisation. For each iteration, the objective function is
evaluated for every member of the swarm.
Then the leader of the whole swarm can be determined: it is the particle with
the best personal solution. The process leads at the end to the best global
This direct search method does not require any knowledge
of the objective function derivatives.
The PSO is a meta-heuristic optimization process created by Kennedy and Eberhart
Three PSO are implanted in this toolbox :
* the "Inertia Weight Model" by Shi & Eberhart in 1998,
* the "Radius",
* the "BSG-Starcraft" by the author.
Sébastien Salmon was a mecatronics research engineer and a PhD. student at the
M3M - UTBM.
He uses the PSO for actuator optimization and inverse parameter identification.
Now, he is creating its own company specialized in optimization.
Please cite the author when using modificated PSO (Radius and/or
Please contact the author if your are satisfied of this works (or not) and if
you find some bugs ;) .
This module depends on the apifun module.
* Kennedy, J. and Eberhart, R. C. (1995). Particle swarm optimization. Proc.
IEEE Int'l. Conf. on Neural Networks, IV, 1942–1948. Piscataway, NJ: IEEE
* Shi, Y. and Eberhart, R. C. (1998a). Parameter selection in particle swarm
optimization. In Evolutionary Programming VII: Proc. EP98, New York:
Springer-Verlag, pp. 591-600.
* Shi, Y. and Eberhart, R. C. (1998b). A modified particle swarm optimizer.
Proceedings of the IEEE International Conference on Evolutionary Computation,
69-73. Piscataway, NJ: IEEE Press.
* Salmon, S. (May 2012), Caractérisation, identification et optimisation des
systèmes mécaniques complexes par mise en œuvre de simulateurs hybrides
matériels/logiciels, PhD Thesis, UTBM, Belfort, France.
* Copyright (C) 2012 - Optimization Command & Control Systems - Sebastien
* Copyright (C) 2010 - 2012 - M3M - UTBM - Sebastien Salmon
* Copyright (C) 2011 - DIGITEO - Michael Baudin
Released in Creative Commons CC-BY-NC-SA.
CHANGES 0.7 => 0.8
* First binary releases for Scilab 5.5 and for Scilab 6.0
* builder.sce can now build with both Scilab 5 and Scilab 6
* The dependence on the apifun module was not formally set
* PSO.start now checks that apifun is loaded.
* The library of macros is renamed from PSO_Toolboxlib to PSOlib.
* In PSO_bsg_starcraft() PSO_bsg_starcraft_radius(),
PSO_inertial(), and PSO_inertial_radius() :
- A save('PSO_#_save',..) call was unsafe and unused. It is canceled:
. pwd() is not always writable.
. There were some syncronization issues (writing while the same
file was being closed from the previous save() call).
- When the provided speed_factor or radius is scalar while a row
is expected, it was not replicated. Fixed.
* PSO_inertial() and PSO_inertial_radius() are subject to the
Scilab 6 bug http://bugzilla.scilab.org/15655
=> tests failing.