Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Simmer构建特定模型_R_Simulation - Fatal编程技术网

使用Simmer构建特定模型

使用Simmer构建特定模型,r,simulation,R,Simulation,我有关于实际事件的数据,我需要对如果不同资源可用可能发生的情况进行建模。下一个阶段将是建立一个“适当”的模拟,其中事件和时间的创建更加随机。我的问题是,我无法确定如何确保一个特定的活动被分配到它在现实生活中拥有的开始时间、优先级和超时时间 library(simmer) set.seed(654) env <- simmer() workerCount <- 2 actualData <- data.frame(arrTime = c(1:10,1:5), priority

我有关于实际事件的数据,我需要对如果不同资源可用可能发生的情况进行建模。下一个阶段将是建立一个“适当”的模拟,其中事件和时间的创建更加随机。我的问题是,我无法确定如何确保一个特定的活动被分配到它在现实生活中拥有的开始时间、优先级和超时时间

library(simmer)
set.seed(654)
env <- simmer()
workerCount <- 2

actualData <- data.frame(arrTime = c(1:10,1:5), 
priority = 1:3, duration = rnorm(15, 50, 5))

activityTraj <- trajectory() %>%
seize('worker') %>%
timeout(5) %>%
release('worker')

env %>%
add_resource('worker', workerCount, Inf, preemptive = TRUE) %>%
add_generator('worker', activityTraj, at(actualData$arrTime), 
mon = 2, priority = 2)

env %>% run(50)
library(simmer)
种子(654)
环境%
添加资源('worker',workerCount,Inf,preemptive=TRUE)%>%
在(实际数据$arrTime)处添加发电机('worker',activityTraj),
mon=2,优先级=2)
环境%>%运行(50)

在上面我需要做的是使生成器中的优先级从数据帧读取(当前硬编码为2),并且轨迹中的超时(当前硬编码为5)也从数据帧读取。我不知道如何确保指定活动优先级和时间的行也将用于指定持续时间(或“超时”)

首先,您必须确保您的
实际数据
帧按
到达时间
排序:

actualData <- data.frame(arrTime = c(1:10,1:5), 
                         priority = 1:3, 
                         duration = rnorm(15, 50, 5)) %>%
  dplyr::arrange(arrTime)
可应用于您的轨迹,如下所示:

activityTraj <- trajectory() %>%
  set_prioritization(consume(actualData$priority, TRUE)) %>%
  set_attribute("duration", consume(actualData$duration)) %>%
  seize('worker') %>%
  timeout(function(attr) attr["duration"]) %>%
  release('worker')
并检查实际持续时间是否正常:

activity_time <- get_mon_arrivals(env) %>%
  tidyr::separate(name, c("prefix", "n"), convert=TRUE) %>%
  dplyr::arrange(n) %>%
  dplyr::pull(activity_time)

all(activity_time == actualData$duration)
#> TRUE

首先,您必须确保您的
actualData
帧按
arrTime
排序:

actualData <- data.frame(arrTime = c(1:10,1:5), 
                         priority = 1:3, 
                         duration = rnorm(15, 50, 5)) %>%
  dplyr::arrange(arrTime)
可应用于您的轨迹,如下所示:

activityTraj <- trajectory() %>%
  set_prioritization(consume(actualData$priority, TRUE)) %>%
  set_attribute("duration", consume(actualData$duration)) %>%
  seize('worker') %>%
  timeout(function(attr) attr["duration"]) %>%
  release('worker')
并检查实际持续时间是否正常:

activity_time <- get_mon_arrivals(env) %>%
  tidyr::separate(name, c("prefix", "n"), convert=TRUE) %>%
  dplyr::arrange(n) %>%
  dplyr::pull(activity_time)

all(activity_time == actualData$duration)
#> TRUE