Constrained Particle Swarm Optimization

Version 1.31.4 (40.6 KB) by Sam
Implementation of a PSO algorithm with the same syntax as the Genetic Algorithm Toolbox.
Updated 5 Nov 2018

Previously titled "Another Particle Swarm Toolbox"

Particle swarm optimization (PSO) is a derivative-free global optimum solver. It is inspired by the surprisingly organized behaviour of large groups of simple animals, such as flocks of birds, schools of fish, or swarms of locusts. The individual creatures, or "particles", in this algorithm are primitive, knowing only four simple things: 1 & 2) their own current location in the search space and fitness value, 3) their previous personal best location, and 4) the overall best location found by all the particles in the "swarm". There are no gradients or Hessians to calculate. Each particle continually adjusts its speed and trajectory in the search space based on this information, moving closer towards the global optimum with each iteration. As seen in nature, this computational swarm displays a remarkable level of coherence and coordination despite the simplicity of its individual particles.

Ease of Use
If you are already using the Genetic Algorithm (GA) included with MATLAB's Global Optimization Toolbox, then this PSO toolbox will save you a great deal of time. It can be called from the MATLAB command line using the same syntax as the GA, with some additional options specific to PSO. This will allow a high degree of code re-usability between the PSO toolbox and the GA toolbox. 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 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.

* Support for distributed computing using MATLAB's parallel computing toolbox.
* Full support for bounded, linear, and nonlinear constraints.
* Modular and customizable.
* Binary optimization. See PSOBINARY function for details.
* Vectorized fitness functions.
* Solver parameters controlled using 'options' structure similar to existing MATLAB optimization solvers.
* User-defined custom plots may be written using same template as GA plotting functions.
* Another optimization solver may be called as a "hybrid function" to refine PSO results.

A demo function is included, with a small library of test functions. To run the demo, from the psopt directory, call >> psodemo with no inputs or outputs.

Bug reports and feature requests are welcome.

Special thanks to the following people for contributing code and bug fixes:
* Ben Xin Kang of the University of Hong Kong
* Christian Hansen of the University of Hannover
* Erik Schreurs from the MATLAB Central community
* J. Oliver of Brigham Young University
* Michael Johnston of the IRIS toolbox
* Ziqiang (Kevin) Chen

* J Kennedy, RC Eberhart, YH Shi. Swarm Intelligence. Academic Press, 2001.
* Particle Swarm Optimization.
* RE Perez, K Behdinan. Particle swarm approach for structural design optimization. Computers and Structures 85 (2007) 1579–1588.
* SM Mikki, AA Kishk. Particle Swarm Optimization: A Physics-Based Approach. Morgan & Claypool, 2008.

Addendum A
Nonlinear inequality constraints in the form c(x) ≤ 0 and nonlinear equality constraints of the form ceq(x) = 0 have now been fully implemented. The 'penalize' constraint boundary enforcement method is now default. It has been redesigned and tested extensively, and should work with all types of constraints.

See the following document for the proper syntax for defining nonlinear constraint functions:
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.

Addendum B
See the following guide in the GA toolbox documentation to get started on using the parallel computing toolbox.

Addendum C
If you are just starting out and hoping to learn to use this toolbox for work or school, here are some essential readings:
* MATLAB's Optimization Toolbox:
* MATLAB's Global Optimization Toolbox:
* MATLAB's Genetic Algorithm:

Addendum D
There is now a particle swarm optimizer included with the Global Optimization Toolbox. If you have a recent version of the Global Optimization Toolbox installed, you will need to set the path appropriately in your code to use this toolbox.

Cite As

S Chen. Constrained Particle Swarm Optimization (2009-2018). MATLAB File Exchange.

MATLAB Release Compatibility
Created with R2017a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Versions that use the GitHub default branch cannot be downloaded

Version Published Release Notes

Fix error involving checking for fmincon when defined as a hybrid function. In earlier versions of MATLAB it was an *.m file, and has subsequently been changed to a *.p file. Thanks to Martin Hallmann for pointing this out.


Fixes error related to generating initial population with constraints.

Updated documentation.
Restored description, updated title.

Added link to github repository.

Fixed a typo which caused improper handling of bounded constraints in determining initial particle distribution. Thanks to Erik for pointing out this major bug!

Minor bug fix and efficiency improvements, related to nonlinear constraint checking code as well as parallel computing capabilities.

Fixed bug involving verbosity checks before displaying warnings.

Implemented parallel computing capability. A few minor improvements. See the included release notes file for details.

Fixed namespace problem with one of the *.m files.

Merged previously lost updates from version 20100818. Fixed bugs related to nonlinear constraint handling. See the release notes file included with toolbox for details.

Updated description.

The previous upload was a zip bomb. Rearranged the contents of the *.zip file to behave nicely when unpacked.

Implemented an alternative, penalty-based method of constraint enforcement as described in Perez and Behdinan's 2007 paper. See description for details.

Minor bug fix. Thanks to Ben for pointing this out.

A time limit can now be set, and a custom swarm acceleration function can be defined using the 'AccelerationFcn' option in PSOOPTIMSET (default is PSOITERATE). See release notes for more details.

Added support for problems with binary variables. Minor bug fixes. See release notes for details.

Output to command window can now be suppressed using the options structure. See release notes for details.

Robustness improvements, minor bug fixes.

Updated description. Minor performance and robustness improvements.

New features: nonlinear equality constraints; ability to define initial swarm state.

Nonlinear inequality constraints can now be used, with 'soft' boundaries only; psodemo now has a 'fast' setting requiring less intensive 3d graphics. See release notes for more details.

Various bug fixes. Implemented 'absorb' style of boundaries for linear constraints. Social and cognitive attraction parameters can now be adjusted through the options structure. See release notes for details.

Bug fix, minor visual improvements. See release notes for details.

Major bug fix. New features, including ability to call a hybrid function to further refine the final result of the swarm algorithm. See release notes for complete details.

Minor bug fixes, more detailed description. Forgot to update the zip file last time.

Small bug fix, more detailed description.

To view or report issues in this GitHub add-on, visit the GitHub Repository.
To view or report issues in this GitHub add-on, visit the GitHub Repository.