2010-02-05 23 views

risposta

2

Se si desidera simulare l'orario di arrivo tra gli eventi, si desidera la distribuzione esponenziale.

Date un'occhiata a Pseudorandom Number Generator - Exponential Distribution

il codice sarà quindi simile a questa:

// Note L == 1/lambda 
public double poissonRandomInterarrivalDelay(double L) { 
    return (Math.log(1.0-Math.random())/-L; 
} 

...

while (true){ 
    // Note -- lambda is 5 seconds, convert to milleseconds 
    long interval= (long)poissonRandomInterarrivalDelay(5.0*1000.0); 
    try { 
     Thread.sleep(interval); 
     fireEvent(); 
} 
+0

Ciao, ho bisogno di generare numeri casuali nella frequenza di intervallo di Poisson usando java .. Ho provato a usare la tua funzione e il metodo poissonRandomInterarrivalDelay restituisce sempre zero per qualsiasi valore di lambda. – Learner

+0

Puoi pubblicare il tuo codice come una nuova domanda? Forse posso vedere qualcosa ... –

+0

Non riesco a farlo. Al momento sono bloccato .. – Learner

0

I numeri casuali Poisson si sta generando, come detto Scott, rappresenta la frequenza dei tuoi eventi. Una volta ottenuta la frequenza, puoi adattare le loro occorrenze all'intervallo utilizzando una seconda distribuzione, ad esempio Uniforme.

Supponiamo che il numero di eventi generati per un intervallo di N sia k. Quindi è sufficiente generare (k + 1) numeri casuali che sommano a N.

| < ----------------------- N ------------------------- > |
--r_0 - (evento) --- r_1 -..- (evento_k) - r_ (k + 1) -

Per fare ciò, è sufficiente generare (k + 1) numeri casuali e dividere li per la loro somma, divisa per N. Il primo k di questi numeri diventa il timestamp dei tuoi eventi.

Problemi correlati