[R-sig-dyn-mod] event location in simecol and discrete event, process based simulation
Thomas Petzoldt
Thomas.Petzoldt at tu-dresden.de
Fri Sep 3 18:22:38 CEST 2010
Hi José!
On 03.09.2010 16:58, jose romero wrote:
> Hello list:
>
> Regarding the example of a bouncing ball with event location (see
> bellow), how would it be implemented with simecol? Specifically, how
> do you "pass" the event location (be it "root finding" as in the
> example, or as a data-frame "schedule" described in lsodar) to the
> solver slot in an ode simecol object?
The implementation of such a model is straightforward if you define a
user-specified solver function. This can either a function in the user
workspace that is then referenced by its name (as character string) in
the solver slot or you assign the specific solver directly as in the
example below.
The same applies to the root function and the event function. They can
be either defined globally in the user workspace or as local functions
in the solver slot. Be careful to use consistent naming of the
arguments, either (time, init) or (t, y), both versions are possible.
Note also that the animation is carried out afterwards as it would be
rather inefficient to interrupt the ode solver, though this would also
be possible by using events.
> My other question is about discrete event simulation. I use R for
> most of my simulation course. However, when I come to the topic of
> discrete event simulation through the process approach, I have to use
> SimPy, which means switching to Python. In a bank queue, for example,
> the servers and clients are implemented as processes running
> concurrently and passing messages to each other, without having to
> schedule which events come before others. Is there a possibility of
> extending simecol to do such process based discrete event simulation?
> Or is it too far out of the simecol simulation object framework (the
> sim object templates)?
I think it is possible, at least in a quasi-parallel manner by using
vectorized computations. If you have a simple model example for this we
may try to implement it.
> Thanks and regards,
>
> josé romero
Hope it helps,
Thomas Petzoldt
###############################
## bouncing ball in simecol
###############################
library(simecol)
ballode <- new("odeModel",
main = function (t, y, parms) {
dy1 <- y[2]
dy2 <- -9.8
list(c(dy1, dy2))
},
parms = 0,
times = seq(0, 40, 0.01),
init = c(height = 0, v = 20),
solver = function(t, y, func, parms) {
root <- function(t, y, parms) y[1]
event <- function(t, y, parms) {
y[1] <- 0
y[2] <- -0.9 * y[2]
return(y)
}
lsodar(t, y, func, parms = NULL,
events = list(func = event, root = TRUE),
rootfun = root)
}
)
ballode <- sim(ballode)
## animation
o <- out(ballode)
for (i in 1:length(times(ballode)))
plot(1, o[i, 2], col="red", cex=2, pch=16, ylim=c(0,20))
## it would be also possible to derive a special class
## and use a class specific plot method ...
## The default plot function plots the time series of states
plot(ballode)
More information about the R-sig-dynamic-models
mailing list