Цепь Маркова, корректирующая вектор начального состояния для поиска желаемого элемента вектора

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

В качестве простого примера предположим, что у корпорации есть начальный вектор состояния, состоящий из сотрудников начального уровня с 3 переходными состояниями (начальный уровень, продвижение по службе, уход из компании). Вектор начального состояния с 1000 сотрудников начального уровня определяется как:

initialstate <- t(as.matrix(c(1000,0,0)))

Матрица перехода для оставшегося начального уровня, продвижения по службе или ухода из компании определяется следующим образом:

transitionmatrix <- matrix(c(0.5,0,0,0.2,1,0,0.3,0,1),nrow = 3,ncol = 3)

После двух итераций:

step1state <- initialstate%*%transitionmatrix

(осталось 500 сотрудников начального уровня)

step2state <- step1state%*%transitionmatrix

(осталось 250 сотрудников начального уровня)

После step2state у меня осталось 250 сотрудников начального уровня, но предположим, что мне нужно 1300 сотрудников начального уровня после Шага 1 и 2000 сотрудников начального уровня после Шага 2. Для этого я нанимаю дополнительных сотрудников, увеличивая векторы состояния. Теперь это становится громоздким процессом, когда я увеличиваю матрицу initialstate для учета новых сотрудников на этапе 1, наблюдаю за количеством сотрудников начального уровня на этапе 2, а затем увеличиваю step1state для достижения цели на этапе 2.

Например, после запуска предыдущей цепи Маркова я запускаю ее снова и добавляю 800 новых сотрудников на шаге 1:

step1state <- initialstate%*%transitionmatrix + t(as.matrix(c(800,0,0)))
step2state <- step1state%*%transitionmatrix

Шаг 1 имеет 1300 сотрудников начального уровня по желанию, но шаг 2 теперь требует найма 1350 сотрудников начального уровня (по сравнению с 1750 в начальном периоде). Следующее удовлетворяет мои цели найма в каждый период:

step1state <- initialstate%*%transitionmatrix + t(as.matrix(c(800,0,0)))
step2state <- step1state%*%transitionmatrix + t(as.matrix(c(1350,0,0)))

Если моя цель для сотрудников начального уровня изменится на каком-либо этапе, мне придется повторно запускать цепь Маркова для каждого последующего шага, потому что количество сотрудников начального уровня зависит от количества сотрудников в предыдущие периоды (но вероятности перехода не зависят). Пакет MarkovChain в R, похоже, не мог решить вектор состояния для конкретных значений на каждом этапе, поэтому я просто запускаю базовую цепь Маркова и итеративно добавляю новых сотрудников к каждому вектору начального состояния, чтобы получить цель, которую я хочу в каждый шаг.

Есть лучший способ сделать это? Является ли цепь Маркова правильным выбором модели для того, чего я пытаюсь достичь?


person Garrett    schedule 26.09.2017    source источник


Ответы (1)


Я не уверен, что вы подразумеваете под «Является ли цепь Маркова правильным выбором модели для того, чего я пытаюсь достичь?», потому что я на самом деле не понимаю, чего вы пытаетесь достичь, и не совсем ясно, что вы имеете в виду «цепь Маркова», хотя я предполагаю, что вы хотите повторить серию «марковских» переходов из вектора начального состояния. Для начального состояния вектора в 1000 новых сотрудников состояние после n итераций будет следующим:

 library(expm)
 initialstate %*% (transitionmatrix %^% n)

Пакет expm реализует матричный экспоненциальный оператор %^%, который позволяет за один шаг вычислить результаты n итераций марковской переходной матрицы.

Итак, после 25 итераций будет:

> initialstate %*% (transitionmatrix %^% 25)
             [,1] [,2] [,3]
[1,] 2.980232e-05  400  600

.... 400 повышенных лиц и 600 "выпускников". Все это линейно, поэтому, если вы начнете с 2000, у вас будет 800 и 1200 в этих состояниях соответственно. И неудивительно, что их соотношение равно 2:3, так как это также соотношение чисел, совершающих переход за счет второго и третьего элементов первого столбца. Обратите внимание, что единицы по диагонали для столбцов 2 и 3 составляют эти «поглощающие состояния». Как только вы получили повышение, вы останетесь повышенным. Выхода нет. Как в отеле California, если вы фанат Eagles. После того, как вы «уйдёте», возврат будет невозможен.

person IRTFM    schedule 26.09.2017