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
Greenpeace
Dagli automi cellulari ad oggi (2/7)
Scritto da Leonida Castaldo il 02-05-2007 ore 11:38
Intel Parallel Studio XE
L’esempio riportato nel precedente articolo, descrive in modo esaustivo il comportamento dell’automa cellulare proposto da John Von Neumann all’inizio degli anni ‘50. Ciascuna cella (o pattern) può trovarsi in un dato istante in uno di ventinove possibili stati. Il processo autoriproduttivo dell’automa è in tal caso gestito attraverso lo scambio di messaggi tra celle adiacenti; in particolar modo, lo spostamento nello spazio bidimensionale si ottiene trasferendo lo stato di una cella x alla vicina cella y e resettando lo stato corrente della cella x.

L’autoriproduzione è garantita da un costruttore universale definito scegliendo alcune celle dell’automa cellulare e fissando per esso specifici valori di stato e regole di transizione, applicate tramite un apposito programma. Il processo autoriproduttivo è eseguito in due fasi: nella prima fase viene eseguito il programma per generare una copia del costruttore; nella seconda fase, viene duplicato il programma e la sua copia viene associata alla copia del costruttore.

Il lancio degli automi cellulari, si è avuto grazie ad un articolo di Martin Gardner pubblicato sulla prestigiosa rivista Scientific American, sulla quale presentò il lavoro del matematico inglese John Horton Conway. Quest’ultimo propose, all’inizio degli anni Settanta, uno studio su modelli di simulazione, mostrando un esempio che chiamò Life, successivamente battezzato The Game of Life.

Nella versione originale, è definita una griglia bidimensionale, teoricamente non limitata, sulla quale ogni cella rappresenta un organismo vivente. A differenza dell’automa cellulare proposto da Von Neumann, ogni organismo può trovarsi in uno di due stati, vivo o morto. Per distinguere graficamente le aree con organismi vivi da quelle con organismi morti, una cella che ospita un organismo vivo è marcata con un simbolo, mentre la cella che ospita un organismo morto, semplicemente non è marcata.

Anche in questo caso, ogni cella è vicina ad altre otto celle e ogni cella comunica con le vicine per scambiarsi informazioni relative allo stato dell’organismo ospite. E’ bene ricordare anche che per le leggi di evoluzione della popolazione:
  • un organismo vivo con quattro o più vicini vivi, alla generazione successiva (iterazione successiva), sarà morto per soffocamento;
  • un organismo vivo con uno o zero vicini vivi, alla generazione successiva sarà morto per solitudine;
  • un organismo vivo con due o tre vicini vivi, alla generazione successiva sarà ancora vivo;
  • un organismo morto con esattamente tre vicini vivi, alla generazione successiva rinascerà.
Lo stato di ogni cella viene valutato a ogni iterazione e i cambiamenti di stato avvengono tutti simultaneamente in un determinato istante; in questo modo le celle il cui stato deve cambiare, non influenza il cambiamento di stato delle celle vicine. In definitiva, il sistema evolve a scatti, in determinati periodi di tempo. Il gioco della vita può essere implementato facilmente in qualsiasi linguaggio di programmazione partendo dalle regole base e definendo altri stati ed altre leggi di evoluzione per adattarlo a casi specifici. Attualmente esistono molte varianti, ma il gioco lascia ancora tantissimo spazio all’immaginazione.
Precedente: Enterprise Service Bus
Successiva: Google trucchi e segreti (seconda edizione)
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.287 secondi.