我想编写一个模拟代码,其中所有到达的项目(A、B、C、...)首先被分解成两部分。Item.subpart1 直接经历 OPERATION1,Item.subpart2 在被 OPERATION2 处理之前被批量收集(大小 = 4)。处理后,我希望重新组装同一项目的所有部分,而不是与其他项目的部分混合(即,来自 A 的 subpart1 仅与来自 A 的 subpart2 一起使用)。
我尝试了并行任务来拆分子部分轨迹,还尝试以 4 的批次收集所有 Items.subparts2。
library(simmer)
library(simmer.plot)
library(simmer.bricks)
items <- LETTERS[1:10]
traj <- function(item) {
trajectory() %>%
visit("operator", 10, 1) %>% # disassemble the incoming item
set_global(paste0("subpart1_", item), 1) %>%
set_global(paste0("subpart2_", item), 1) %>%
set_global("CountSubparts2", mod ="+", 1) %>%
do_parallel(
# OPERATION 1
trajectory() %>%
visit("Machine1", 150, 1) %>%
set_global(paste0("subpart1_", item), 0) %>%
set_global(paste0("subpart1_", item, "_processed"), 1)
,
# OPERATION 2
trajectory() %>%
batch(n = 4, timeout = 0, name = "POOL_PARTS") %>%
separate() %>%
visit("Machine2", 200, 1) %>%
set_global(paste0("subpart2_", item, "_processed"), 1) %>%
set_global("CountSubparts2", 0)
, .env = env, wait = TRUE
) %>%
visit("operator", 10, 1) # reassemble the items
}
env <- simmer()
env %>%
add_resource("operator", 1) %>%
add_resource("Machine1", capacity = 1, queue_size = 0, 2) %>%
add_resource("Machine2", capacity = 1, queue_size = 0, 1)
for (i in items) env %>%
add_generator(i, traj(i), at(0), mon = 2)
env %>% run(1000)
ressources <- get_mon_resources(env)
ressources %>% plot(metric = "utilization")
ressources %>% plot(metric = "usage")
attributs <- env %>% get_mon_attributes()
attributs %>% plot(key = "CountSubparts2")
问题是:首先,我希望 CountSubparts2 增加到 4,然后在 OPERATION 2 之后减少到 0。这里,CountSubparts2 不断增加。其次,我找不到明确告诉 simmer 的方法:“重新组装 subpart1_A_processed 和 subpart2_A_processed。对 B、C 等做同样的事情。”
我错过了什么?
谢谢您的帮助 !