Я пытаюсь увеличить начальный вектор состояния в дискретной цепи Маркова на каждом шаге, чтобы найти элемент вектора состояния в какой-то момент времени в будущем, и это кажется довольно громоздким.
В качестве простого примера предположим, что у корпорации есть начальный вектор состояния, состоящий из сотрудников начального уровня с 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, похоже, не мог решить вектор состояния для конкретных значений на каждом этапе, поэтому я просто запускаю базовую цепь Маркова и итеративно добавляю новых сотрудников к каждому вектору начального состояния, чтобы получить цель, которую я хочу в каждый шаг.
Есть лучший способ сделать это? Является ли цепь Маркова правильным выбором модели для того, чего я пытаюсь достичь?