Puntuale come una tassa da pagare, ecco affacciarsi all’orizzonte il centoventinovesimo appello del corso di Laboratorio II per l’anno accademico 2008/09. Riusciranno i nostri adorati studenti, con cosi’ pochi tentativi a loro disposizione, a passare l’esame? Vedremo. A corto di idee ho malamente riciclato un testo d’esame scritto a suo tempo da un mio professore, previo riadattamento ai miei scopi. Se siete curiosi o addirittura voleste cimentarvi nella prova, qui di seguito trovate il tutto.

Specifiche del progetto da realizzare
Come tema d’esame, si richiede allo studente di scrivere un programma, in linguaggio C, in grado di implementare una versione semplificata dell’automa cellulare originariamente sviluppato da Alves e colleghi (Alves, S.G., Oliveira Neto, N.M. & Martins, M.L., Electoral surveys’ influence on the voting processes: a cellular automata model, Physica A, Vol. 316, pp. 601-614, 2002).
L’automa cellulare in questione si basa su una matrice quadrata (lattice), in cui ogni cella e’ occupata da un individuo. Ciascun individuo e’ caratterizzato da un proprio credo politico, espresso come 0 o 1. Il modello si sviluppa su scala temporale discreta per un certo numero di iterazioni. Ad ogni iterazione, per via dell’effetto della “pressione sociale”, ciascun individuo aggiorna il proprio credo politico sulla base di quello che e’ il credo delle persone che vivono attorno a lui. Le persone aventi influenza sul credo politico di un certo individuo sono quelle definite nel contesto del suo intorno. L’intorno di un individuo e’ costituito dai conspecifici che occupano le 8 celle attorno a lui. Se ad esempio un individuo e’ posizionato in una cella di coordinate (x, y), il suo intorno sara’ costituito dagli individui nelle celle {(x-1, y-1), (x, y-1), (x+1, y-1), (x-1, y), (x+1, y), (x-1, y+1), (x, y+1), (x+1, y+1)}. L’ambiente di riferimento e’ da intendersi toroidale, cosicche’ tutti gli individui possono contare su un intorno avente la stessa dimensione. Ad ogni iterazione, se tra i vicini di un certo individuo ve ne e’ un numero uguale o superiore ad un valore di soglia prefissato aventi credo 1, allora anche l’individuo in questione diventera’ (o rimarra’) un sostenitore dell’idea 1. In caso contrario, diventera’ (o rimarra’) sostenitore dell’idea 0.
All’avvio del programma, attraverso un menu a scelta rapida l’utente dovra’ scegliere una tra le seguenti opzioni:
1. Avvia una nuova simulazione
2. Scegli la directory nella quale salvare i risultati
3. Esci dal programma
L’utente dovra’ scegliere l’operazione da eseguire digitando il numero corrispondente e premendo il tasto INVIO. Si tenga presente che l’utente non dovra’ avere sempre accesso a tutte le funzionalita’ offerte dal programma. In particolare, la funzione 1 non sara’ attiva fino a quando l’utente non avra’ selezionato una directory valida (esistente e con privilegi di scrittura per l’utente corrente) attraverso la funzione 2.
Ulteriori note
- Il progetto dovra’ essere realizzato individualmente. • Il programma dovrà essere scritto in codice ANSI C standard, al fine di garantirne il più ampio livello di portabilità possibile. Non e’ ammesso, a meno che tale possibilità non sia esplicitata nel testo d’esame o nelle FAQ pubblicate su Dolly, l’utilizzo di comandi propri del sistema operativo in uso. Il programma dovra’ essere in grado di “girare” allo stesso modo su qualsiasi piattaforma.
- Il programma dovra’ essere adeguatamente commentato. Non abbiate paura di essere eccessivamente prolissi nei vostri commenti.
- Il programma dovra’ rispettare in maniera assolutamente rigorosa le specifiche illustrare in questo documento. Qualsiasi modifica rispetto allo schema ivi delineato ed apportata in maniera arbitraria verra’ considerata un errore. Per qualsiasi dubbio o chiarimento si prega di utilizzare il forum.
- L’ambiente di riferimento deve essere inteso come una matrice di valori interi. Ogni cella avra’ valore 0 o 1 a seconda del credo politico dell’individuo che la abita.
- All’avvio del programma, ogni cella sara’ occupata con probabilita’ 0.5 da un individuo con credo politico 0. Con la medesima probabilita’ la cella sara’ occupata da un individuo con credo politico 1.
Il programma dovra’ visualizzare a schermo lo stato corrente della matrice ad ogni iterazione, passando automaticamente dall’una alla successiva, ma lasciando all’utente tempo sufficiente per osservare i cambiamenti in atto.
- Il programma dovra’ appoggiarsi ad un file esterno, chiamato parametri.dat (contenuto nella stessa directory nella quale sono memorizzati i sorgenti del software), nel quale saranno specificati tutti i dettagli della simulazione. Il file in questione (ovviamente creato come plain text, senza alcun tipo di formattazione) dovra’ essere composto da sei righe. Nelle righe del file verranno specificati rispettivamente: il numero di righe dell’ambiente/matrice di riferimento, il numero di colonne, il valore di soglia da utilizzare per definire le nuove credenze politiche degli individui, il tempo di attesa (in millisecondi) tra la visualizzazione di due stati successivi della matrice, il comportamento da adottare in caso di uguaglianza con il valore del soglia.
- Al termine di ogni iterazione, il programma deve salvare alcune statistiche in appositi e separati file di testo (contenuti nella directory specificata attraverso la funzione 2 del menu principale). Queste statistiche sono: numero di sostenitori dell’idea 0, numero di sostenitori dell’idea 1, percentuale di sostenitore dell’idea 0 sul totale, percentuale di sostenitori dell’idea 1 sul totale. La struttura di questi files di testo deve essere estremamente semplice: si consiglia di scrivere semplicemente un valore per riga. Al termine del programma, in un file a parte dovra’ essere anche salvato lo stato finale dell’ambiente/matrice di riferimento.
- Lo studente dovra’ provare diverse condizioni sperimentali ed allegare al proprio software i risultati ottenuti da ciascuna di esse. Tali condizioni sono:
- matrice 50×50, 100 iterazioni, valore di soglia=4, l’individuo diventa/rimane sostenitore di 1 se il valore di soglia viene raggiunto;
- matrice 50×50, 100 iterazioni, valore di soglia=4, l’individuo diventa/rimane sostenitore di 0 se il valore di soglia viene raggiunto;
- matrice 50×50, 100 iterazioni, valore di soglia=3, l’individuo diventa/rimane sostenitore di 1 se il valore di soglia viene raggiunto;
- matrice 100×100, 1000 iterazioni, valore di soglia=4, l’individuo diventa/rimane sostenitore di 1 se il valore di soglia viene raggiunto.