Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Dagli automi cellulari ad oggi (3/7)
Scritto da Leonida Castaldo il 03-05-2007 ore 08:45
Intel Parallel Studio XE
Nel precedente articolo, ho descritto la variante di automa cellulare proposta da John Horton Conway, battezzata The Game of Life. Analizzerò ora l’automa in ogni sua parte suggerendo una soluzione implementativa, soffermandomi sugli aspetti principali.

Life si svolge su una griglia divisa in celle di uguali dimensioni e caratteristiche. La struttura dati portante non può che essere una matrice o meglio un array bidimensionale di dimensione mXn. Ovviamente la dimensione della matrice indica il numero massimo di celle della griglia, di conseguenza è indicativo del numero massimo di organismi gestibili simultaneamente in un determinato istante.

Analizziamo ora gli stati delle celle: ogni cella della griglia può ospitare un organismo vivo o uno morto; per rappresentare i due stati è più pratico usare un tipo booleano, associando i valori TRUE e FALSE rispettivamente agli stati vivo e morto. Ricorrendo ad una pratica progettazione modulare, occorre implementare anzitutto una routine per costruire la griglia (matrice), chiamiamola InitGrid(). Per rendere il gioco interessante, si può fornire in ingresso alla routine di inizializzazione il numero massimo di organismi che si desidera gestire, in modo tale da poter sperimentare il gioco in uno spazio di dimensione variabile a ogni partita.

InitGrid() genera prima la griglia, poi la inizializza a FALSE restituendo un riferimento ad essa; ipotizzando la necessità di resettare il gioco in un determinato istante, è possibile implementare separatamente la routine di inizializzazione da quella di generazione della griglia, ed anzi ritengo che questa seconda soluzione sia più pratica ed elegante.

E’ ora necessario impostare uno stato iniziale per ogni cella: questa operazione richiede l’implementazione di una routine StartGrid(). E’ consigliabile costruire un menù che consenta di scegliere se assegnare gli stati manualmente o in modalità casuale; ad ogni cella della griglia dovrà essere assegnato un valore booleano corrispondente ad un determinato stato.

Le routine InitGrid() e StartGrid(), si basano su uno stesso blocco di codice principale per la visita della matrice, ovviamente si tratta di un ciclo iterativo annidato. Dato che si conosce a priori la dimensione della matrice, è opportuno ricorrere ad un ciclo for. Il blocco di codice in C-like dev’essere strutturato come segue:
  1. <span style="font-size:1.0em">…
  2. for(i = 0; i < m; i++) // si sposta lungo le righe della matrice/griglia
  3. 	for(j = 0; j < n; j++) // si sposta lungo le colonne della matrice/griglia
  4. 	{
  5. Inizializza a FALSE | assegna stato casuale | assegna stato manuale;
  6. }
  7. </span>
Lo stesso blocco di codice si ripete anche nella routine per la stampa a video della griglia ShowGrid(). Restano da analizzare le due routine più “complesse” dal punto di vista implementativo, ovvero le routine per l’analisi dello stato dei vicini di ogni cella e quella per l’applicazione delle regole di transizione.
Precedente: Progetti di calcolo distribuito
Successiva: Un testo sulle architetture di integrazione
Intervento di Diego De Zan a.k.a. simulacron del 04-05-2007 ore 08:27, Pinerolo (TO)
Conte
Conte

(632 interventi)
Iscritto il 13-07-2005
Devo sbrigarmi con i miei articoli....
Altrimenti qui mi rubano il materiale per i miei articoli.
....E' uno scherzo.....Complimenti per l'articolo....Sul serio....
Intervento di Leonida Castaldo a.k.a. neoangelus del 04-05-2007 ore 23:48, Torre del greco (NA)
Cavaliere
Cavaliere

(102 interventi)
Iscritto il 01-12-2002
Citazione:
Devo sbrigarmi con i miei articoli....
Altrimenti qui mi rubano il materiale per i miei articoli.
....E' uno scherzo.....Complimenti per l'articolo....Sul serio....

Ecco e son due, devo iniziare ad approfondire un po meno i miei articoli, comunque sul finale diventerà molto interessante;)
Intervento di Diego De Zan a.k.a. simulacron del 05-05-2007 ore 00:08, Pinerolo (TO)
Conte
Conte

(632 interventi)
Iscritto il 13-07-2005
Citazione:
.....omissis.....
Ecco e son due, devo iniziare ad approfondire un po meno i miei articoli, comunque sul finale diventerà molto interessante;)

No...il mio post era, volutamente scherzoso; se non ci fosse stato Conway, forse, non mi sarei interessato di intelligenza artificiale.
I suoi automi hanno una somiglianza inquietante con dei modelli primitivi di eccitazione-inibizione neurali....
Intervento di Leonida Castaldo a.k.a. neoangelus del 07-05-2007 ore 14:07, Torre del greco (NA)
Cavaliere
Cavaliere

(102 interventi)
Iscritto il 01-12-2002
Citazione:
No...il mio post era, volutamente scherzoso; se non ci fosse stato Conway, forse, non mi sarei interessato di intelligenza artificiale.
I suoi automi hanno una somiglianza inquietante con dei modelli primitivi di eccitazione-inibizione neurali....

Direi piuttosto che la similitudine con le reti neureali è evidente, per questo ho deciso di scrivere questa serie di articoli, trovo siano un argomento molto interessante per gli "appassionati" di reti neurali e IA in genere, un altro esempio di come la semplicità e la linearità possa condurre a mete ben più complesse, sottolineando il genio dei pionieri dell'informatica, Von Neumann in primis e Conway.
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.519 secondi.