Menu Chiudi

Coding e modelli 1/4

Workshop

Vedere anche Programmare senza … 1/4 e Introduzione a Blockly, un breve corso per usare subito il generatore di codice di Google.

In particolare, abbiamo mostrato come utilizzare GeoGebra per indagare le soluzioni di un’equazione differenziale (o un sistema di equazioni differenziali …), argomento di cui potete leggere nella pagina Modelli per le epidemie o nell’articolo Aggiornamenti (2).

Qui, invece, vogliamo raccontare della seconda parte del workshop dove abbiamo provato a realizzare e implementare un semplice, semplicissimo, modello delle epidemie che, malgrado la sua linearità, può rappresentare un buon punto di partenza per un modello più completo ed efficace.

Un modello ad agenti

Concretamente: vogliamo realizzare un’app che implementi un modello agent based per confrontare poi i risultati con i principali modelli teorici (il modello SIR in particolare). Abbiamo un certo numero di individui che interagiscono tra loro: se uno solo dei due è infettivo c’è una probabilità che l’altro sia contagiato. Si vuole una descrizione dell’andamento dell’epidemia, in sostanza una lista con il numero di infettivi giorno per giorno, via via che l’epidemia progredisce (o regredisce).

Dati e parametri

Gli individui, gli agenti, sono memorizzati in una lista anzi, per essere più precisi, nella lista c’è un elemento per agente in cui viene memorizzato lo stato dell’individuo corrispondente secondo un semplice codice numerico:

  • 0: suscettibile
  • 1 o più: infettivo (il valore rappresenta il numero di giorni di malattia)
  • -1: deceduto

I parametri del modello sono simili a quelli usati nel modello più complesso:

  • λ: tasso di contagio
  • γ: tasso di guarigione
  • τ: tasso di morte

La prima stesura

A questo punto abbiamo scritto una prima stesura dell’algoritmo, come sempre in un linguaggio naturale (in italiano) cercando di evitare ambiguità. Quello che segue è il risultato della prima parte del lavoro …

ripeti per un certo numero di giorni
  per ogni persona p
    ripeti per il numero di contatti c al giorno
      scegli un altro individuo q
      se p è infettivo e q è suscettibile
        se numero casuale <= λ
          q diventa infettivo
      se p è suscettibile e q è infettivo
        se numero casuale <= λ
          p diventa infettivo

Non è proprio perfetta, non c’è nemmeno il controllo sulla guarigione o sulla morte a causa della malattia, ma è una base da cui partire. Le righe in grassetto costituiscono il cuore del modello perché si occupano, come vedremo più avanti, della diffusione dell’epidemia, del contagio.

Ci si accorge quasi immediatamente che manca una fase di inizializzazione, quella in cui si impostano i parametri del modello. Inoltre le istruzioni non sono affatto chiare e anzi, risultano piuttosto ambigue.

Per raggiungere il nostro obiettivo c’è ancora parecchia strada da fare, proseguite leggendo Coding e modelli 2/4.

Articoli correlati