Skip to content

Commit

Permalink
close #66: enable set_capacity and set_queue_size
Browse files Browse the repository at this point in the history
  • Loading branch information
Enchufa2 committed Jun 21, 2016
1 parent 5666466 commit e6a49a0
Show file tree
Hide file tree
Showing 26 changed files with 235 additions and 59 deletions.
2 changes: 2 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ export(seize)
export(seize_selected)
export(select)
export(set_attribute)
export(set_capacity)
export(set_queue_size)
export(simmer)
export(timeout)
export(to)
Expand Down
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* Batched generation: the generation function can return more than one interarrival value at a time (#65).
* Add the option `queue_size_strict` to `add_resource` to guarantee the queue size limit with preemption (#59).
* New `select`, `seize_selected` and `release_selected` activities (#52).
* Modify resources (capacity, queue size) from inside a trajectory (#66).

## Minor changes and fixes:

Expand Down
8 changes: 8 additions & 0 deletions R/RcppExports.R
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,18 @@ get_n_generated_ <- function(sim_, name_) {
.Call('simmer_get_n_generated_', PACKAGE = 'simmer', sim_, name_)
}

set_capacity_ <- function(sim_, name_, value_) {
invisible(.Call('simmer_set_capacity_', PACKAGE = 'simmer', sim_, name_, value_))
}

get_capacity_ <- function(sim_, name_) {
.Call('simmer_get_capacity_', PACKAGE = 'simmer', sim_, name_)
}

set_queue_size_ <- function(sim_, name_, value_) {
invisible(.Call('simmer_set_queue_size_', PACKAGE = 'simmer', sim_, name_, value_))
}

get_queue_size_ <- function(sim_, name_) {
.Call('simmer_get_queue_size_', PACKAGE = 'simmer', sim_, name_)
}
Expand Down
88 changes: 69 additions & 19 deletions R/simulator.R
Original file line number Diff line number Diff line change
Expand Up @@ -222,12 +222,28 @@ Simmer <- R6Class("simmer",
get_n_generated_(private$sim_obj, evaluate_value(name))
},

get_capacity = function(name) {
set_capacity = function(name, value) {
name <- evaluate_value(name)
value <- evaluate_value(value)
value <- replace(value, value==Inf, -1)
set_capacity_(private$sim_obj, name, value)
self
},

get_capacity = function(name) {
ret <- get_capacity_(private$sim_obj, evaluate_value(name))
if (ret < 0) ret <- Inf
ret
},

set_queue_size = function(name, value) {
name <- evaluate_value(name)
value <- evaluate_value(value)
value <- replace(value, value==Inf, -1)
set_queue_size_(private$sim_obj, name, value)
self
},

get_queue_size = function(name) {
ret <- get_queue_size_(private$sim_obj, evaluate_value(name))
if (ret < 0) ret <- Inf
Expand Down Expand Up @@ -266,7 +282,7 @@ Simmer <- R6Class("simmer",
#' \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
#'
#' @examples
Expand Down Expand Up @@ -307,7 +323,7 @@ simmer <- function(name="anonymous", verbose=FALSE) Simmer$new(name, verbose)
#' \link{simmer}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
reset <- function(env) env$reset()

Expand All @@ -322,7 +338,7 @@ reset <- function(env) env$reset()
#' \link{simmer}, \link{reset}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
now <- function(env) env$now()

Expand All @@ -339,7 +355,7 @@ now <- function(env) env$now()
#' \link{simmer}, \link{reset}, \link{now}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
peek <- function(env, steps=1, verbose=FALSE) env$peek(steps, verbose)

Expand All @@ -354,7 +370,7 @@ peek <- function(env, steps=1, verbose=FALSE) env$peek(steps, verbose)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
onestep <- function(env) env$step()

Expand All @@ -370,7 +386,7 @@ onestep <- function(env) env$step()
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
run <- function(env, until=1000) env$run(until)

Expand Down Expand Up @@ -402,7 +418,7 @@ run <- function(env, until=1000) env$run(until)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
add_resource <- function(env, name, capacity=1, queue_size=Inf, mon=TRUE, preemptive=FALSE,
preempt_order=c("fifo", "lifo"), queue_size_strict=FALSE)
Expand All @@ -424,7 +440,7 @@ add_resource <- function(env, name, capacity=1, queue_size=Inf, mon=TRUE, preemp
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
add_generator <- function(env, name_prefix, trajectory, dist, mon=1)
env$add_generator(name_prefix, trajectory, dist, mon)
Expand All @@ -441,7 +457,7 @@ add_generator <- function(env, name_prefix, trajectory, dist, mon=1)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
get_mon_arrivals <- function(envs, per_resource=FALSE)
envs_apply(envs, "get_mon_arrivals", per_resource)
Expand All @@ -457,7 +473,7 @@ get_mon_arrivals <- function(envs, per_resource=FALSE)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
get_mon_attributes <- function(envs) envs_apply(envs, "get_mon_attributes")

Expand All @@ -473,7 +489,7 @@ get_mon_attributes <- function(envs) envs_apply(envs, "get_mon_attributes")
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
get_mon_resources <- function(envs, data=c("counts", "limits")) envs_apply(envs, "get_mon_resources", data)

Expand All @@ -489,13 +505,30 @@ get_mon_resources <- function(envs, data=c("counts", "limits")) envs_apply(envs,
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
get_n_generated <- function(env, name) env$get_n_generated(name)

#' Set the capacity
#'
#' Sets a resource's capacity by name.
#'
#' @param env the simulation environment.
#' @param name the name of the resource.
#' @param value new capacity.
#'
#' @return Returns the simulation environment.
#' @seealso Other methods for dealing with a simulation environment:
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
set_capacity <- function(env, name, value) env$set_capacity(name, value)

#' Get the capacity
#'
#' Gets the capacity of a resource by name.
#' Gets a resource's capacity by name.
#'
#' @param env the simulation environment.
#' @param name the name of the resource.
Expand All @@ -505,13 +538,30 @@ get_n_generated <- function(env, name) env$get_n_generated(name)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_queue_size},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
get_capacity <- function(env, name) env$get_capacity(name)

#' Set the queue size
#'
#' Sets a resource's queue size by name.
#'
#' @param env the simulation environment.
#' @param name the name of the resource.
#' @param value new queue size.
#'
#' @return Returns the simulation environment.
#' @seealso Other methods for dealing with a simulation environment:
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{set_capacity}, \link{get_server_count}, \link{get_queue_count}.
#' @export
set_queue_size <- function(env, name, value) env$set_queue_size(name, value)

#' Get the queue size
#'
#' Gets the queue size of a resource by name.
#' Gets a resource's queue size by name.
#'
#' @param env the simulation environment.
#' @param name the name of the resource.
Expand All @@ -521,7 +571,7 @@ get_capacity <- function(env, name) env$get_capacity(name)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity},
#' \link{get_server_count}, \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}, \link{get_queue_count}.
#' @export
get_queue_size <- function(env, name) env$get_queue_size(name)

Expand All @@ -537,7 +587,7 @@ get_queue_size <- function(env, name) env$get_queue_size(name)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_queue_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_queue_count}.
#' @export
get_server_count <- function(env, name) env$get_server_count(name)

Expand All @@ -553,6 +603,6 @@ get_server_count <- function(env, name) env$get_server_count(name)
#' \link{simmer}, \link{reset}, \link{now}, \link{peek}, \link{onestep}, \link{run},
#' \link{add_resource}, \link{add_generator}, \link{get_mon_arrivals}, \link{get_mon_attributes},
#' \link{get_mon_resources}, \link{get_n_generated}, \link{get_capacity}, \link{get_queue_size},
#' \link{get_server_count}.
#' \link{set_capacity}, \link{set_queue_size}, \link{get_server_count}.
#' @export
get_queue_count <- function(env, name) env$get_queue_count(name)
1 change: 0 additions & 1 deletion TODO
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
- split resource into queue and server (release 4.0.0?)
- split the package into core and graphics (release 4.0.0?)
- start/stop a generator from inside a trajectory
- modify resources from inside a trajectory
- implement a parallel branch activity
- del_generator, del_resource?
- add[del]_container (see simpy.resources.container)
Expand Down
2 changes: 1 addition & 1 deletion man/add_generator.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/add_resource.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions man/get_capacity.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_mon_arrivals.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_mon_attributes.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_mon_resources.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_n_generated.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_queue_count.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions man/get_queue_size.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/get_server_count.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/now.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/onestep.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion man/peek.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit e6a49a0

Please sign in to comment.