2016-07-13 2 views
-2

Ma question:Naissance Code mort

à un institut de mathématiques expérimentales il y a un ordinateur qui aide à résoudre les problèmes.

Les problèmes arrivent à à l'ordinateur lors d'un processus poisson avec intensité "Landa" par heure.

Le temps de résolution de chaque problème peut être vu comme une distribution exponentielle avec le paramètre "mu".

Dans notre monde, nous avons quatre états différents. S = (0,1,2,3)

Etat 0 = 0 problèmes sont arrivés à l'ordinateur

Etat 1 = l'ordinateur est la résolution 1 question

Etat 2 = l'ordinateur est la résolution 1 question + 1 en file d'attente.

État 3 = l'ordinateur résout 1 question + 2 en file d'attente.

Si une question arrive lorsque nous sommes dans l'état 3, l'expéditeur reçoit un message d'erreur et réessaie plus tard. L'institution a décidé que maximum 5% des expéditeurs devraient recevoir ce message d'erreur.

Pour décider qui devrait avoir accès à l'ordinateur, nous sommes 3 propositions différentes.

  1. Seuls les professeurs sont alowed à envoyer vos questions (Landa = 2, Mu = 10)
  2. Les professeurs et les étudiants sont alowed d'envoyer des questions (Landa = 6, Mu = 10)
  3. Toute personne est alowed à envoyer des questions (Landa = 10, Mu = 10)

Nous devrions enquêter sur les 3 propositions qui ne remplissent pas l'ordinateur plus de 5% du temps.

J'ai deux choses que je dois aider à

Première chose: Pour résoudre la question m'a donné cette structure de code (le code sous). Ce que j'ai besoin d'aide est si quelqu'un peut brièvement m'expliquer le but du code ci-dessous où j'ai écrit "#?".

Donc, ce dont j'ai vraiment besoin d'aide, c'est d'expliquer certaines parties du code. Seconde chose: Dans deux endroits, j'ai écrit "...", là j'ai besoin d'aide pour remplir du code.

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

Whoa, c'est toute la question. Pouvez-vous s'il vous plaît réduire à un [mcve] pour faciliter la réponse? – Stedy

+2

Vous semblez avoir copié/collé une déclaration de problème. Comprenez-vous le problème? Comprenez-vous l'objectif de la fonction 'bd_process'? A la fin, il renvoie 'tid' et' state', mais vous avez un point d'interrogation sur la mise à jour de 'state' et vous écrivez" '#WHAT DOE CE VECTEUR CONSISTE? '". Ne pas comprendre le retour me fait penser que vous ne comprenez pas l'objectif de la fonction – Gregor

+1

Peut-être pourriez-vous également expliquer ce que vous savez. Par exemple, vous avez un point d'interrogation sur la ligne 'time_now <- time_now + time_to_transition'. C'est un ajout simple. Il ajoute la valeur actuelle de 'time_now' à la valeur actuelle de' time_to_transition' et appelle le résultat 'time_now', d'où la mise à jour de la variable' time_now'. Est-ce le niveau d'explication dont vous avez besoin? – Gregor

Répondre

0

Le code semble être écrit avec une hypothèse implicite que les distributions de interarrival et de service sont sans mémoire, à savoir, soit exponentielle ou géométrique. Sans mémoire, il est invalide de désactiver le traitement en mettant les taux à zéro.

Avec la propriété memoryless, vous pouvez déterminer le time_to_transition comme superposition of the two Poisson processes et déterminer s'il s'agissait d'une arrivée ou d'une sortie par randomisation proportionnelle au ratio of one of the rates to the combined rate.Il est également possible de mettre à zéro l'un des taux alors parce que lorsque vous le désélectionnez le temps écoulé où le taux était nul n'a pas d'importance en raison de la propriété sans mémoire.

+0

Bonjour, pjs. Je pense que time_to_transition est le moment de quitter un état et qu'il peut être vu comme Exp (mu) + Exp (lambda). Y at-il de toute façon coder cela? Quand je l'écris, je reçois "Exp" pas trouvé. – PeterNiklas

+0

@PeterNiklas En supposant que vous voulez dire exponentiellement distribué avec le taux mu lorsque vous écrivez 'Exp (mu)', la transition suivante n'est pas 'Exp (mu) + Exp (lambda)'. C'est au plus petit des deux - 'min (Exp (mu), Exp (lambda))', qui a la distribution 'Exp (mu + lambda)'. – pjs