hydroPSO {hydroPSO}  R Documentation 
Stateoftheart version of the Particle Swarm Optimisation (PSO) algorithm (SPSO2011 and SPSO2007 capable). hydroPSO can be used as a replacement for optim
, but its main focus is the calibration of environmental and other realworld model codes. Several finetuning options and PSO variants are available to customise the PSO engine to different calibration problems.
hydroPSO(par, fn= "hydromod", ..., method=c("spso2011", "spso2007", "ipso", "fips", "wfips", "canonical"), lower=Inf, upper=Inf, control=list(), model.FUN=NULL, model.FUN.args=list() )
par 
OPTIONAL. numeric with a first guess for the parameters to be optimised, with length equal to the dimension of the solution space 
fn 
function or character with the name of a valid R function to be optimised (minimized or maximized). The character value ‘hydromod’ is used to specify that an Rexternal model code (i.e., an executable file that needs to be run from the system console) will be analised instead of an R function 
... 
OPTIONAL. Only used when 
method 
character, variant of the PSO algorithm to be used. By default spso2011: At each iteration particles are attracted to its own bestknown ‘personal’ and to the bestknown position in its ‘local’ neighbourhood, which depens on the value of spso2007: As in ipso: at each iteration particles in the swarm are rearranged in descending order according to their goodnessoffit and the best fips: at each iteration ALL particles contribute to modify the particles' position and velocity (see Mendes et al., 2004). Each particle is connected to a neighbourhood of particles depending on the wfips: same implementation as fips method, but the contribution of each particle is weighted according to their goodnessoffit value (see Mendes et al., 2004) canonical: It corresponds to the first formulation of the PSO algorithm, and it is included here for educational and comparative purposes only, due to several limitations described in literature (see Kennedy 2006). At each iteration, particles are attracted to its own bestknown ‘personal’ and to the bestknown position in all the swarm (‘global’). The following 
lower 
numeric, lower boundary for each parameter 
upper 
numeric, upper boundary for each parameter 
control 
a list of control parameters. See ‘Details’ 
model.FUN 
OPTIONAL. Used only when 
model.FUN.args 
OPTIONAL. Used only when 
By default the hydroPSO function performs minimization of fn
, but it will maximize fn
if MinMax='max'
The default control arguments in hydroPSO implements the Standard PSO 2011  SPSO2011 (see Clerc 2012; Clerc et al., 2010). At the same time, hydroPSO function provides options for clamping the maximal velocity, regrouping strategy when premature convergence is detected, timevariant acceleration coefficients, timevarying maximum velocity, (non)linear / random / adaptive / bestratio inertia weight definitions, random or LHS initialization of positions and velocities, synchronous or asynchronous update, 4 alternative neighbourhood topologies among others
The control
argument is a list that can supply any of the following components:
OPTIONAL. Used only when fn='hydromod'
character, name of the directory storing the input files required for PSO, i.e. ‘ParamRanges.txt’ and ‘ParamFiles.txt’
character, path to the directory storing the output files generated by hydroPSO
OPTIONAL. Used only when fn='hydromod'
character, name of the file defining the minimum and maximum boundary values for each one of the parameters to be calibrated
OPTIONAL. Used only when write2disk=TRUE
numeric, number of significant digits used for writing the output files with scientific notation
character, indicates whether a maximization or minimization problem needs to be solved. Valid values are in: c('min', 'max')
. Default value is min
numeric, number of particles in the swarm. By default npart=NA
, which means that the swarm size depends on the value of method
:
when method='spso2007'
npart=ceiling(10+2*sqrt(n))
, or npart=40
otherwise
numeric, maximum number of iterations. By default maxit=1000
numeric, maximum number of function evaluations. Default value is +Inf
When fn=='hydromod'
, this stopping criterion uses the number of effective function calls, i.e. those function calls with a finite output value
numeric, cognitive acceleration coefficient. Encourages the exploitation of the solution space and reflects how much the particle is influenced by its own bestknown position
By default c1= 0.5 + log(2)
numeric, social acceleration coefficient. Encourages the exploration of the current global best and reflects how much the particle is influenced by the bestknown optimum of the swarm
By default c2= 0.5 + log(2)
logical, indicates if an inertia weight (w) will be used to avoid swarm explosion, i.e. particles flying around their best position without converging into it (see Shi and Eberhart, 1998)
By default use.IW=TRUE
OPTIONAL. Used only when use.IW= TRUE \& IW.type!='GLratio'
numeric, value of the inertia weight(s) (w or [w.ini, w.fin]). It can be a single number which is used for all iterations, or it can be a vector of length 2 with the initial and final values (in that order) that w will take along the iterations
By default IW.w=1/(2*log(2))
logical, indicates if the Clerc's Constriction Factor (see Clerc, 1999; Eberhart and Shi, 2000; Clerc and Kennedy, 2002) is used to avoid swarm explosion
By default use.CF=FALSE
numeric in [0,1], represents a percentage to limit the maximum velocity (Vmax) for each dimension, which is computed as vmax = lambda*(XmaxXmin)
By default lambda=1
numeric, absolute convergence tolerance. The algorithm stops if gbest <= abstol
(minimisation problems) OR when gbest >= abstol
(maximisation problems)
By default it is set to Inf
or +Inf
for minimisation or maximisation problems, respectively
numeric, relative convergence tolerance. The algorithm stops if the absolute difference between the best ‘personal best’ in the current iteration and the best ‘personal best’ in the previous iteration is less or equal to reltol
. Defaults to sqrt(.Machine$double.eps)
, typically, about 1e8
If reltol
is set to 0
, this stopping criterion is not used
character, indicates how to initialise the particles' positions in the swarm within the ranges defined by lower
and upper
. Valid values are:
) lhs: Latin Hypercube initialisation of positions, using npart
number of strata to divide each parameter range. It requires the lhs package
) random: random initialisation of positions within lower
and upper
By default Xini.type='random'
character, indicates how to initialise the particles' velocities in the swarm. Valid values are:
) random2011: random initialisation of velocities within lowerXini
and upperXini
, as defined in SPSO 2011 (Vini=U(lowerXini, upperXini)) (see Clerc, 2012, 2010)
) lhs2011: same as in random2011, but using a Latin Hypercube initialisation with npart
number of strata instead of a random uniform distribution for each parameter. It requires the lhs package
) random2007: random initialisation of velocities within lower
and upper
using the ‘halfdiff’ method defined in SPSO 2007 (Vini=[U(lower, upper)Xini]/2) (see Clerc, 2012, 2010)
) lhs2007: same as in random2007, but using a Latin Hypercube initialisation with npart
number of strata instead of a random uniform distribution for each parameter. It requires the lhs package
) zero: all the particles are initialised with zero velocity
By default Vini.type=NA
, which means that Vini.type
depends on the value of method
: when method='spso2007' Vini.type='random2007'
, or Vini.type='random2011'
otherwise
character, indicates how (when) to update the global/neighbourhood and personal best. Valid values are:
)sync: the update is made synchronously, i.e. after computing the position and goodnessoffit for ALL the particles in the swarm. This is the DEFAULT option
)async: the update is made asynchronously, i.e. after computing the position and goodnessoffit for EACH individual particle in the swarm
OPTIONAL. Only used when best.update='async'
logical, if TRUE
the particles are processed in random order to update their personal best and the global/neighbourhood best
By default random.update=TRUE
character, indicates the type of boundary condition to be applied during optimisation. Valid values are: NA
, ‘absorbing2011’, ‘absorbing2007’, ‘reflecting’, ‘damping’, ‘invisible’
By default boundary.wall=NA
, which means that boundary.wall
depends on the value of method
: when method='spso2007' boundary.wall='absorbing2007'
, or boundary.wall='absorbing2011'
otherwise
Experience has shown that Clerc's constriction factor and the inertia weights do not always confine the particles within the solution space. To address this problem, Robinson and RahmatSamii (2004) and Huang and Mohan (2005) propose different boundary conditions, namely, reflecting, damping, absorbing and invisible to define how particles are treated when reaching the boundary of the searching space (see Robinson and RahmatSamii (2004) and Huang and Mohan (2005) for further details)
character, indicates the neighbourhood topology used in hydroPSO. Valid values are in c('random', 'gbest', 'lbest', 'vonNeumann')
:
) gbest: every particle is connected to each other and, hence the global best influences all particles in the swarm. This is also termed star topology, and it is generally assumed to have a fast convergence but is more vulnerable to the attraction to suboptimal solutions (see Kennedy, 1999; Kennedy and Mendes, 2002, Schor et al., 2010)
) lbest: each particle is connected to its K
immediate neighbours only. This is also termed circles or ring topology, and generally the swarm will converge slower than the gbest topology but it is less vulnerable to suboptimal solutions (see Kennedy, 1999; Kennedy and Mendes, 2002)
) vonNeumann: each particle is connected to its K=4
immediate neighbours only. This topology is more densely connected than lbest but less densely than gbest, thus, showing some parallelism with lbest but benefiting from a bigger neighbourhood (see Kennedy and Mendes, 2003)
) random: the random topology is a special case of lbest where connections among particles are randomly modified after an iteration showing no improvement in the global best (see Clerc, 2005; Clerc, 2010)
By default topology='random'
OPTIONAL. Only used when topology
is in c(random, lbest, vonNeumann)
numeric, neighbourhood size, i.e. the number of informants for each particle (including the particle itself) to be considered in the computation of their personal best
When topology=lbest
K
MUST BE an even number in order to consider the same amount of neighbours to the left and the right of each particle
As special case, K
could be equal to npart
. By default K=3
OPTIONAL. Only used when topology=='lbest'
numeric, number of iterations for which the gbest topology will be used before using the lbest topology for the computation of the personal best of each particle
This option aims at making faster the identification of the global zone of attraction
By default iter.ini=0
OPTIONAL. Only used when method=='ipso'
numeric, number of particles considered in the computation of the global best
By default ngbest=4
(see Zhao, 2006)
logical, indicates whether the parameter values have to be normalised to the [0,1] interval during the optimisation or not
This option appears in the C and Matlab version of SPSO2011 (See http://www.particleswarm.info/standard_pso_2011_c.zip) and there it is recommended to use this option when the search space is not an hypercube. If the search space is an hypercube, it is better not normalise (there is a small difference between the position without any normalisation and the denormalised one). By default normalise=FALSE
OPTIONAL. Used only when use.IW= TRUE
AND length(IW.w)>1
character, defines how the inertia weight w will vary along iterations. Valid values are:
)linear: w varies linearly between the initial and final values specified in IW.w
(see Shi and Eberhart, 1998; Zheng et al., 2003). This is the DEFAULT option
)nonlinear: w varies nonlinearly between the initial and final values specified in IW.w
with exponential factor IW.exp (see Chatterjee and Siarry, 2006)
)runif: w is a uniform random variable in the range [w.min, w.max] specified in IW.w
. It is a generalisation of the weight proposed in Eberhart and Shi (2001b)
)aiwf: adaptive inertia weight factor, where the inertia weight is varied adaptively depending on the goodnessoffit values of the particles (see Liu et al., 2005)
)GLratio: w varies according to the ratio between the global best and the average of the particle's local best (see Arumugam and Rao, 2008)
By default IW.type='linear'
OPTIONAL. Used only when use.IW=TRUE
AND IW.type='nonlinear'
numeric, nonlinear modulation index (see Chatterjee and Siarry, 2006)
When IW.type='linear'
, IW.exp
is set to 1. By default IW.exp=1
logical, indicates if the cognitive acceleration coefficient c1
will have a timevarying value instead of a constant one provided by the user (see Ratnaweera et al. 2004). By default use.TVc1=FALSE
character, required only when use.TVc1 = TRUE
. Valid values are:
)linear: c1 varies linearly between the initial and final values specified in TVc1.rng
(see Ratnaweera et al., 2004)
)nonlinear: c1 varies nonlinearly between the initial and final values specified in TVc1.rng
. Proposed by the authors of hydroPSO taking into account the work of Chatterjee and Siarry (2006) for the inertia weight
)GLratio: c1 varies according to the ratio between the global best and the average of the particle's local best (see Arumugam and Rao, 2008)
By default TVc1.type='linear'
OPTIONAL. Used only when use.TVc1=TRUE
AND TVc1.type!='GLratio'
numeric, initial and final values for the cognitive acceleration coefficient [c1.ini, c1.fin] (in that order) along the iterations
By default TVc1.rng=c(1.28, 1.05)
OPTIONAL. Used only when use.TVc1= TRUE
AND TVc1.type= 'nonlinear'
numeric, nonlinear modulation index
When TVc1.exp
is equal to 1, TVc1
corresponds to the improvement proposed by Ratnaweera et al., (2004), whereas when TVc1.exp
is different from one, no reference has been found in literature by the authors, but it was included as an option based on the work of Chatterjee and Siarry (2006) for the inertia weight
When TVc1.type='linear'
, TVc1.exp
is automatically set to 1. By default TVc1.exp=1
logical, indicates whether the social acceleration coefficient c2
will have a timevarying value or a constant one provided by the user (see Ratnaweera et al. 2004). By default use.TVc2=FALSE
character, required only when use.TVc2=TRUE
. Valid values are:
)linear: c2 varies linearly between the initial and final values specified in TVc2.rng
(see Ratnaweera et al. 2004)
)nonlinear: c2 varies nonlinearly between the initial and final values specified in TVc2.rng
. Proposed by the authors of hydroPSO taking into account the work of Chatterjee and Siarry (2006) for the inertia weight
By default TVc2.type='linear'
OPTIONAL. Used only when use.TVc2=TRUE
numeric, initial and final values for the social acceleration coefficient [c2.ini, c2.fin] (in that order) along the iterations
By default TVc2.rng=c(1.05, 1.28)
OPTIONAL. Used only when use.TVc2= TRUE
AND TVc2.type='nonlinear'
numeric, nonlinear modulation index
When TVc2.exp
is equal to 1, TVc2
corresponds to the improvement proposed by Ratnaweera et al., 2004, whereas when TVc2.exp
is different from one, no reference has been found in literature by the authors, but it was included as an option based on the work of Chatterjee and Siarry (2006) for the inertia weight
When TVc2.type= linear
, TVc2.exp
is automatically set to 1. By default TVc2.exp=1
logical, indicates whether the percentage to limit the maximum velocity lambda
will have a timevarying value or a constant value provided by the user. Proposed by the authors of hydroPSO based on the work of Chatterjee and Siarry (2006) for the inertia weight
By default use.TVlambda=FALSE
character, required only when use.TVlambda=TRUE
. Valid values are:
)linear: TVvmax varies linearly between the initial and final values specified in TVlambda.rng
)nonlinear: TVvmax varies nonlinearly between the initial and final values specified in TVlambda.rng
By default TVlambda.type='linear'
OPTIONAL. Used only when use.TVlambda=TRUE
numeric, initial and final values for the percentage to limit the maximum velocity [TVlambda.ini, TVlambda.fin] (in that order) along the iterations
By default TVlambda.rng=c(1, 0.25)
OPTIONAL. only required when use.TVlambda= TRUE
AND TVlambda.type='nonlinear'
numeric, nonlinear modulation index
When TVlambda.type='linear'
, TVlambda.exp
is automatically set to 1. By default TVlambda.exp=1
logical, indicates if the swarm should be regrouped when premature convergence is detected. By default use.RG=FALSE
When use.RG=TRUE
the swarm is regrouped in a search space centred around the current global best. This updated search space is hoped to be both small enough for efficient search and large enough to allow the swarm to escape from stagnation (see Evers and Ghalia, 2009)
There are 4 differences wrt Evers and Ghalia 2009:
) swarm radius: median is used instead of max
) computation of the new range of parameter space, which corresponds to the boundaries of the whole swarm at a given iteration, instead of the maximum values of ‘abs(xGbest)’
) regrouping factor: RG.r
instead of ‘6/(5*ro)’
) velocity is reinitialized using Vini.type
instead of using the formula proposed by Evers and Ghalia 2009
ONLY required when use.RG=TRUE
numeric, positive number representing the stagnation threshold used to decide whether the swarm has to be regrouped or not. See Evers and Galia (2009) for further details
Regrouping occurs when the normalised swarm radius is less than RG.thr
. By default RG.thr=1E5
ONLY required when use.RG=TRUE
.
numeric, positive number representing the regrouping factor, which is used to regroup the swarm in a search space centred around the current global best (see Evers and Galia, 2009 for further details). By default RG.thr=2
ONLY required when use.RG=TRUE
numeric, minimum number of iterations needed before each new regrouping. By default RG.miniter=100
logical, indicates if a twodimensional plot with the particles' position will be drawn after each iteration. For high dimensional functions, only the first two dimensions of all the particles are plotted
By default plot=FALSE
logical, indicates if the best parameter values for each particle and their goodnessoffit will be included in the output of the algorithm
By default out.with.pbest=FALSE
logical, indicates if the goodnessoffit of each particle for each iteration will be included in the output of the algorithm
By default out.with.fit.iter=FALSE
logical, indicates if the output files will be written to the disk. By default write2disk=TRUE
logical, indicates if progress messages are to be printed. By default verbose=TRUE
OPTIONAL. Used only when verbose=TRUE
The frequency of report messages printed to the screen. Default to every 100 iterations
character, indicates how to parallelise ‘hydroPSO’ (to be precise, only the evaluation of the objective function fn
is parallelised). Valid values are:
)none: no parallelisation is made (this is the default value)
)multicore: parallel computations for machines with multiple cores or CPUs. The evaluation of the objective function fn
is done with the mclapply
function of the parallel package. It requires POSIXcompliant OS (essentially anything but Windows)
)parallel: parallel computations for network clusters or machines with multiple cores or CPUs. A ‘FORK’ cluster is created with the makeForkCluster
function. When fn.name="hydromod"
the evaluation of the objective function fn
is done with the clusterApply
function of the parallel package. When fn.name!="hydromod"
the evaluation of the objective function fn
is done with the parRapply
function of the parallel package.
)parallelWin: parallel computations for network clusters or machines with multiple cores or CPUs (this is the only parallel implementation that works on Windows machines). A ‘PSOCK’ cluster is created with the makeCluster
function. When fn.name="hydromod"
the evaluation of the objective function fn
is done with the clusterApply
function of the parallel package. When fn.name!="hydromod"
the evaluation of the objective function fn
is done with the parRapply
function of the parallel package.
OPTIONAL. Used only when parallel!='none'
numeric, indicates the number of cores/CPUs to be used in the local multicore machine, or the number of nodes to be used in the network cluster.
By default par.nnodes
is set to the amount of cores detected by the function detectCores()
(multicore or parallel package)
OPTIONAL. Used only when parallel='parallelWin'
list of package names (as characters) that need to be loaded on each node for allowing the objective function fn
to be evaluated
A list, compatible with the output from optim
, with components:
par 
optimum parameter set found 
value 
value of 
counts 
threeelement vector containing the total number of function calls, number of iterations, and number of regroupings 
convergence 
integer code where

