В рамках попытки реализовать динамическую модель системы в R с использованием пакета DeSolve я хотел бы знать, существует ли способ построить конвейер (дискретную задержку) в моей модели.
Примерзадержка конвейера может быть процессом распространения, например, когда пакет Amazon покидает склад в момент времени X и занимает 2 дня, чтобы добраться до меня, т.е. весь пакет достигает меня через фиксированную продолжительность в 2 дня.
Я знаю, чтоболее популярные пакеты моделирования, такие как Vensim и т. д., имеют фиксированные функции (Delay Fixed и т. д.), чтобы справиться с этим, но я ищу руководство о том, как это можно реализовать в R (включая базовое уравнение (я), чтобы иметь возможностьсделайте так).
Если мы используем простой пример того, что я пытаюсь сделать - у нас есть модель с:
A.Одна экзогенная переменная 1. Желаемая скорость роста = 10%
B.Две акции:
Задержка
- Приток в эту акцию составляет 10% от стоимости Актива (см. Ниже) в любой данный период
- Отток должен быть притоком за два периода назад
Актив
- Приток в этот запас должен быть оттоком изЗадержка акций
- Нет оттока / распада от этих акций
По сути, я говорю - если я сделаю инвестиции в активы в момент времени t= 0, это должно быть реализовано и отражено в стоимости активов через 3 периода времени в конце t = 2.
Вы увидите, что в моем коде R я застрял в строке, где у меня естьчтобы определить уравнение вывода задержки - математически, чтобы достичь желаемой задержки, мне нужно вычесть текущее значение задержки из инвестиций, сделанных один раз назад - но я понятия не имею, как вызывать эти запаздывающие значения - я изучилиспользуя деду, а не оду, но не уверен, что это сделатьчто мне нужно.
Я также знаю, что мог бы достичь задержки первого порядка, поделив значение задержки на 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)
Мой ожидаемый результат для оттока запаса Задержки следующий.Обратите внимание, что притоки составляют, так как в реальной модели значения будут колебаться в каждом периоде:
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`
.. и т. Д.
Спасибо, что нашли время, чтобы прочитатьи если бы вопрос уже задавался в другом месте, я был бы признателен, если бы вы указали мне правильное направление, так как я не смог найти ответ.