| pso | R Documentation |
This function allows to use particle swarm algorithm for numeric global optimization of real-valued functions.
pso( fn, gr = NULL, lower, upper, pop.n = 40, pop.initial = NULL, pop.method = "uniform", nh.method = "random", nh.par = 3, nh.adaptive = TRUE, velocity.method = "hypersphere", velocity.par = list(w = 1/(2 * log(2)), c1 = 0.5 + log(2), c2 = 0.5 + log(2)), hybrid.method = "rank", hybrid.par = 2, hybrid.prob = 0, hybrid.opt.par = NULL, hybrid.n = 1, constr.method = NULL, constr.par = NULL, random.order = TRUE, maxiter = 100, is.max = TRUE, info = TRUE, ... )
fn |
function to be maximized i.e. fitness function. |
gr |
gradient of the |
lower |
lower bound of the search space. |
upper |
upper bound of the search space. |
pop.n |
integer representing the size of the population. |
pop.initial |
numeric matrix which rows are particles to be included into the initial population. Numeric vector will be coerced to single row matrix. |
pop.method |
the algorithm to be applied for a creation of the initial population. See 'Details' for additional information. |
nh.method |
string representing the method (topology) to be used for the creation of neighbourhoods. See 'Details' for additional information. |
nh.par |
parameters of the topology algorithm. |
nh.adaptive |
logical; if |
velocity.method |
string representing the method to be used for the update of velocities. |
velocity.par |
parameters of the velocity formula. |
hybrid.method |
hybrids selection algorithm i.e. mechanism determining which particles should be subject to local optimization. See 'Details' for additional information. |
hybrid.par |
parameters of the hybridization algorithm. |
hybrid.prob |
probability of generating the hybrids each iteration. |
hybrid.opt.par |
parameters of the local optimization function
to be used for hybridization algorithm (including |
hybrid.n |
number of hybrids that appear if hybridization should take place during the iteration. |
constr.method |
the algorithm to be applied for imposing constraints on the particles. See 'Details' for additional information. |
constr.par |
parameters of the constraint algorithm. |
random.order |
logical; if |
maxiter |
maximum number of iterations of the algorithm. |
is.max |
logical; if |
info |
logical; if |
... |
additional parameters to be passed to
|
Default arguments have been set in accordance with SPSO 2011 algorithm proposed by M. Clerc (2012).
To find information on particular methods available via
pop.method, nh.method, velocity.method,
hybrid.method and constr.method
arguments please see 'Details' section of
gena.population, pso.nh,
pso.velocity, gena.hybrid
and gena.constr correspondingly.
It is possible to provide manually implemented functions for population
initialization, neighbourhoods creation, velocity updated, hybridization
and constraints in a similar way as for gena.
By default function does not impose any constraints upon the parameters.
If constr.method = "bounds" then lower and upper
constraints will be imposed. Lower bounds should be strictly smaller
then upper bounds.
Currently the only available termination condition is maxiter. We
are going to provide some additional termination conditions during
future updates.
Infinite values in lower and upper are substituted with
-(.Machine$double.xmax * 0.9) and .Machine$double.xmax * 0.9
correspondingly.
By default if gr is provided then BFGS algorithm will be used inside
optim during hybridization.
Otherwise Nelder-Mead will be used.
Manual values for optim arguments may be provided
(as a list) through hybrid.opt.par argument.
For more information on particle swarm optimization please see M. Clerc (2012).
This function returns an object of class pso that is a list
containing the following elements:
par - particle (solution) with the highest fitness
(objective function) value.
value - value of fn at par.
population - matrix of particles (solutions) of the
last iteration of the algorithm.
counts - a two-element integer vector giving the number of
calls to fn and gr respectively.
is.max - identical to is.max input argument.
fitness.history - vector which i-th element is fitness
of the best particle in i-th iteration.
iter - last iteration number.
M. Clerc (2012). Standard Particle Swarm Optimisation. HAL archieve.
## Consider Ackley function
fn <- function(par, a = 20, b = 0.2)
{
val <- a * exp(-b * sqrt(0.5 * (par[1] ^ 2 + par[2] ^ 2))) +
exp(0.5 * (cos(2 * pi * par[1]) + cos(2 * pi * par[2]))) -
exp(1) - a
return(val)
}
# Maximize this function using particle swarm algorithm
set.seed(123)
lower <- c(-5, -100)
upper <- c(100, 5)
opt <- pso(fn = fn,
lower = lower, upper = upper,
a = 20, b = 0.2)
print(opt$par)
## Consider Bukin function number 6
fn <- function(x, a = 20, b = 0.2)
{
val <- 100 * sqrt(abs(x[2] - 0.01 * x[1] ^ 2)) + 0.01 * abs(x[1] + 10)
return(val)
}
# Minimize this function using initially provided
# position for one of the particles
set.seed(777)
lower <- c(-15, -3)
upper <- c(-5, 3)
opt <- pso(fn = fn,
pop.init = c(8, 2),
lower = lower, upper = upper,
is.max = FALSE)
print(opt$par)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.