Particle swarm optimization is a derivative-free global optimum search algorithm based on the collective intelligence of a large group of intercommunicating entities. The individual particles are simple and primitive, knowing only their own current locations and fitness values, their personal best locations, and the swarm's best location. Each particle continually adjusts its trajectory based this information, moving towards the global optimum with each iteration. The swarm as a whole displays a remarkable level of coherence and coordination despite the simplicity of its individual particles. The coordinated behavior of the swarm has been compared with that of a flock of birds or a school of fish.
This is a Particle Swarm Optimization (PSO) algorithm which uses the same syntax as the Genetic Algorithm Toolbox, with some additional options specific to PSO. The idea is to allow some degree of code re-usability when trying different population-based optimization algorithms. Certain GA-specific parameters such as cross-over and mutation functions will obviously not be applicable to the PSO algorithm. However, many of the commonly used options and constraints for the Genetic Algorithm Toolbox may be used interchangeably with PSO since they are both iterative population-based solvers. See >> help pso (from the psopt directory) for more details.
Features:
* Modular and customizable
* Ability to solve problems consisting of binary variables. Type >> help psobinary (from the psopt directory) for details.
* Bounded, linear, and nonlinear constraints
* Support for vectorized fitness functions
* Algorithm parameters may be adjusted using an 'options' structure similar to existing MATLAB optimization solvers
* Custom plots may be written using same interface as the Genetic Algorithm plotting functions
* Another optimization solver may be called as a "hybrid function" to refine the results after the particle swarm terminates
A demo function (psodemo.m) is included, with a small library of test functions. To run the demo, from the psopt directory, call >> psodemo with no inputs or outputs.
New features and bug fixes will continue to be released until this is made redundant by the release of an official MATLAB PSO toolbox. Bug reports and feature requests are welcome.
Bibliography:
J Kennedy, RC Eberhart, YH Shi. Swarm Intelligence. Academic Press, 2001.
Particle Swarm Optimization. http://en.wikipedia.org/wiki/Particle_swarm_optimization
SM Mikki, AA Kishk. Particle Swarm Optimization: A Physics-Based Approach. Morgan & Claypool, 2008.
ANNEX:
Nonlinear inequality constraints in the form c(x) ≤ 0 and nonlinear equality constraints of the form ceq(x) = 0 have now been implemented. Either 'soft' or 'absorb' style boundaries may be used in problems with only nonlinear inequality constraints; calculations may be faster in some situations with 'soft' boundaries. However only 'absorb' style boundaries are usable for problems with nonlinear equality constraints.
See the following document for the proper syntax for defining nonlinear constraint functions: http://www.mathworks.com/access/helpdesk/help/toolbox/optim/ug/brg0p3g-1.html. To see a demonstration of nonlinear inequality constraints using a quadrifolium overlaid on Rosenbrock's function, run psodemo and choose 'nonlinearconstrdemo' as the test function. |