message 
character string giving humanfriendly information about 
Note for optim
users:
1) In hydroPSO the length of lower
and upper
are used to define the dimension of the solution space (not the length of par
)
2) In hydroPSO, par
may be omitted. If not omitted, the m parameter sets provided by the user for par
are used to overwrite the first m parameter sets randomly defined according to the value of Xini.type
Mauricio ZambranoBigiarini, mzb.devel@gmail.com
Clerc, M. Standard Particle Swarm. 2012. (SPSO2007, SPSO2011). clerc.maurice.free.fr/pso/SPSO_descriptions.pdf. Last visited [24Sep2012]
Clerc, M. From Theory to Practice in Particle Swarm Optimization, Handbook of Swarm Intelligence, Springer Berlin Heidelberg, 336, Eds: Panigrahi, Bijaya Ketan, Shi, Yuhui, Lim, MengHiot, Hiot, Lim Meng, and Ong, Yew Soon, 2010, doi: 10.1007/9783642173905_1
Clerc, M., Stagnation Analysis in Particle Swarm Optimisation or what happens when nothing happens. Technical Report. 2006. http://hal.archivesouvertes.fr/hal00122031
Clerc, M. Particle Swarm Optimization. ISTE, 2005
Clerc, M and J Kennedy. The particle swarm  explosion, stability, and convergence in a multidimensional complex space. IEEE Transactions On Evolutionary Computation, 6:5873, 2002. doi:10.1109/4235.985692
Chatterjee, A. and Siarry, P. Nonlinear inertia weight variation for dynamic adaptation in particle swarm optimization, Computers \& Operations Research, Volume 33, Issue 3, March 2006, Pages 859871, ISSN 03050548, DOI: 10.1016/j.cor.2004.08.012
Eberhart, R.C.; Shi, Y.; Comparing inertia weights and constriction factors in particle swarm optimization. Evolutionary Computation, 2000. Proceedings of the 2000 Congress on , vol.1, no., pp.8488 vol.1, 2000. doi: 10.1109/CEC.2000.870279
Evers, G.I.; Ben Ghalia, M. Regrouping particle swarm optimization: A new global optimization algorithm with improved performance consistency across benchmarks. Systems, Man and Cybernetics, 2009. SMC 2009. IEEE International Conference on , vol., no., pp.39013908, 1114 Oct. 2009. doi: 10.1109/ICSMC.2009.5346625
Huang, T.; Mohan, A.S.; , A hybrid boundary condition for robust particle swarm optimization. Antennas and Wireless Propagation Letters, IEEE , vol.4, no., pp. 112117, 2005. doi: 10.1109/LAWP.2005.846166
Kennedy, J. and R. Eberhart. Particle Swarm Optimization. in proceedings IEEE international conference on Neural networks. pages 19421948. 1995. doi: 10.1109/ICNN.1995.488968
Kennedy, J.; Small worlds and megaminds: effects of neighborhood topology on particle swarm performance. Evolutionary Computation, 1999. CEC 99. Proceedings of the 1999 Congress on , vol.3, no., pp.3 vol. (xxxvii+2348), 1999. doi: 10.1109/CEC.1999.785509
Kennedy, J.; Mendes, R.. Population structure and particle swarm performance. Evolutionary Computation, 2002. CEC '02. Proceedings of the 2002 Congress on , vol.2, no., pp.16711676, 2002. doi: 10.1109/CEC.2002.1004493
Kennedy, J.; Mendes, R.; , Neighborhood topologies in fullyinformed and bestofneighborhood particle swarms. Soft Computing in Industrial Applications, 2003. SMCia/03. Proceedings of the 2003 IEEE International Workshop on , vol., no., pp. 45 50, 2325 June 2003. doi: 10.1109/SMCIA.2003.1231342
Kennedy, J. 2006. Swarm intelligence, in Handbook of NatureInspired and Innovative Computing, edited by A. Zomaya, pp. 187219, Springer US, doi:10.1007/0387277056_6
Liu, B. and L. Wang, Y.H. Jin, F. Tang, and D.X. Huang. Improved particle swarm optimization combined with chaos. Chaos, Solitons \& Fractals, vol. 25, no. 5, pp.12611271, Sep. 2005. doi:10.1016/j.chaos.2004.11.095
Mendes, R.; Kennedy, J.; Neves, J. The fully informed particle swarm: simpler, maybe better. Evolutionary Computation, IEEE Transactions on , vol.8, no.3, pp. 204210, June 2004. doi: 10.1109/TEVC.2004.826074
Ratnaweera, A.; Halgamuge, S.K.; Watson, H.C. Selforganizing hierarchical particle swarm optimizer with timevarying acceleration coefficients. Evolutionary Computation, IEEE Transactions on , vol.8, no.3, pp. 240 255, June 2004. doi: 10.1109/TEVC.2004.826071
Robinson, J.; RahmatSamii, Y.; Particle swarm optimization in electromagnetics. Antennas and Propagation, IEEE Transactions on , vol.52, no.2, pp. 397407, Feb. 2004. doi: 10.1109/TAP.2004.823969
Shi, Y.; Eberhart, R. A modified particle swarm optimizer. Evolutionary Computation Proceedings, 1998. IEEE World Congress on Computational Intelligence. The 1998 IEEE International Conference on , vol., no., pp.6973, 49 May 1998. doi: 10.1109/ICEC.1998.699146
Schor, D.; Kinsner, W.; Anderson, J.; A study of optimal topologies in swarm intelligence. Electrical and Computer Engineering (CCECE), 2010 23rd Canadian Conference on , vol., no., pp.18, 25 May 2010. doi: 10.1109/CCECE.2010.5575132
YongLing Zheng; LongHua Ma; LiYan Zhang; JiXin Qian. On the convergence analysis and parameter selection in particle swarm optimization. Machine Learning and Cybernetics, 2003 International Conference on , vol.3, no., pp. 18021807 Vol.3, 25 Nov. 2003. doi: 10.1109/ICMLC.2003.1259789
ZambranoBigiarini, M., and R. Rojas (2013), A modelindependent Particle Swarm Optimisation software for model calibration, Environmental Modelling \& Software, 43, 525, doi:10.1016/j.envsoft.2013.01.004
ZambranoBigiarini, M; M. Clerc; R. Rojas (2013), Standard Particle Swarm Optimisation 2011 at CEC2013: A baseline for future PSO improvements, In Proceedings of 2013 IEEE Congress Evolutionary Computation (CEC'2013) (accepted)
Zhao, B. An Improved Particle Swarm Optimization Algorithm for Global Numerical Optimization. In Proceedings of International Conference on Computational Science (1). 2006, 657664
Neighborhood Topologies, http://tracer.uc3m.es/tws/pso/neighborhood.html. Last visited [15Feb2012]
# Number of dimensions of the optimisation problem (for all the examples) D < 5 # Boundaries of the search space (Rastrigin function) lower < rep(5.12, D) upper < rep(5.12, D) ## Not run: # Setting the home directory of the user as working directory setwd("~") ################################ # Example 1. Basic use # ################################ # Setting the seed (for reproducible results) set.seed(100) # Basic use 1. Rastrigin function (nonlinear and multimodal with many local minima) # Results are not saved to the hard disk, for faster execution ('write2disk=FALSE') hydroPSO(fn=rastrigin, lower=lower, upper=upper, control=list(write2disk=FALSE) ) # Basic use 2. Rastrigin function (nonlinear and multimodal with many local minima) # Results are saved to the hard disk. Slower than before but results are kept for # future inspection hydroPSO(fn=rastrigin, lower=lower, upper=upper ) # Plotting the results, by default into the active graphic device # 'MinMax="min"' indicates a minimisation problem plot_results(MinMax="min") # Plotting the results into PNG files. plot_results(MinMax="min", do.png=TRUE) ################################ # Example 2. More advanced use # ################################ # Defining the relative tolerance ('reltol'), the frequency of report messages # printed to the screen ('REPORT'), and no output files ('write2disk') set.seed(100) hydroPSO( fn=rastrigin, lower=lower, upper=upper, control=list(reltol=1e20, REPORT=10, write2disk=FALSE) ) ################################### # Example 3. von Neumman Topology # ################################### # Same as Example 2, but using a von Neumann topology ('topology="vonNeumann"') set.seed(100) hydroPSO(fn=rastrigin,lower=lower,upper=upper, control=list(topology="vonNeumann", reltol=1E20, REPORT=50, write2disk=FALSE) ) ################################ # Example 4. Regrouping # ################################ # Same as Example 3 ('topology="vonNeumann"') but using regrouping ('use.RG') set.seed(100) hydroPSO(fn=rastrigin,lower=lower,upper=upper, control=list(topology="vonNeumann", reltol=1E20, REPORT=50, write2disk=FALSE, use.RG=TRUE,RG.thr=7e2,RG.r=3,RG.miniter=50) ) ################################ # Example 5. FIPS # ################################ # Same as Example 3 ('topology="vonNeumann"') but using a fully informed # particle swarm (FIPS) variant ('method') with global best topology set.seed(100) hydroPSO(fn=rastrigin,lower=lower,upper=upper, method="fips", control=list(topology="gbest",reltol=1E9,write2disk=FALSE) ) ################################ # Example 6. normalisation # ################################ # Same as Example 3 but parameter values are normalised to the [0,1] interval # during the optimisation. This option is recommended when the search space is # not an hypercube (not useful is this particular example) set.seed(100) hydroPSO(fn=rastrigin,lower=lower,upper=upper, control=list(topology="vonNeumann", reltol=1E20, normalise=TRUE, REPORT=50, write2disk=FALSE) ) ################################ # Example 7. Asynchronus update# ################################ # Same as Example 3, but using asynchronus update of previus and local best # ('best.update'). Same global optimum but much slower.... set.seed(100) hydroPSO(fn=rastrigin,lower=lower,upper=upper, control=list(topology="vonNeumann", reltol=1E20, REPORT=50, write2disk=FALSE, best.update="async") ) ## End(Not run) # dontrun END