# Changes between Version 6 and Version 7 of Documentation/Reference/Particle Swarm Optimization

Ignore:
Timestamp:
03/31/11 16:30:10 (11 years ago)
Comment:

Added screenshots of velocity bounds and inertia updaters

### Legend:

Unmodified
 v6 === Parameter Adjustment === Like many other metheuristics, the PSO algorithm frequently faces the problems of being trapped in local optima. Balancing the global exploration and local exploitation abilities of PSO is therefore very important. Important PSO parameters that should be tweaked for every problem (or even instance): '''Inertia Weight''' The inertia weight parameter was introduced in 1998 by Shi and Eberhart. The idea was to use a maximum velocity and set the velocity bounds to the dynamic range of the solution space. One can further improve results by adjusting the inertia weight dynamically during the optimization run (via fuzzy optimization, by linear decreasing or increasing or randomizing the parameter). === Parameter Tuning === Like many other metheuristics, the PSO algorithm frequently faces the problem of being trapped in local optima. Balancing the global exploration and local exploitation abilities of PSO is therefore very important. Tweaking the following PSO parameters for your problem (or even instance) can yield better results: '''Velocity Bounds''' Another important parameter is the minimum/maximum velocity bounds vector. Particle velocities on each dimension are clamped to a certain velocity range by the parameter VelocityBounds. Therefore VelocityBounds affects the maximum global exploration ability of PSO, since One crucial parameter is the minimum/maximum velocity bounds vector. Particle velocities on each dimension are clamped to a certain velocity range by the parameter VelocityBounds. Therefore VelocityBounds affects the maximum global exploration ability of PSO, since * large velocity --> global exploration and * small velocity --> local exploitation. '''Parameter Tuning  ''' '''Inertia Weight''' The inertia weight parameter was introduced in [#References (Shi and Eberhart, 1998))]. It was soon discovered that decreasing inertia weight over time can further improve results as dicussed in [#References (Shi and Eberhart, 1999))]. Other researchers have since experimented with dynamic adjustment of inertia weight, for instance via fuzzy optimization, by linear decreasing or increasing or randomizing the parameter. A recent paper by [#References (Pedersen 2010)] provides a most helpful table of PSO parameters that have been tuned via meta/optimization for different optimization scenarios. We recommend them as a first starting point when optimizing new problems. Some of the settings (like using a negative inertia weight) may seem quirky, but we also got some very good results with those settings. It is possible to let the algorithm adjust some parameters dynamically during runtime. * Inertia Weight: Configure the InertiaUpdater to adjust the inertia weight. You can select any operator that implements IDiscreteDoubleValueModifier. The standard Simulated Annealing annealing operators (exponential, square root, linear, quadratic increase/decrease) can be used. * Velocity Vector: In the SwarmUpdater the velocity vector can be likewise adjusted. Please note that do so far only use one IDiscreteDoubleValueModifier for all vector dimensions, therefore the value (but not the sign) of all dimensions will be equal. Also, a recent paper by [#References (Pedersen 2010)] provides a most helpful table of PSO parameter settings that have been tuned via meta/optimization for different optimization scenarios. We recommend them as a first starting point when optimizing new problems. Some of the settings (like using a negative inertia weight) may seem quirky, but we also got some very good results with those settings. === Dynamic Parameters === As mentioned in the previous section it has been found to be benefitial to adjust parameters dynamically during runtime. Currently you can enable dynamic parameter modification for the following two parameters. * '''Inertia Weight:''' Configure the InertiaUpdater to adjust the inertia weight. You can select any operator that implements IDiscreteDoubleValueModifier. The standard Simulated Annealing annealing operators (exponential, square root, linear, quadratic increase/decrease) can be used as shown in the screenshot below. You only have to select an appropriate annealing operator and set a desired StartValue and EndValue. Please note that some additional parameters of the operator are hidden, among them the StartIndex, Index and EndIndex. Those are set by default to cover the whole algorithm execution time from iteration 0 to MaxIterations. [[Image(PSO_InertiaUpdater.png, height=400, margin-right=30, margin-left=30)]] '''Tip:''' You can show hidden parameters by clicking on the Show hidden parameters button. * '''Velocity Bounds:''' In the SwarmUpdater the velocity bounds vector can be likewise adjusted. You can either adjust it statically by altering the VelocityBounds parameter. Or you can select an IDiscreteDoubleValueModifier that will set all vector dimensions equally (symmetric around zero). In addition, you have to set the VelocityBoundsStartValue and VelocityBoundsEndValue. Note that VelocityBoundsStartIndex, VelocityBoundsIndex and VelocityBoundsEndIndex are once again hidden (but can be un-hidden and changed manually, if you wish). The parameters are propagated to the IDiscreteDoubleValueModifier so there is no need to paramiterize it as well. [[Image(PSO_SwarmUpdater.png, height=400, margin-right=30, margin-left=30)]] '''Topology Updaters''' Technical Report HL1001 (Hvass Laboratories) * Mendes, R., 2004. Population Topologies and Their Influence in Particle Swarm Performance, PhD thesis, Universidade do Minho. * Shi, Y. and Eberhart, R.C., 1998. A modified particle swarm optimizer. In Proceedings of the IEEE International Conference on Evolutionary Computation, pp. 69–73, IEEE Press. * Shi, Y. and Eberhart, R.C., 1999. Empirical study of particle swarm optimization. In Proceedings of the 1999 IEEE Congress on Evolutionary Computation, pp. 1945–1950, IEEE Press.