gpt4 book ai didi

c++ - R 和 Simmer : Performance boost on large data frames

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:50 27 4
gpt4 key购买 nike

我有自己的关于实际事件/任务的数据框,我使用 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 数据集,这就是我的模拟花费更多时间的地方。

头(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

My CPU

有没有办法提高我的模拟能力?我使用 simmer 4.1.0 和 Rcpp 1.0.0。内存似乎不是问题。

最佳答案

我拿了你的表并简单地复制它来构建 100k 和 400k 数据集,我确认了这个问题:执行时间不是线性的。

在内部,属性总是double,所以有很多转换,逐行,这显然占用了大部分执行时间(!)。在将表格输入 simmer 之前尝试转换表格。使用 dplyr,

task_df <- mutate_all(task_df, as.double)

模拟应该更快,并且增加行数的执行时间应该或多或少线性增长。很明显为什么这么多转换会降低性能,但我不确定为什么它会使执行时间非线性。

无论如何,在未来的版本中,我们可能希望自动应用它,这样用户就不必担心这些性能问题。

关于c++ - R 和 Simmer : Performance boost on large data frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53283052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com