pricefit {ecolMod} | R Documentation |
Pseudo-random search algorithm of Price (1997). Used in the book as an example of a random-based fitting technique, and as an example of how to create a function in R.
pricefit(par, minpar=rep(-1e8,length(par)), maxpar=rep(1e8,length(par)), func, npop=max(5*length(par),50), numiter=10000, centroid = 3, varleft = 1e-8,...)
par |
initial values of the parameters to be optimised |
minpar |
minimal values of the parameters to be optimised |
maxpar |
maximal values of the parameters to be optimised |
func |
function to be minimised, its first argument should bw the vector of parameters over which minimization is to take place. It should return a scalar result, the model cost, e.g the sum of squared residuals. |
npop |
number of elements in population |
numiter |
number of iterations to be performed. Defaults to 10000. There is no other stopping criterion. |
centroid |
number of elements from which to estimate new parameter vector |
varleft |
relative variation remaining; if below this value algorithm stops |
... |
arguments passed to funtion func |
see the book of Soetaert and Herman for a description of the algorithm AND for a line to line explanation of the function code.
a list containing:
par |
the optimised parameter values |
cost |
the model cost, or function evaluation associated to the optimised parameter values, i.e. the minimal cost |
poppar |
all parameter vectors remaining in the population, matrix of dimension (npop,length(par)) |
popcost |
model costs associated with all population parameter vectors, vector of length npop |
Karline Soetaert <k.soetaert@nioo.knaw.nl>
Soetaert, K. and P.M.J. Herman, 2009. A Practical Guide to Ecological Modelling. Using R as a Simulation Platform. Springer, 372 pp.
Price, W.L., 1977. A controlled random search procedure for global optimisation. The Computer Journal, 20: 367-370.
optim
the R default.
pricefit # will display the code amp <- 6 period <- 5 phase <- 0.5 x <- runif(20)*13 y <- amp*sin(2*pi*x/period+phase) +rnorm(20,mean=0,sd=0.05) plot(x,y,pch=16) cost <- function(par) sum((par[1]*sin(2*pi*x/par[2]+par[3])-y)^2) p1 <- optim(par=c(amplitude=1,phase=1,period=1), cost) p2 <- optim(par=c(amplitude=1,phase=1,period=1), cost,method="SANN") p3 <- pricefit(par=c(amplitude=1,phase=1,period=1),minpar=c(0,1e-8,0), maxpar=c(100,2*pi,100), func=cost,numiter=3000) curve(p1$par[1]*sin(2*pi*x/p1$par[2]+p1$par[3]),lty=2,add=TRUE) curve(p2$par[1]*sin(2*pi*x/p2$par[2]+p2$par[3]),lty=3,add=TRUE) curve(p3$par[1]*sin(2*pi*x/p3$par[2]+p3$par[3]),lty=1,add=TRUE) legend ("bottomright",lty=c(1,2,3),c("Price","Mathematical","Simulated annealing"))