出生死亡代码

时间:2016-07-13 17:20:21

标签: r simulation markov poison-queue

我的问题:

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

在每小时强度为“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)
  4. 我们应该调查3个提案中的哪些提案不会超过5%的时间。

    我需要帮助的两件事

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

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

    安全的事情: 在两个地方,我写了“...”,我需要帮助填写一些代码。

    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)
    }
    

1 个答案:

答案 0 :(得分:0)

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

使用无记忆属性,您可以将time_to_transition计算为superposition of the two Poisson processes,并通过与ratio of one of the rates to the combined rate成比例的随机化来确定它是到达还是离开。然后将其中一个费率归零也是有效的,因为当你解除它时,由于无记忆属性,速率为零的经过时间无关紧要。