我正试图解决一个关于电话模拟的非常直接的问题。我可以只引入所有数据并编写一个非常冗长和混乱的代码,但我正在尝试使用图形来解决它,也许是R上的“igraph”包(或类似的东西),但我以前从未使用它。
为了简单起见,我想打电话从纽约到莫斯科并到达莫斯科,信号可以通过不同概率的3个城市:
信号在城市之间传播的时间遵循正态分布。为简单起见,请说所有时间都遵循标准的正态分布。因此,例如,该标志使用0.2分钟从伦敦前往莫斯科。
所以,我有这样的想法:
http://i.imgur.com/X4WnyxO.jpg
边缘上的数字是信号将遵循该路径的概率。
现在,我必须多次模拟信号的行程,并说出从纽约到莫斯科所需的平均时间。
我的问题是如何编程这个问题,因为我不知道如何在边缘上获得两个权重,而且我不知道如何遍历顶点。
你能给我的任何建议都会非常有帮助。
答案 0 :(得分:0)
一种方法是使用蒙特卡罗模拟。下面的示例只是为了让您入门。
假设您有三个城市,L,P和B.呼叫路由分别为(0.2,0.3,0.5)。呼叫通过给定城市所花费的时间通常是均值分布,取决于城市,标准差= 1(例如,毫秒)。在这个例子中,我将L,P,B的平均时间分别定义为(30 ms,20 ms,10 ms)。这就是关于定义穿越城市所需时间的评论意味着什么。
然后,我们使用下面的代码执行模拟。
Monte.Carlo <- function(df) {
set.seed(1)
path <- sample(df$cities, 1000, p=c(0.2,0.3,0.5), replace=T)
mu <- df[match(path,df$cities),]$t.mean
time <- sapply(mu,function(mu)rnorm(1,mu))
}
par(mfrow=c(3,1))
cities <- c("L","P","B")
t.mean <- c(30,20,10)
df <- data.frame(cities,t.mean)
hist(Monte.Carlo(df), breaks=50, xlim=c(5,35),main="(L,P,B)=(30,20,10)")
t.mean <- c(25,20,15)
df <- data.frame(cities,t.mean)
hist(Monte.Carlo(df), breaks=50, xlim=c(5,35), main="(L,P,B)=(25,20,15)")
t.mean <- c(22,20,18)
df <- data.frame(cities,t.mean)
hist(Monte.Carlo(df), breaks=50, xlim=c(5,35), main="(L,P,B)=(22,20,18)")
模拟过程如下:
path
向量,指示对于1000个呼叫中的每个呼叫,呼叫路由到哪个城市。这是“L”,“P”或“B”的随机向量,其中概率在问题陈述中给出。 df
中的定义将城市“名称”映射为时间。path
中的每次调用,将路由时间计算为具有适当均值的正态分布中的单个随机样本。然后,我们使用不同的平均路由时间定义运行模拟三次。请注意,在第一种情况下,大多数调用大约需要10毫秒。这是因为,根据我们的定义,通过B(erlin)的路由平均需要10ms,平均有50%的呼叫通过柏林。