【问题标题】:Birth Death Code [closed]生死密码[关闭]
【发布时间】:2016-11-16 09:59:06
【问题描述】:

我的问题:

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

问题以每小时“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% 的时间填满计算机。

我有两件事需要帮助

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

所以我真正需要帮助的是 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)
}

【问题讨论】:

  • 哇,这真是个问题。能否请您减少为minimal reproducible example 以便于回答?
  • 您似乎复制/粘贴了问题陈述。你明白这个问题吗?你了解bd_process 函数的目标吗?最后返回tidstate,但是你对state的更新有个问号,写“#WHAT DOE THIS VECTOR CONSIST OF?”。不理解返回让我觉得你不理解函数的目标
  • 也许你也可以解释一下你所知道的。例如,您对time_now &lt;- time_now + time_to_transition 行有问号。这是一个简单的补充。它将time_now 的当前值添加到time_to_transition 的当前值并调用结果time_now,从而更新time_now 变量。这是您需要的解释级别吗?
  • 这段代码不是我写的。它是给我的,我正试图了解它的结构。我的理解是:循环中的第一个段落指出,当我们处于状态 3 时,不能再放入队列中。循环中的第二段表示,当我们处于状态 0 时,没有解决任何问题。而在任何其他状态下,它们将以亩的强度解决。我不明白这一点下的代码。所以 Time_to_transition 和 down 是我不明白的。
  • At if (...) { state_now

标签: r simulation markov poison-queue


【解决方案1】:

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

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

【讨论】:

  • 你好,pjs。我认为 time_to_transition 是离开一个状态的时间,它可以看作是 Exp(mu) + Exp(lambda)。无论如何要编码吗?当我写它时,我找不到“Exp”。
  • @PeterNiklas 假设您的意思是在编写Exp(mu) 时以速率 mu 呈指数分布,那么下一个转换不是Exp(mu) + Exp(lambda)。它位于两者中较小的一个——min(Exp(mu), Exp(lambda)),其分布为Exp(mu + lambda)
猜你喜欢
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2011-10-01
  • 2021-04-06
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多