R中的指数分布模拟
Exponential distribution simulation in R
我有下图:
我被告知以下信息:
(1) 顶点A到顶点X由lambda = 4的指数分布描述;
(2) 顶点A到顶点Y由lambda = 2.5的指数分布描述;
(3) vertex X to vertex Y 等同于vertex Y to vertex X, 并且由lambda = 10的指数分布描述;
(4) 顶点X到顶点B由lambda = 3的指数分布描述;最后,
(5) 顶点 Y 到顶点 B 由 lambda = 5 的指数分布描述。
假设我在每次模拟中都采用顶点之间的最快路径。
我现在想知道从顶点 A 到顶点 B 所需的平均时间。
我的R代码如下:
# Generate/simulate 1000 random numbers for each of the internode paths.
AtoX <- rexp(1000, 4)
AtoY <- rexp(1000, 2.5)
XtoY <- rexp(1000, 10)
XtoB <- rexp(1000, 3)
YtoB <- rexp(1000, 5)
# Length of path from A to X to Y and A to Y to X.
AYX = AtoY + XtoY
AXY = AtoX + XtoY
# Total time of paths from A to B.
AXB = AtoX + XtoB
AYB = AtoY + YtoB
AXYB = AtoX + XtoY + YtoB
AYXB = AtoY + XtoY + XtoB
# Taking the fastest path of all paths.
minAXB = min(AXB)
minAYB = min(AYB)
minAXYB = min(AXYB)
minAYXB = min(AYXB)
# Taking an average of the fastest paths.
averageTravelTime =
mean(minAXB + minAYB + minAXYB + minAYXB)
这看起来正确吗?
这取决于解释,但我会说你需要分别模拟从 X 到 Y 和从 Y 到 X 的时间,尽管速率相同。如果一列火车双向行驶并且平均速度相同,并不意味着从X和Y出发的两列火车将同时到达另一点。
您没有使用
AYX <- AtoY + XtoY
AXY <- AtoX + XtoY
所以它们是多余的。
写成minAXB <- min(AXB)
其实没什么意义。您为每条边模拟 1000 次旅行时间,AXB
是 1000 次路线的矢量 AXB
,现在您选择跨越时间的最短路线..
同样,averageTravelTime
没有意义,因为minAXB + minAYB + minAXYB + minAYXB
只是一个数字,而不是向量。
因此,我认为代码应该是
set.seed(1)
AtoX <- rexp(1000, 4)
AtoY <- rexp(1000, 2.5)
XtoY <- rexp(1000, 10)
YtoX <- rexp(1000, 10) # added
XtoB <- rexp(1000, 3)
YtoB <- rexp(1000, 5)
AXB <- AtoX + XtoB
AYB <- AtoY + YtoB
AXYB <- AtoX + XtoY + YtoB
AYXB <- AtoY + YtoX + XtoB # changed XtoY to YtoX
TravelTimes <- pmin(AXB, AYB, AXYB, AYXB)
averageTravelTime <- mean(TravelTimes)
参见?pmin
。对于每一天,它都会选择最快的旅行时间和 returns 一个长度为 1000 的向量。
作为奖励,以下显示了哪条路线最快的次数
table(apply(cbind(AXB, AYB, AXYB, AYXB), 1, which.min))
# 1 2 3 4
# 317 370 240 73
我有下图:
我被告知以下信息:
(1) 顶点A到顶点X由lambda = 4的指数分布描述;
(2) 顶点A到顶点Y由lambda = 2.5的指数分布描述;
(3) vertex X to vertex Y 等同于vertex Y to vertex X, 并且由lambda = 10的指数分布描述;
(4) 顶点X到顶点B由lambda = 3的指数分布描述;最后,
(5) 顶点 Y 到顶点 B 由 lambda = 5 的指数分布描述。
假设我在每次模拟中都采用顶点之间的最快路径。
我现在想知道从顶点 A 到顶点 B 所需的平均时间。
我的R代码如下:
# Generate/simulate 1000 random numbers for each of the internode paths.
AtoX <- rexp(1000, 4)
AtoY <- rexp(1000, 2.5)
XtoY <- rexp(1000, 10)
XtoB <- rexp(1000, 3)
YtoB <- rexp(1000, 5)
# Length of path from A to X to Y and A to Y to X.
AYX = AtoY + XtoY
AXY = AtoX + XtoY
# Total time of paths from A to B.
AXB = AtoX + XtoB
AYB = AtoY + YtoB
AXYB = AtoX + XtoY + YtoB
AYXB = AtoY + XtoY + XtoB
# Taking the fastest path of all paths.
minAXB = min(AXB)
minAYB = min(AYB)
minAXYB = min(AXYB)
minAYXB = min(AYXB)
# Taking an average of the fastest paths.
averageTravelTime =
mean(minAXB + minAYB + minAXYB + minAYXB)
这看起来正确吗?
这取决于解释,但我会说你需要分别模拟从 X 到 Y 和从 Y 到 X 的时间,尽管速率相同。如果一列火车双向行驶并且平均速度相同,并不意味着从X和Y出发的两列火车将同时到达另一点。
您没有使用
AYX <- AtoY + XtoY AXY <- AtoX + XtoY
所以它们是多余的。
写成
minAXB <- min(AXB)
其实没什么意义。您为每条边模拟 1000 次旅行时间,AXB
是 1000 次路线的矢量AXB
,现在您选择跨越时间的最短路线..同样,
averageTravelTime
没有意义,因为minAXB + minAYB + minAXYB + minAYXB
只是一个数字,而不是向量。
因此,我认为代码应该是
set.seed(1)
AtoX <- rexp(1000, 4)
AtoY <- rexp(1000, 2.5)
XtoY <- rexp(1000, 10)
YtoX <- rexp(1000, 10) # added
XtoB <- rexp(1000, 3)
YtoB <- rexp(1000, 5)
AXB <- AtoX + XtoB
AYB <- AtoY + YtoB
AXYB <- AtoX + XtoY + YtoB
AYXB <- AtoY + YtoX + XtoB # changed XtoY to YtoX
TravelTimes <- pmin(AXB, AYB, AXYB, AYXB)
averageTravelTime <- mean(TravelTimes)
参见?pmin
。对于每一天,它都会选择最快的旅行时间和 returns 一个长度为 1000 的向量。
作为奖励,以下显示了哪条路线最快的次数
table(apply(cbind(AXB, AYB, AXYB, AYXB), 1, which.min))
# 1 2 3 4
# 317 370 240 73