Event driven simulation
processo ad eventi discreti (cioè in cui il tempo è continuo ma gli eventi accadono istantaneamente).
ragioniamo su una rete anche se nel caso iniziale abbiamo una topologia banale che ne è un caso particolare.
supponiamo date due distribuzioni per i tempi di recovery e di infezione che chiamo p_r e p_i. Nel caso Poissoniano saranno esponenziali. Poi vogliamo generalizzare la p_r ad un caso non poissoniano(ma in questo algoritmo non abbiamo bisogno di fare ipotesi sulle p)
per il SIR chiamo di seguito "attivo" un nodo infetto o un link tra un nodo infetto e uno suscettibile (in generale avrò altre definizioni di attivo a seconda degli eventi che possono accadere nel processo)
l'algoritmo dovrebbe procedere così:
-
- definiamo un tempo assoluto t=0
-
- assegniamo ad ogni nodo attivo un tempo di evento e_i estratto da p_r (a cui il nodo infetto può fare recovery I->R)
-
- assegniamo ad ogni link attivo un tempo di infezione e_l estratto da p_i
-
- mettiamo a +infty il tempo evento di tutti i nodi e i link non attivi
-
- assegnamo tutti i tempi eventi ad una struttura dati appropriata (definita a parte)che li ordina in ordine crescente
- 5. prendiamo il primo evento e aggiorniamo il sistema accordingly:
- 5.1 se l'evento è ad un nodo i:
- aggiorniamo il tempo assoluto a t=e_i
- aggiorniamo il tempo evento di i a +infty
- aggiorniamo il tempo evento dei link che non sono più attivi come conseguenza del recovery a +infty
- aggiorniamo e riordiniamo la data structure
- 5.2 se l'evento è ad un link l:
- aggiorniamo il tempo assoluto a t=e_l
- aggiorniamo il tempo evento di l a +infty
- aggiorniamo lo stato del sistema
- aggiorniamo gli event times di nodi e link a k+t o +infty
data structure
min-heap