简体   繁体   中英

Exponential Distribution Simulation in R

I have the following graph:

在此输入图像描述

I am told the following information:

(1) vertex A to vertex X is described by an exponential distribution with lambda = 4;

(2) vertex A to vertex Y is described by an exponential distribution with lambda = 2.5;

(3) vertex X to vertex Y identical to vertex Y to vertex X, and it is described by an exponential distribution with lambda = 10;

(4) vertex X to vertex B is described by an exponential distribution with lambda = 3; and, finally,

(5) vertex Y to vertex B is described by an exponential distribution with lambda = 5.

Let's assume that I'm taking the fastest path between vertices every simulation.

I now want to know the average time it takes to get from vertex A to vertex B.

My R code is as follows:

# 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)

Does this look correct? I would appreciate it if people could please take the time to review my code for this problem.

  1. It depends on the interpretation, but I'd say that you need to simulate times from X to Y and from Y to X separately, although with the same rate. If a train goes both ways and on average the speed is the same, it doesn't mean that two trains leaving from X and Y will arrive to the other point in the same time.

  2. You are not using

     AYX <- AtoY + XtoY AXY <- AtoX + XtoY 

    so they are redundant.

  3. Writing minAXB <- min(AXB) doesn't really make sense. You simulate 1000 travel times for each edge, AXB is a vector of 1000 times of route AXB and now you are choosing the shortest one across the time..

  4. Similarly, averageTravelTime doesn't make sense because minAXB + minAYB + minAXYB + minAYXB is just a number, not a vector.

Hence, I think the code should be

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)

See ?pmin . For every day it chooses the fastest travel time and returns a vector of length 1000.

As a bonus, the following shows how many times which route was the fastest

table(apply(cbind(AXB, AYB, AXYB, AYXB), 1, which.min))
#   1   2   3   4 
# 317 370 240  73 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM