基于R语言的指数分布模拟:图中顶点间指数分布参数相关问题
R语言实现顶点间指数分布路径模拟
嘿,我来帮你搞定这个R语言下的顶点间指数分布模拟问题。先把已知的边参数理清楚,然后一步步实现模拟逻辑:
已知边的指数分布参数
先把题目里给出的各边速率λ整理好:
- A → X:λ=4
- A → Y:λ=2.5
- X ↔ Y:双向均为λ=10
- X → B:λ=3
- Y → B:题目未指定具体λ,这里我先设为λ=3.5作为示例,你可以根据需求自行修改
1. 理解R中的指数分布生成函数
R里生成指数分布随机数的函数是rexp(n, rate),这里的rate参数正好对应题目里的λ(速率参数),直接调用就行。比如生成1个A→X的随机通行时间,代码就是rexp(1, rate = 4)。
2. 封装边的模拟逻辑
我们可以先定义各边的速率参数,再写一个通用的单边模拟函数,方便后续调用:
# 定义各边的速率λ lambda_ax <- 4 lambda_ay <- 2.5 lambda_xy <- 10 # X与Y双向通行速率相同 lambda_xb <- 3 lambda_yb <- 3.5 # 可根据实际需求修改该值 # 模拟单条边的通行时间 simulate_edge <- function(lambda) { rexp(1, rate = lambda) }
3. 模拟固定路径的总时间
从A到B有多种固定路径可选,比如A→X→B、A→Y→B、A→X→Y→B等,我们可以分别模拟这些路径的总通行时间:
示例:模拟单条固定路径
比如模拟A→X→Y→B的总时间:
sim_path_axyb <- function() { time_ax <- simulate_edge(lambda_ax) time_xy <- simulate_edge(lambda_xy) time_yb <- simulate_edge(lambda_yb) total_time <- time_ax + time_xy + time_yb return(total_time) } # 调用一次查看结果 sim_path_axyb()
批量模拟路径的时间分布
如果想了解某条路径的时间分布规律,可以批量模拟上千次,再用直方图可视化:
# 批量模拟10000次A→X→B路径的时间 n_sim <- 10000 path_axb_times <- replicate(n_sim, { simulate_edge(lambda_ax) + simulate_edge(lambda_xb) }) # 绘制时间分布直方图 hist(path_axb_times, breaks = 30, col = "lightblue", main = "A→X→B路径总时间分布", xlab = "总通行时间")
4. 模拟带随机跳转的路径
如果场景允许在X和Y之间来回跳转后再前往B,我们可以写一个循环模拟这种随机过程(比如在X节点有一定概率跳转去Y,或直接前往B):
sim_random_path <- function(start = "A", end = "B") { current_node <- start total_time <- 0 while(current_node != end) { if(current_node == "A") { # 从A出发随机选择前往X或Y(概率可自定义) choice <- sample(c("X", "Y"), 1, prob = c(0.5, 0.5)) if(choice == "X") { total_time <- total_time + simulate_edge(lambda_ax) current_node <- "X" } else { total_time <- total_time + simulate_edge(lambda_ay) current_node <- "Y" } } else if(current_node == "X") { # 在X节点,选择跳转去Y或直接去B choice <- sample(c("Y", "B"), 1, prob = c(0.3, 0.7)) if(choice == "Y") { total_time <- total_time + simulate_edge(lambda_xy) current_node <- "Y" } else { total_time <- total_time + simulate_edge(lambda_xb) current_node <- "B" } } else if(current_node == "Y") { # 在Y节点,选择跳转去X或直接去B choice <- sample(c("X", "B"), 1, prob = c(0.2, 0.8)) if(choice == "X") { total_time <- total_time + simulate_edge(lambda_xy) current_node <- "X" } else { total_time <- total_time + simulate_edge(lambda_yb) current_node <- "B" } } } return(total_time) } # 模拟一次随机路径的时间 sim_random_path() # 批量模拟并可视化随机路径的时间分布 random_path_times <- replicate(10000, sim_random_path()) hist(random_path_times, breaks = 30, col = "coral", main = "随机路径A→B总时间分布", xlab = "总通行时间")
内容的提问来源于stack exchange,提问作者The Pointer
相关产品推荐
相关产品推荐

