2017-06-26 2 views
0

Je veux être en mesure de modifier la capacité des ressources à l'intérieur de la trajectoire en fonction de la longueur de la file d'attente.laisser mijoter: lire les ressources des fonctions à l'intérieur trajectoire

Le code suivant (simplifié) ne fonctionne pas au-dessous. - Quand je tente d'appeler get_mon_resources(simStore) dans la fonction, le code se bloque avec l'erreur:

Error in run_(private$sim_obj, until) : 
    Expecting a single value: [extent=0]. 

Merci pour votre aide.

simStore <- simmer() 

fUpdateNumberOfCashiers <- function() { 
    dtLastRes <- simStore %>% get_mon_resources %>% tail(1) 
    nCapacityNow <- dtLastRes$capacity # same result with get_capacity(simStore), 
    nQueueNow <- dtLastRes$queue  # same result with get_queue_count(simStore) 
    print(dtLastRes)     # prints empty data-frame ! 
    return (5) # crashes here ! (eventually 5 will be replaced with more meaningful formula 
} 

trajClient <- trajectory("Client's path") %>%  
    log_("Arrived to cashier") %>% 
    set_capacity("Cashier", value = fUpdateNumberOfCashiers) %>% 
    seize("Cashier") %>% 
    timeout(function() {rexp(1, 30)}) %>% # One Cashier processes 30 clients/hour 
    release("Cashier") %>% 
    log_(function(attr) { sprintf("In total spent %.2f", now(simStore) - attr["start_time"])}) 

simStore <- simmer("Store") %>% 
    add_resource("Cashier", 1) %>% 
    add_generator("Store Clients", trajClient, function() {rexp(1, 120)}) %>% # 120 clients/hour 
    run(until=nHoursObserved <- 1) ; simStore 

Répondre

0

Voir la discussion relative à la résolution de ce problème: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/simmer-devel/NgIikOpHpss

Quelles sont les causes du problème est que les autres paquets (lubridate) masques objets de « laisser mijoter », comme on le voit écrit ci-dessous:

Attaching package: ‘lubridate’ 
The following objects are masked from ‘package:simmer’: 
     now, rollback 

Une fois que je l'ai remplacé

library(simmer); library(lubridate); 

avec

library(lubridate); library(simmer); 

Le problème a disparu!