Try   HackMD

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ì:

    1. definiamo un tempo assoluto t=0
    1. 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)
    1. assegniamo ad ogni link attivo un tempo di infezione e_l estratto da p_i
    1. mettiamo a +infty il tempo evento di tutti i nodi e i link non attivi
    1. 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