Моделирование экспоненциального распределения в R

У меня такой график:

введите описание изображения здесь

Мне сообщили следующую информацию:

(1) вершина A к вершине X описывается экспоненциальным распределением с лямбда = 4;

(2) вершина A к вершине Y описывается экспоненциальным распределением с лямбда = 2,5;

(3) вершина X к вершине Y идентична вершине Y вершине X, и описывается экспоненциальным распределением с лямбда = 10;

(4) вершина X в вершину B описывается экспоненциальным распределением с лямбда = 3; и наконец,

(5) вершина Y в вершину B описывается экспоненциальным распределением с лямбда = 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)

Это правильно?


person The Pointer    schedule 20.03.2018    source источник


Ответы (1)


  1. Это зависит от интерпретации, но я бы сказал, что вам нужно моделировать времена от X до Y и от Y до X отдельно, хотя и с той же скоростью. Если поезд идет в обе стороны и в среднем скорость одинакова, это не означает, что два поезда, отправляющиеся из пунктов X и Y, прибудут в другой пункт одновременно.

  2. Вы не используете

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

    так что они избыточны.

  3. Написание minAXB <- min(AXB) на самом деле не имеет смысла. Вы моделируете 1000 времен прохождения для каждого ребра, AXB - это вектор из 1000 раз маршрута AXB, и теперь вы выбираете самый короткий за это время ..

  4. Точно так же 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. Для каждого дня он выбирает самое быстрое время в пути и возвращает вектор длиной 1000.

В качестве бонуса ниже показано, сколько раз какой маршрут был самым быстрым.

table(apply(cbind(AXB, AYB, AXYB, AYXB), 1, which.min))
#   1   2   3   4 
# 317 370 240  73 
person Julius Vainora    schedule 20.03.2018
comment
Ааа, я думаю, ты прав. Значит, мы должны выбирать самый быстрый маршрут каждый день, а не самый быстрый маршрут во времени? - person The Pointer; 20.03.2018
comment
@ThePointer, верно, из-за Assuming you are taking on every day the fastest route. Кроме того, более разумно брать в среднем 1000 времен в пути, чем 4. - person Julius Vainora; 20.03.2018
comment
Хорошо, большое спасибо за помощь. Это было восхитительно. - person The Pointer; 20.03.2018