双指数分布模拟:新作业等待时间仿真方法是否正确?
仿真逻辑正确性与代码问题分析
仿真逻辑是否正确?
你的仿真逻辑是正确的。两台CPU独立工作,而指数分布具备无记忆性——无论它们已运行多久,剩余服务时间仍服从原参数的指数分布。新作业的等待时间就是两台CPU中先完成当前作业的时间,也就是两个独立指数随机变量的最小值,用min(cpu1[i], cpu2[i])模拟单次等待时间完全符合场景。
代码存在的错误
语法错误:
else分支里错误嵌套了data.frame:df1 <- rbind(df1, data.frame(waiting_time=data.frame(waiting_time=min(cpu1[i], cpu2[i])))这会让
df1$waiting_time变成嵌套数据框而非数值型向量,后续计算均值时可能报错。低效的循环rbind:用
for循环逐行rbind构建数据框效率极低,n=10000时每次rbind都会复制整个已有数据框,时间复杂度为O(n²),运行速度会很慢。
优化后的代码
无需循环,直接用向量化操作高效完成:
# 生成两组指数分布数据 cpu1 <- rexp(n = 10000, rate = .1) cpu2 <- rexp(n = 10000, rate = .05) # 向量化计算所有等待时间 waiting_times <- pmin(cpu1, cpu2) # 转换为数据框(按需保留) df1 <- data.frame(waiting_time = waiting_times) # 计算均值 mean(df1$waiting_time)
pmin()可直接计算两个向量对应位置的最小值,既避免语法错误,又大幅提升效率。
另外从理论角度,两个独立指数变量(速率λ₁=0.1、λ₂=0.05)的最小值仍服从指数分布,速率为λ₁+λ₂=0.15,理论均值为1/0.15≈6.6667分钟,你仿真得到的均值应接近这个值,可用来验证结果合理性。
内容的提问来源于stack exchange,提问作者user3138594
相关产品推荐
相关产品推荐

