我试图在每个步骤中增加离散马尔可夫链中的初始状态向量,以便在未来某个时间点求解状态向量元素,这似乎很麻烦。
举个简单的例子,假设一家公司有一个初始状态向量,它由具有 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 名入门级员工,但假设我希望在第 1 步之后有 1,300 名入门级员工,在第 2 步之后需要 2,000 名入门级员工。为此,我通过增加状态向量来雇用更多员工。现在这变成了一个繁琐的过程,我在步骤 1 中增加initialstate
矩阵以考虑新员工,在步骤 2 中观察入门级员工的数量,然后增加step1state
以实现步骤 2 的目标。
例如,在运行之前的马尔可夫链之后,我再次运行它并在步骤 1 中添加 800 名新员工:
step1state <- initialstate%*%transitionmatrix + t(as.matrix(c(800,0,0)))
step2state <- step1state%*%transitionmatrix
根据需要,第 1 步有 1,300 名入门级员工,但第 2 步现在需要雇用 1,350 名入门级员工(从最初的 1,750 名减少)。以下满足我在每个时期的招聘目标:
step1state <- initialstate%*%transitionmatrix + t(as.matrix(c(800,0,0)))
step2state <- step1state%*%transitionmatrix + t(as.matrix(c(1350,0,0)))
如果我的入门级员工目标在任何一步发生变化,我必须在之后的每一步都重新运行马尔可夫链,因为入门级员工的数量取决于前几期的员工数量(但转移概率不会)。R 中的 MarkovChain 包似乎无法解决每个步骤中特定值的状态向量,所以我只是运行基线 Markov Chain 并迭代地将新员工添加到每个初始状态向量以获得我想要的目标每一步。
有一个更好的方法吗?马尔可夫链是我想要实现的模型的正确选择吗?