Generieren Poisson-Ankunft in Java
Ich würde gerne eine Funktion erstellen, die in Java erzeugt Poisson-Ankünfte gegeben die mittlere ankunftsrate (λ) und die mittlere ankunftsrate (mu).
In meinem Beispiel habe ich schon: 2,2 Anfragen/Tag, in anderen Worten 2,2 Ankünfte/Tag und eine mittlere service-Zeit von 108 Stunden. Wenn man bedenkt, dass mein Programm startet bei t=0 Minuten, ich möchte eine Funktion erstellen, die gibt arrivals [ist], die enthalten, t1, t2, und eine mögliche t3. T1,t2 und t3 sind die instants (in Minuten) während des Tages, wo diese Ankünfte auftreten. Ich habe die folgenden Einschränkungen:
t1 < t2 < t3 < 1440 minutes (24 hours*60 minutes/hour)
t2-t1 > 108 minutes
t3-t2 > 108 minutes
t3+ 108 minutes < 1440 minutes
Kann mir bitte jemand helfen?
Danke,
Ana
mögliche Duplikate von Simulation von Poisson-Wartezeiten - Java
Willkommen ALSO. Bitte Lesen Sie die faq und stellen für weitere details, wie die Frage hier posten. Es ist als out-of-scope zu posten, die ein problem mit keine Beweise, die Sie gemacht haben jeder Versuch, es zu lösen. DAMIT der Benutzer Ihnen Antworten auf spezifische Fragen, aber in der Regel nicht tun Sie Ihr Arbeit für Sie. Auch, Sie sind erwartet zu haben, suchte nach einer Antwort im web und auf SO Sie vor der Buchung.
InformationsquelleAutor user1287257 | 2012-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dieser Algorithmus vorgeschlagen, von D. Knuth:
Verstehen, wie das funktioniert beachten Sie, dass nach k Iterationen der Schleife Bedingung wird
p1 * N2 * ... * pk - > L
entspricht
-ln(p1)/mean -ln(p2)/mean ... -ln(pk)/meine > 1
Beachten Sie, dass, wenn p ist gleichmäßig verteilt, dann ist -ln(p)/meine hat exponentielle Verteilung mit einem gegebenen Mittelwert. Eine Zufallsvariable mit Poisson-Verteilung ist gleich der Anzahl der Zeiten auftreten eines bestimmten Ereignisses in einem festen Intervall, wenn die Längen der Intervalle zwischen den Ereignissen sind unabhängige Zufallsvariablen mit exponentieller Verteilung. Da wir den Mittelwert der Poisson-Verteilung als Mittelwert, die exponentielle Verteilung für die Intervalle zwischen den Ereignissen, die Feste interne, in denen wir uns zählen der vorkommen ist die Einheit der Länge. So, der loop-Bedingung fasst die Längen der Intervalle zwischen den Ereignissen und prüft, ob wir schon über das unit Intervall. Wenn wir schon über das Intervall-Einheit beim zählen kth-Ereignis, dann k-1 Ereignisse innerhalb des Intervalls und damit kehren wir k-1.
InformationsquelleAutor Adam Zalcman
Fand ich diese Lösung, mit der inversen Transformation sampling:
http://preshing.com/20111007/how-to-generate-random-timings-for-a-poisson-process
Es keine Ablehnung Stichprobenverfahren, ist eine effiziente und präzise.
Es nutzt die Tatsache, dass die Verteilung der Zeit zwischen den Ereignissen ist eine exponentielle Verteilung mit parameter lambda ist die ankunftsrate.
Die Exponentielle Verteilung ist lambda-exp(-lambda-x).
Um zum Beispiel Werte aus dieser Verteilung und vermeiden rejection sampling, es ist einfacher zu bedienen sein Cumulative Distribution Function (CDF): 1 - exp(-lambda-x).
Die CDF ist eine Funktion, die beginnt bei 0.0 und steigt auf 1.0 mit larget-Parameter.
Intuitiv, ist die Wahrscheinlichkeit, dass man auf ein Ereignis erhöht wie die Zeit vergeht.
Probe des CDF, und wieder vermeiden Sie die Ablehnung der Probenahme, es ist leichter zu Holen, eine einheitliche Zufallszahl U zwischen [0,1] und stecken Sie diesen Wert in die inverse Funktion der CDF, die gibt es: nextEvent = - Ln(U)/lambda.
Weil Ln(0) nicht definiert ist, und die meisten Zufallszahlengeneratoren gehören 0,0 und ausschließen 1.0, es ist sicherer, zu verwenden:
nextEvent = -Ln(1.0-U)/lambda.
Wenn der code verwendet eine Millisekunde basiert, Zeit - /sleep-Funktion, die Sie verwenden können:
double rate = 20.0/1000.0; //20 pro Sekunde im Durchschnitt
schlafen(floor(-1.0 * log(1.0 - rand()*1.0/RAND_MAX) /rate) );
InformationsquelleAutor jdbertron
Hier einige vereinfachte code zur Generierung einer poisson-Zahl, die mit einer bestimmten bedeuten:
Sollten Sie in der Lage sein, diese zu verwenden, oder etwas ähnliches zu erzeugen Ihrer Ankunft zahlen Sie für jede Zeit: die Eingabe sollte die mittlere Anzahl der Ankünfte, die Sie erwarten in der Zeit.
Beachten Sie, dass, wenn Ihr Mittelwert ist sehr groß (sagen wir 500+), solltest du annähernd die Zahl der Ankünfte mit einer Normalverteilung statt. Das ist effizienter, und es vermeiden numerischen überlauf Fragestellungen, die in den obigen code (irgendwann Math.exp(-Mittelwert) wird auf null gerundet......ooops!)
InformationsquelleAutor mikera