Je veux générer un processus de Poisson. Si le nombre d'arrivées par temps t em> est n (t) em> et j'ai une distribution de poisson avec le paramètre λ em> comment puis-je générer N (t) em>? Comment ferais-je cela en C ++? P>
Je voulais à l'origine générer le processus en utilisant une distribution de Poisson. Mais, j'ai été confus sur quel paramètre du processus dont j'avais besoin; Je pensais pouvoir utiliser n (t) em> mais cela me dit combien d'arrivées ont eu lieu sur l'intervalle (0, t] em> ce que je voulais. Alors, Ensuite, je pensais que je pourrais utiliser n (t2) -n (t1) em> pour obtenir le nombre d'arrivées sur l'intervalle [t1, t2] em>. depuis n ( t) ~ Poisson (TX λ) EM> Je pourrais utiliser Poisson (T2 x λ) -poïisson (T1 x λ) em> mais je ne veux pas le nombre d'arrivées dans un intervalle. < / p>
plutôt, je veux générer les temps explicites que les arrivées se produisent à. p>
Je pourrais le faire en faisant l'intervalle [t2, t1] em> suffisamment petit de sorte que chaque intervalle n'a qu'une seule arrivée (qui se produit comme | t2-t1 | -> 0 em>). p> Clarification: H3>
8 Réponses :
Pour choisir un échantillon à partir d'une distribution, vous devez calculer la fonction de distribution cumulative inverse (CDF). Vous choisissez d'abord un nombre aléatoire uniformément sur l'intervalle réel [0, 1], puis prenez ensuite le CDF inverse de cette valeur. P>
Merci - mes pensées étaient juste que, mais je me suis senti étrange puisque le CDF génère n (t) i> mais pas t i>. Et, je ne connaissais pas la bonne façon d'échantillonner de n (t) i> pour obtenir un processus de Poisson. Que se passe-t-il si je ne échantillonnais pas uniformément du CDF (sera-t-il toujours un processus de Poisson)?
Inverser le CDF d'un poisson n'est pas facile ou efficace. Pour une approche plus efficace, voir le lien de Corwin ou voir ma réponse sur la manière d'utiliser C ++ TR1.
Je ferais très attention à utiliser le CDF inverse et à pomper un nombre aléatoire uniforme à travers elle. Le problème ici est que souvent le CDF inverse est numériquement instable ou les fonctions à produire peuvent donner des fluctuations indésirables à proximité des extrémités de l'intervalle. Pour cette raison, je recommanderais quelque chose comme la méthode de rejet utilisé dans "Recettes numériques en C". Voir la fonction Poidev donnée dans CH 7.3 de NRC: http: //www.nrbook .COM / A / BookCPDF / C7-3.PDF P>
Le lien est d'un PDF vierge. J'ai la version C ++ (V3 Je crois) et elle n'inclut même pas de déviation de Poisson. Mais, je crois comprendre que les écarts sont des échantillons de la distribution qui me laisserait où j'ai commencé.
Voici un exemple de code pour générer des échantillons de poisson à l'aide de C ++ TR1 . P>
Si vous voulez un processus de poisson em>, les temps entre les arrivées sont distribués de manière exponentielle et les valeurs exponentielles peuvent être générées trivialement avec la méthode de CDF inverse: -K * journal (U) où vous êtes un uniforme aléatoire variable et k est la moyenne de l'exponentiel. p>
N'est-ce pas un lien vers une distribution de Poisson, pas un processus de Poisson?
Bon point. Si vous souhaitez un processus de Poisson, les temps entre les arrivées sont distribués de manière exponentielle et que les valeurs exponentielles peuvent être générées de manière triviale avec la méthode inverse du CDF: -K * journal (U) où U est une variable aléatoire uniforme et K est la moyenne de l'exponentiel.
Au fait, la moyenne (échelle) de la distribution exponentielle 1 / k code>, pas
k code>?
Il existe deux conventions différentes pour le paramétrage de la distribution exponentielle.
Si vous utilisez Python, vous pouvez utiliser Random.Expovariate (tarif) pour générer des heures d'arrivée à des événements de taux par intervalle de temps P>
Si vous avez un processus de Poisson avec le paramètre de taux L (ce qui signifie que, à long terme, il y a des arrivées par seconde), les temps d'arrivée sont ensuite distribués de manière exponentielle avec une moyenne 1 / l. Donc, le PDF est F (t) = -L * exp (-Lt) et le CDF est F (T) = prob (t comme Python fournit une fonction pour générer de manière exponentielle distribuée de manière exponentielle. numéros aléatoires, vous pouvez simuler les 10 premiers événements d'un processus de Poisson avec un taux de navigation de 15 arrivées par seconde comme ceci: p> Notez que cela générerait le * inter * heures d'arrivée. Si vous vouliez les heures d'arrivée, vous devriez continuer à déplacer une variable de temps en avant comme ceci: p> rand () code>) pour générer des nombres aléatoires répartis uniformément entre 0 et 1, la technique de CDF inverse réduit le calcul: p>
Assurez-vous de ne pas prendre le journal de 0 lorsque vous calculez journal (rand ()) code>. Un tour commun consiste à calculer
journal (1.0 - rand ()) code> à la place, comme
rand () code> renvoie généralement un numéro, qui est inférieur à 1.
Vous m'avez eu à "Notez que cela générerait les horaires d'arrivée inter i> inter i>". "meilleure explication que j'ai vue sur cette
La discussion ici dispose de tous les détails sur l'utilisation de l'échantillonnage inverse pour générer des interriviers, ce qui est généralement ce que les gens veulent faire pour les jeux. p>
dans Python, vous pouvez essayer ci-dessous le code.
Si vous souhaitez générer 20 lectures aléatoires en 60 secondes. IE (20 est la Lambda)
p>
Génération des horaires d'arrivée via Puisson Process ne signifie pas utiliser une distribution de Poisson. Cela se fait en créant une distribution exponentielle basée sur le taux d'arrivée de Poisson Lamda.
En bref, vous devez générer une distribution exponentielle avec une moyenne = 1 / Lamda, voir l'exemple suivant: P>
newArrivalTime: 21.6419 ,sumArrivalTimes: 21.6419 newArrivalTime: 1.64205 ,sumArrivalTimes: 23.2839 newArrivalTime: 8.35292 ,sumArrivalTimes: 31.6368 newArrivalTime: 1.82962 ,sumArrivalTimes: 33.4665 newArrivalTime: 34.7628 ,sumArrivalTimes: 68.2292 newArrivalTime: 26.0752 ,sumArrivalTimes: 94.3045 newArrivalTime: 63.4728 ,sumArrivalTimes: 157.777 newArrivalTime: 3.22149 ,sumArrivalTimes: 160.999 newArrivalTime: 1.64637 ,sumArrivalTimes: 162.645 newArrivalTime: 13.8235 ,sumArrivalTimes: 176.469