Есть ли способ реализовать конвейерную (дискретную) задержку с помощью решателя ODE в пакете desolve в R?

В рамках попытки реализовать динамическую модель системы в R с использованием пакета DeSolve я хотел бы знать, есть ли способ встроить конвейер (дискретную задержку) в мою модель.

Примером конвейерной задержки может быть процесс распространения, например, когда пакет Amazon покидает склад в момент времени X и занимает 2 дня, чтобы добраться до меня, т.е. весь пакет достигает меня по истечении фиксированной продолжительности 2 дня.

Я знаю, что более популярные пакеты моделирования, такие как Vensim и т. Д., Имеют фиксированные функции (Delay Fixed и т. Д.), Чтобы справиться с этим, но я ищу руководство о том, как это может быть реализовано в R (включая основные уравнения для быть в состоянии сделать это).

Если мы используем простой пример того, что я пытаюсь сделать - у нас есть модель с:

A. Одна экзогенная переменная 1. Желаемая скорость роста = 10%

Б. Два запаса:

  1. задержка

    • Приток в этот запас составляет 10% от стоимости актива (см. Ниже) в любой данный период
    • Отток должен быть притоком из двух периодов назад
  2. Актив

    • Приток в этот запас должен быть оттоком из запаса задержки
    • Нет оттока / распада с этого запаса

По сути, я говорю следующее: если я делаю инвестиции в активы в момент времени t=0, это должно быть реализовано и отражено в стоимости активов через 3 периода времени в конце t=2.

Вы увидите, что в моем коде R я застрял в строке, где мне нужно определить уравнение вывода задержки - математически, чтобы достичь желаемой задержки, мне нужно вычесть текущее значение задержки из инвестиций, сделанных один раз назад - но я понятия не имею, как вызывать эти запаздывающие значения - я изучал использование dede, а не ode, но не уверен, что это делает то, что мне нужно.

Я также знаю, что мог бы достичь задержки первого порядка, поделив значение Задержки на 3 в приведенном выше уравнении, но это означало бы, что я получаю треть выгоды от моих инвестиций немедленно в текущем времени, что не является результатом ищу достижения.

    library(deSolve)

    Start <- 0
    Finish <- 10
    Step <- 1
    simtime <- seq(Start, Finish, by=Step)
    stocks <- c(sAssets=10,sDelay=0)
    auxs <- c(aDesired.Growth=0.10)

    model <- function(time, stocks, auxs) {
    with(as.list(c(stocks,auxs)),
    {

    f.Delay.Input <- sAssets * aDesired.Growth

    f.Delay.Output <- sDelay - [f.Investment #from one time period ago]

    f.Asset.Input <- f.Delay.Output

    da_dt <- f.Asset.Input
    dd_dt <- f.Delay.Input - f.Delay.Output

    return(list(c(da_dt, dd_dt),
    Delay.Input=f.Delay.Input,
    Delay.Output=f.Delay.Output,
    Investment.in.Assets=f.Asset.Input,
    ))
    })
    }

    o <- data.frame(ode(y=stocks, times=simtime, func=model, parms=auxs, 
    method="euler"))

    summary(o)

Мой ожидаемый результат оттока акций Delay заключается в следующем. Обратите внимание, что притоки составляют, так как в реальной модели значения будут колебаться в каждом периоде:

Time    Delay   Inflow  Outflow 
 `0     0       200     0`
 `1    200      180     0`
 `2    380      80      200 ---> 380 (current delay) -180 (previous inflow)`
 `3    260      176     180 ---> 260-80 `
 `4    256      288     80  ---> 256-176`
 `5    464      XXX     176 ---> 464-288`

..и так далее.

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

0 ответов

Другие вопросы по тегам