Menu Chiudi

Coding e modelli 2/4

Workshop

Il primo step di questo percorso è Coding e modelli 1/4. Vedere anche Programmare senza … 1/3 e Introduzione a Blockly, un breve corso per usare subito il generatore di codice di Google.

La situazione iniziale

Nella prima versione, in linguaggio naturale, della procedura stilata nella prima puntata – Coding e modelli 1/4 – mancava del tutto una fase di inizializzazione in cui decidere i valori dei parametri e creare le strutture dati necessarie. Cerchiamo di dettagliare meglio cosa dobbiamo fare prima di avviare la simulazione con il modello:

  • creare la lista che conterrà lo stato degli individui
  • quasi tutti gli elementi di questa lista dovranno avere valore zero (quasi tutti gli individui saranno inizialmente suscettibili)
  • alcuni elementi della lista, scelti in modo casuale, dovranno avere valore uno (ci saranno alcune persone già contagiate che daranno il via all’epidemia)

Ora proviamo a scrivere istruzioni in linguaggio naturale per realizzare questi obiettivi …

SituazioneIniziale(n, infettiviIniziali)
  m = crea una lista con n elementi tutti nulli
  i = 0
  ripeti finchè i < infettiviIniziali
    x = numero casuale tra 1 e n
    se m[x] == 0 allora
      m[x] = 1
    i = i+1
  ritorna m

L’inizializzazione del modello è racchiusa in una procedura apposita che richiede due soli parametri: il numero di individui n e il numero di infettivi iniziali infettiviIniziali. Viene creata una lista i cui elementi sono tutti nulli (un valore zero, come stabilito in fase di progettazione, indica un suscettibile) ma un certo numero di elementi di questa lista sono poi trasformati in suscettibili assegnando il valore uno. La lista è restituita come valore di ritorno della procedura/funzione.

Una procedura stilata in questo modo può già essere implementata in Blockly e testata.

La funzione SituazioneIniziale, ancora incompleta ma già funzionante, così come è stata implementata in Blockly. Un breve programmino, sempre in Blockly, di soli 4 blocchi permette di controllarne il funzionamento.

Funzioni e procedure

Malgrado non sia evidente sin dai primi passi è importante, da subito, cercare di scomporre il problema in pezzetti più piccoli. Ognuna di queste porzioni di programma sarà racchiusa in funzioni o procedure apposite in modo da:

  • snellire il programma completo rendendo più facile seguire il flusso dell’algoritmo
  • testare separatamente le singole funzioni così da facilitare la ricerca di eventuali errori o malfunzionamenti
  • aiutare il riutilizzo del codice in altri punti del programma o in altri contesti

Nuova stesura del modello

m = SituazioneIniziale(individuiTotali, infettiviIniziali)
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 <= l
          q diventa infettivo
      se p è suscettibile e q è infettivo
  	se numero casuale <= l
          p diventa infettivo
 Aggiorna la situazione

La prima riga chiama la funzione che si occupa dell’inizializzazione e costruisce la matrice m che memorizza lo stati degli agenti, degli individui. La situazione è migliore ma il resto è ancora piuttosto confuso e difficile da rileggere. La cosa migliore da fare è quella di raccogliere tutte le istruzioni in una nuova funzione – PropagaContagio(…) – per semplificare la procedura principale e poter meglio controllare il corretto funzionamento della diffusione dell’epidemia.

La costruzione di questa procedura è affrontata in Coding e modelli 3/4.

Articoli correlati