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.
Riprendiamo il racconto del workshop nel quale abbiamo aiutato i e le docenti della scuola a costruire un semplice modello per le epidemie. La prima stesura dell’algoritmo, un po’ troppo superficiale, va raffinato prima di affrontare l’implementazione usando Blockly.
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.
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.