[R-sig-dyn-mod] No response of FME::modFit() for parameter estimation
Tom Shatwell
tom@@h@twe|| @end|ng |rom u|z@de
Tue Aug 4 16:59:38 CEST 2020
Hello everybody,
I hope this issue is not too obscure, but I am quite stuck: I am having
trouble calibrating a dynamic model using the modFit() function in
package FME, and would like to ask for your advice. The model simulates
the effect of moonlight on a lake foodweb in a 1-d water column. The
model itself is written in compiled Fortran and is solved using lsoda in
deSolve & reacTran packages. I am using modFit() to search for optimal
parameter values on a high performance cluster using serial (not
parallel) processing. The processing time for a simulation is about 5
minutes, and I can see that the function is working, and iterations are
being performed by modFit for about an hour, but afterwards there is no
further activity until the run is automatically killed after 5 days
without any error. I am trying to fit 7 parameters, the collin()
function gives a collinearity value of 19 and I have set parameter
bounds for fitting that I think will not allow the model to crash. I
have paraphrased the relevant parts of the code below. I would be very
grateful if somebody could give me a tip on why modFit seems to freeze
and how to fix it.
Thanks and cheers,
Tom
library(reacTran)
library(FME)
system(paste0("R CMD SHLIB ",DLLname,".f"))
run_simulation <- function(parameters, simulation_times, timestep,
initial_conditions, forcings,other_stuff, ...) {
# calculate simulation times
# prepare forcing data
# initial state
# simulation
dyn.load(paste0(DLLname, .Platform$dynlib.ext))
out <- ode.1D(y=y, times=times, func = "simderivs",
parms = parameters, dllname = DLLname,
initforc = "simforc", forcings = Iforc,
initfunc = "siminit", nout = nout, nspec=nspec,
outnames = c("ztarget","secchi","Pm","Zm","Fm","u","j","m"),
method="lsoda", ...)
dyn.unload(paste0(DLLname, .Platform$dynlib.ext))
return(list(out=out, etc))
}
# function to simulate to steady state & find initial conds ------------
# this finds the start values from the prev lunar cycle
warmup_simulation <- function(parameters, simulation_times, timestep,
initial_conditions, forcings, tol) {
# calls run_simulation(...) in a while loop until steady state is reached
return(out)
}
# function to run scenarios -----------------------------------------------
# This also saves the interim results as a binary file,
# which is why I can tell whether simulations are being performed.
run_scenario <- function(parameters, simulation_times, timestep,
initial_conditions, forcings, other_stuff, ...) {
warmup <- warmup_simulation(...)
res <- run_simulation(..., initial_conditions=warmup[nrow(warmup),])
saveRDS(res, file = paste0(filename,".rds"))
return(res)
}
# function for parameter fitting
fitfunc <- function(parameters, simulation_times, timestep,
initial_conditions, forcings, observed_data, output_filename,
other_stuff) {
out <- run_scenario(parameters, ...)
# compare model output with observed data, calculate residuals
return(residuals)
}
# this is where the problem occurs
# initial fits with Pseudo random walk to locate minimum vicinity
fit <- modFit(f = fitfunc, p = parameters, lower=lower, upper=upper,
method="Pseudo", control=list(numiter=50), ...)
# levenberg-marquardt algorithm to locate minimum more precisely
fit <- modFit(f = fitfunc, p = coef(fit), lower=lower, upper=upper,
method="Marq", control=list(maxiter=20), ...)
> sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
Matrix products: default
BLAS/LAPACK:
/gpfs0/global/software/easybuild-broadwell/software/Compiler/GCC/7.3.0-2.30/OpenBLAS/0.3.1/lib/libopenblas_haswellp-r0.3.1.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.1
--
------------------------------------------------------------------------------------------
Dr. Tom Shatwell
Researcher
Department of Lake Research
Helmholtz-Zentrum für Umweltforschung GmbH - UFZ
Helmholtz Centre for Environmental Research GmbH - UFZ
Brueckstr. 3a, 39114, Magdeburg, Germany
Phone +49 391 810 9440, Fax +49 391 810 9150
tom.shatwell using ufz.de, www.ufz.de
Sitz der Gesellschaft/Registered Office: Leipzig
Registergericht/Registration Office: Amtsgericht Leipzig
Handelsregister Nr./Trade Register Nr.: B 4703
Vorsitzende des Aufsichtsrats/Chairwoman of the Supervisory Board: MinDirig'in Oda Keppler
Wissenschaftlicher Geschäftsführer/Scientific Managing Director: Prof. Dr. Georg Teutsch
Administrative Geschäftsführerin/Administrative Managing Director: Dr. Sabine König
Vermeiden Sie unnötige Ausdrucke./Think before printing.
More information about the R-sig-dynamic-models
mailing list