出生死亡密码

Birth Death Code

我的问题:

在实验数学研究所,有一台计算机可以帮助解决问题。

问题以每小时 "Landa" 的强度 "Landa" 泊松过程到达计算机

解决每个问题的时间可以看作参数为 "mu" 的指数分布。

在我们的世界中,我们有四种不同的状态。 S = (0,1,2,3)

状态 0 = 0 问题已到达计算机

状态 1 = 计算机正在解决 1 个问题

状态 2 = 计算机正在解决 1 个问题 + 队列中的 1 个问题。

状态 3 = 计算机正在解决 1 个问题 + 队列中的 2 个问题。

如果我们处于状态 3 时出现问题,发件人会收到错误消息并稍后重试。该机构已决定最多 5% 的发件人应该收到此错误消息。

为了决定谁有权访问计算机,我们提出了 3 种不同的建议。

  1. 只允许教授发题(Landa = 2, Mu = 10)
  2. 请教授和学生提问(Landa = 6, Mu = 10)
  3. 大家可以提问(Landa =10, Mu = 10)

我们应该调查这 3 个提案中有哪些提案没有超过 5% 的时间填满计算机。

我有两件事需要帮助

第一件事: 为了解决这个问题,我得到了这种代码结构(下面的代码)。我需要帮助的是,如果有人可以向我简要解释以下代码段落的目的,我在其中写了“#?”。

所以我真正需要帮助的是解释部分代码。

第二件事: 在我写了“...”的两个地方,我需要帮助来填写一些代码。

bd_process <- function(lambda, mu, initial_state = 0, steps = 100) {
    time_now <- 0
    state_now <- initial_state
    time <- 0
    state <- initial_state

    for (i in 1:steps) {

        if (state_now == 3) {
            lambda_now <- 0
        } else {
            lambda_now <- lambda
        }

        if (state_now == 0) {
            mu_now <- 0
        } else {
            mu_now <- mu
        }

        #?
        time_to_transition <- ...

        #? 
        if (...) {
            state_now <- state_now - 1
        } else {
            state_now <- state_now + 1
        }

        #?
        time_now <- time_now + time_to_transition 
        #?
        time <- c(time, time_now) 
        #?
        state <- c(state, state_now) #WHAT DOE THIS VECTOR CONSIST OF?
    }
    list(time = time, state = state)
}

编写代码时似乎隐含假设到达间隔和服务分布是无记忆的,即指数分布或几何分布。如果没有无记忆,通过将速率设置为零来关闭处理是无效的。

有了无记忆的属性,你可以把time_to_transition算作superposition of the two Poisson processes, and determine whether it was an arrival or a departure by randomizing proportional to the ratio of one of the rates to the combined rate。将其中一个速率归零也是有效的,因为当你取消归零时,由于无记忆 属性.

,速率为零的经过时间无关紧要