I'm new in R.
I'm trying to simulate queueing with simmer.
I want to enable Renege from "Typhon" to "Tornado". BUT my code creates a new trajectory to "Tornado" and what I need is just one "Torando" trajectory. (see picture below).
My question is how to enable Renge to an existing trajectory? (in my case is from "Typhon" to "Tornado")
This is my code and Plot :
##----------------------------------------- 1. all functions ------------------------------------------------
## add service
addService<- function (path,sname,timeDist){
updatedPath <- seize(path, resource = sname, amount = 1)%>%
timeout(timeDist) %>%
release(resource = sname, amount = 1)
return(updatedPath)
}
##abound function
addServiceRenge<- function (trajectory,sname,timeDist,renegDist, continueTo){
updatedPath <- renege_in(trajectory,renegDist,out= continueTo %>% log_("I left angry!") )%>%
seize(resource = sname, amount = 1)%>%
renege_abort()%>%
timeout(timeDist) %>%
release(resource = sname, amount = 1)
return(updatedPath)
}
##----------------------------------------- 2. all simulation parameters ------------------------------------------------
set.seed(654)
simulationTime <- 7*60
openTime<-rnorm(1,17,3)
gate_schedule<-schedule(timetable = c(0, openTime), values = c(0, Inf), period = Inf)
##----------------------------------------- 3. Init Simulation and add all resources ------------------------------------------------
bravePool<-simmer("brave pool")%>%
add_resource("DoorMan",capacity=gate_schedule,queue_size=Inf)%>%
add_resource(name="Staris",capacity=1,queue_size=Inf)%>%
add_resource(name="Tornado",capacity=1,queue_size=Inf)%>%
add_resource(name="Typhon",capacity=1,queue_size=Inf)%>%
add_resource(name="Hurrican",capacity=1,queue_size=Inf)
##----------------------------------------- 4. All trajectories, start from main trajectory and add sub-trajectories ABOVE IT it . ------------------------------------------------
swimmerToHurrican <- trajectory("to hurrican")%>%
addService(sname = "Hurrican", timeDist = function() rexp(1,0.25))
swimmerToTornado <- trajectory("to tornado")%>%
addService(sname = "Tornado", timeDist = function() dtriangle(1, min = 0.1, max = 0.5, mode = 0.5) )
swimmerToTyphon <- trajectory("to typhon")%>%
addServiceRenge(sname = "Typhon", timeDist = function() rnorm(1,3,1), renegDist = function() runif(1,2,4), continueTo = swimmerToTornado)
swimmer<-trajectory("swimmer's path") %>%
addService(sname = "DoorMan", timeDist = openTime)%>%
addService(sname = "Staris", timeDist = function() runif(1,3.5,7.5))%>%
branch(option=function() rdiscrete (1, c(0.4,0.061,0.364,0.175),c(0,1,2,3)) ,continue= c(FALSE,FALSE,FALSE),swimmerToTornado,swimmerToTyphon,swimmerToHurrican)
##----------------------------------------- 5. All Generators, ALWAYS LAST. ------------------------------------------------
bravePool%>%
add_generator(name="swimmers",trajectory=swimmer,distribution=function() rexp(1,3.5))
##----------------------------------------- 6. reset, run, plots, outputs ------------------------------------------------
reset(bravePool)%>%run(until=simulationTime)
poolData<-get_mon_arrivals(bravePool, per_resource = T)
plot(swimmer)
Your code is ok, and this is expected. Internally, simmer makes an exact copy of the trajectory (to avoid issues if, for example, you remove the original one), but don't worry about it, it should work as expected.