Simmer中delayed_release_selected报错:no resource selected求助
解决Simmer中
delayed_release_selected报错的问题 错误原因
你遇到的no resource selected报错,核心问题是**delayed_release_selected的task参数使用错误**:该参数要求传入一个轨迹对象(trajectory),而非数值。你传入task = 1会导致函数无法识别执行逻辑,进而丢失选中资源的上下文,触发报错。
修正方案(按需求选择)
方案1:先执行冷却任务再释放资源
如果你的需求是在释放资源前完成冷却(冷却期间资源仍被占用),只需将task参数改为合法的轨迹对象即可:
arrive <- c(1:5) traj <- trajectory("traj") %>% simmer::select(resource = c("dedicated_resource","pooled_resource"), policy = "first-available") %>% seize_selected(amount = 1) %>% timeout(1) %>% # 服务处理时间 # 将task改为包含冷却逻辑的轨迹 delayed_release_selected(task = trajectory() %>% timeout(1)) sim <- simmer("sim") %>% add_generator("cust", traj, at(arrive), mon = 2) %>% add_resource("dedicated_resource", 2) %>% add_resource("pooled_resource", 2) sim %>% run(until = 800)
方案2:释放资源后再让服务器冷却(冷却期间服务器不可用)
如果你的需求是资源释放后,服务器需要冷却一段时间才能再次接收任务,需要通过动态调整资源容量实现:
arrive <- c(1:5) traj <- trajectory("traj") %>% simmer::select(resource = c("dedicated_resource","pooled_resource"), policy = "first-available") %>% seize_selected(amount = 1) %>% timeout(1) %>% # 服务处理时间 release_selected(amount = 1) %>% # 临时降低选中资源的容量(减少可用服务器数量) set_capacity(selected = TRUE, value = function() { get_capacity(env, get_selected(env)) - 1 }) %>% timeout(1) %>% # 冷却时长 # 恢复资源容量 set_capacity(selected = TRUE, value = function() { get_capacity(env, get_selected(env)) + 1 }) sim <- simmer("sim") %>% add_generator("cust", traj, at(arrive), mon = 2) %>% add_resource("dedicated_resource", 2) %>% add_resource("pooled_resource", 2) sim %>% run(until = 800)
说明
- 方案1的逻辑是:服务完成后先执行冷却任务,再释放资源,冷却期间该资源实例处于占用状态。
- 方案2的逻辑是:服务完成后立即释放资源,然后将该资源的可用容量临时减1,冷却结束后恢复容量,实现服务器冷却效果。
内容的提问来源于stack exchange,提问作者rwhit
相关产品推荐
相关产品推荐

