On Tue, 23 Jul 2013, Christof Kluß <ckl...@email.uni-kiel.de> writes:
> Am 23-07-2013 13:20, schrieb Enrico Schumann: > >> On Tue, 23 Jul 2013, Christof Kluß <ckl...@email.uni-kiel.de> writes: >> >>> >>> I have "observations" obs <- (11455, 11536, 11582, 11825, 11900, ...) >>> >>> and a simulation function f(A,B,C,D,E,F), so sim <- f(A,B,C,D,E,F) >>> >>> e.g. sim = c(11464, 11554, 11603, 11831, 11907, ...) >>> >>> now I would like to fit A,B,C,D,E,F such that "obs" and f(A,B,C,D,E,F) >>> match as well as possible. A,..,F should be integers and have bounds. >>> >>> How would you solve this problem without bruteforce in an acceptable time? >>> >> >> >> That depends on what your "simulation function" looks like. Could you >> post a (small) self-contained example? >> >> > > the integer values in the vectors sim and obs are dates > > when I set sim <- f(TS0,TS1,TS2,TB0,TB1,TB2) my A,..,F below > then TS0 and TB0 are depend (and so on) > > > the main thing in f(...) is something like > > for (i in c(1:length(temperature))) { > Temp <- temperature[i] > if (DS < 0) { > DS <- DS + max(Temp-TB0,0) / TS0 > } else if (DS < 1) { > ... date0 <- i > DS <- DS + max(Temp-TB1,0) / TS1 > } else if (DS < 2) { > ... date1 <- i > DS <- DS + max(Temp-TB2,0) / TS2 > } else { > ... date2 <- i > break > } > } > > > this produced a vector sim = c(date0,date1,date2,...) > > > now I would like to minimize RMSE(sim,obs) or something like that > > thx > Christof > > > > for brute force I would do something like > > obs <- ... > act <- 1000 > > for (TS0 in seq(50,100,10)) > for (TS1 in seq(750,850,10)) > for (TS2 in seq(400,600,10)) > for (TB0 in c(5:7)) > for (TB1 in c(5:7)) > for (TB2 in c(4:9)) { > sim <- foosim(dat,TS0,TS1,TS2,TB0,TB1,TB2) > rmse <- sqrt(mean((sim - obs)^2, na.rm = TRUE)) > > if (rmse < act) { > print(paste(rmse,TS0,TS1,TS2,TB0,TB1,TB2)) > act <- rmse > } > } > Sorry, but that is not what I meant by "a (small) self-contained example". In any case, if brute force is feasible -- ie, your function can be evaluated quickly enough and there are no further parameters -- then why not do brute force? (In the NMOF package there is a function 'gridSearch' that allows you to distribute the function evaluations. Disclosure: I am the package author.) If that does not work, you might try a Local Search or one of its variants (see for instance 'LSopt' in the NMOF package). But it is difficult to say anything specific without knowing your actual function. Regards, Enrico -- Enrico Schumann Lucerne, Switzerland http://enricoschumann.net ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.