【发布时间】:2018-11-13 14:18:26
【问题描述】:
我有自己的关于实际事件/任务的数据框,我使用 simmer r 包来模拟在不同资源可用的情况下可以完成多少任务。我的模拟在我的数据框中运行得非常快,最多可达 120.000 行。
rm(list=ls())
library(dplyr)
library(simmer)
library(simmer.plot)
load("task_df.RDATA")
working_hours <- 7.8
productivity <- 0.7
no.employees <- 292
SIM_TIME <- round((working_hours*productivity*60), 0)+1
employees <- vector("character")
for (i in 1:no.employees) {
employees[i] <- paste("employee", i, sep="_")
}
taskTraj <- trajectory(name = "tasK simulation") %>%
simmer::select(resources = employees, policy = "shortest-queue") %>%
seize_selected(amount = 1) %>%
timeout_from_attribute("duration") %>%
release_selected(amount = 1)
arrivals_gen <- simmer()
for (i in 1:no.employees) {arrivals_gen %>%
add_resource(paste("employee", i, sep="_"), capacity = 1)
}
ptm <- proc.time()
arrivals_gen <- arrivals_gen %>%
add_dataframe("Task_", taskTraj, task_df, mon = 2, col_time = "time", time = "absolute", col_priority="priority") %>%
run(SIM_TIME)
proc.time() - ptm
但是我的数据框 tasK_df 包含 350k 数据集,这就是我的模拟需要更多时间的地方。
head(task_df, n = 50)
workload_shift task_id duration priority time
1 20180403 68347632 3 2.502 0
2 20180403 68151881 10 24.478 0
3 20180403 68069718 3 0.724 0
4 20180403 68345621 4 2.226 0
5 20180403 68508858 3 36.062 0
6 20180403 66148996 3 9.421 0
7 20180403 68565066 2 24.478 0
8 20180403 68005344 3 7.910 0
9 20180403 55979902 3 3.732 0
10 20180403 66452138 2 2.502 0
11 20180403 68051869 10 2.226 0
12 20180403 68561364 10 3.584 0
13 20180403 59292591 3 2.138 0
14 20180403 68415657 10 2.853 0
15 20180403 66848400 3 2.290 0
16 20180403 68454851 10 6.167 0
17 20180403 68361846 10 11.688 0
18 20180403 68572723 2 6.259 0
19 20180403 68520328 2 24.478 0
20 20180403 68500955 10 1.855 0
21 20180403 67000753 3 219.751 0
22 20180403 68487613 3 8.131 0
23 20180403 68333674 4 5.263 0
24 20180403 66423486 3 2.290 0
25 20180403 68241616 5 1.470 0
26 20180403 68415001 4 3.584 0
27 20180403 67487967 3 2.636 0
28 20180403 68494771 10 6.259 0
29 20180403 67673981 10 2.226 0
30 20180403 68355727 3 2.613 0
31 20180403 36942995 3 0.590 0
32 20180403 66633446 3 5.968 0
33 20180403 68461510 2 24.478 0
34 20180403 67126138 3 0.357 0
35 20180403 68485682 3 8.131 0
36 20180403 67852953 10 2.290 0
37 20180403 68150106 10 6.259 0
38 20180403 67833053 10 4.114 0
39 20180403 67816673 3 6.259 0
40 20180403 68041431 5 2.502 0
41 20180403 66283761 5 2.502 0
42 20180403 68543314 2 26.302 0
43 20180403 68492843 3 2.290 0
44 20180403 68556960 4 2.853 0
45 20180403 66885335 3 5.975 0
46 20180403 66249231 5 2.636 0
47 20180403 68242565 12 1.470 0
48 20180403 68530355 2 2.290 0
49 20180403 66683717 5 5.705 0
50 20180403 67802538 4 0.864 0
用户系统已过
76.745 0.039 76.717
对
用户系统已过 608.443 0.270 608.186
有没有办法提高我的模拟效果?我使用 simmer 4.1.0 和 Rcpp 1.0.0。内存似乎不是问题。
【问题讨论】:
-
根据您上面的代码,我尝试了具有 100k 和 1M 观察值(带有随机数据)的数据帧,我没有发现性能问题(即,1M 需要 x10 的时间,100k 行的时间,正如预期的那样)。你能提供一个可重现的例子吗?
-
@IñakiÚcar 提前感谢您的快速回复。我已经更新了上面的代码 sn-p 以给出一个可重现的示例。
标签: c++ r simulation