gozforum [ Disinformazione e Controcultura ]

Life Game AUTOMA CELLULARE MATLAB

« Older   Newer »
  Share  
view post Posted on 17/8/2009, 19:32     +1   -1
Avatar

IN DISPERSIONE

Group:
FOUNDER
Posts:
14,802
Reputation:
+36
Location:
trinakaos---CT/SR

Status:


Lo so... a breve li metto tutti in un unico post.. il fatto è che non so ogni volta quanto mi dura la connessionionem. Comunque risolti vari problemi..ora l'inserimento dei dati avviene con il mouse. Alla fine mancano le ultime 2,3 cose e poi rimarrà solo di compilarlo ed è finito. Ricordando che lo scopo è simulare il gioco life (anche se l'automa di life segue una logica diversa ma questo è l'ultimo dei problemi https://digilander.libero.it/basecinque/conway/lifejs.htm) comunque alla fine ci siamo vicinissimi. Mentre sono conneso stò cercando la logica del gioco life e dovremmo esserci :ok:

prma del codice.. per chiarirvi le idee
CITAZIONE
Un automa cellulare è un sistema complesso formato da un numero finito di unità che interagiscono tra loro, utilizzato per effettuare simulazioni di fenomeni naturali.

Si immagini di avere un reticolo di punti e di inserirvi delle entità di un certo tipo (chiamate di solito cellule), queste entità potranno assumere un insieme finito di stati (vivo o morto, un colore, una forma ecc.), dopo un tempo prefissato tutte le entità cambieranno stato contemporaneamente in modo dipendente dal proprio stato attuale e dagli stati delle entità poste entro una certa distanza.

e riguardo al gioco life
CITAZIONE
Il gioco della vita (Game of Life in inglese) è un automa cellulare sviluppato dal matematico inglese John Conway sul finire degli anni '60. Il gioco della vita è l'esempio più famoso di automa cellulare: il suo scopo è quello di mostrare come comportamenti simili alla vita possano emergere da regole semplici e interazioni a molti corpi, principio che è alla base dell'ecobiologia, la quale si rifà anche alla teoria della complessità. Del gioco sono poi state sviluppate versioni con differenti topologie, ad esempio tridimensionali, come in questo sito, anche per Matlab, differenti regole biologiche, e differenti tipi di cellule.

CODICE
%------AUTOMA CELLULARE BIDIMENSIONALE 1.1 (Fredkin)------------
%                                            by g'OZ 08/09
%funziona bene, rispetta la logica. Per eventuali modifiche fate
%attenzione al fatto che l'orientamento è invertito,  nel  senso
%che la cella nord sarà a sud della cella centrale.
%­nota*:intorno di Von Neumann, per automi bidimensionali con
%­geometria rettangolare.
global A;
clc
clear
close all

A=zeros(100,100);
it=input('numero iterazioni????')

%­rispetto alla versione precedente, le cellule vive possono essere
%­inserite con il mouse. Questo, pur sembrando un ottima casa, in
%­realtà complica un pò le cose in quanto è più difficile inserire la
%coordinata esatta. Per questo motivo ho ridotto la lunghezza degli
%assi da 300 a 100, per non avere una griglia troppo fitta, ma questo.
%comporta che viene subito raggiunto il bordo. Onestamente
%­non ho avuto il tempo di testarlo per bene, in caso a breve le correzzioni
%Con un solo punto posto al centro (50,50) si dovrebbe evolvere per una
%­50ina di iterazioni prima di toccare il bordo



figure(1)
axis([0 100 0 100])
hold on
grid minor
%­Se non si vuole mettere tutte e 10 le cellule vive...basta premere invio
%dopo aver inserito quelle che ci servono!!!!
%ATTENZIONE*--->quando volete lasciare una cella vuota nel momento in cui
%               invio il cursore del mouse deve essere sulla finestra!!!!

[x1,y1] = ginput(1)
x1=int16(x1)
y1=int16(y1)
plot(x1,y1,'*m')
[x2,y2] = ginput(1)
x2=int16(x2)
y2=int16(y2)
plot(x2,y2,'*m')
[x3,y3] = ginput(1)
x3=int16(x3)
y3=int16(y3)
plot(x3,y3,'*m')
[x4,y4] = ginput(1)
x4=int16(x4)
y4=int16(y4)
plot(x4,y4,'*m')
[x5,y5] = ginput(1)
x5=int16(x5)
y5=int16(y5)
plot(x5,y5,'*m')
[x6,y6] = ginput(1)
x6=int16(x6)
y6=int16(y6)
plot(y6,x6,'*m')
[x6,y6] = ginput(1)
x7=int16(x7)
y7=int16(y7)
plot(x7,y7,'*m')
[x8,y8] = ginput(1)
x8=int16(x8)
y8=int16(y8)
plot(x8,y8,'*m')
[x9,y9] = ginput(1)
x9=int16(x9)
y9=int16(y9)
plot(x9,y9,'*m')
[x10,y10] = ginput(1)
x10=int16(x10)
y10=int16(y10)
plot(x10,y10,'*m')





%­X colonna Y riga

A(x1,y1)=[1];
A(x2,y2)=[1];
A(x3,y3)=[1];
A(x4,y4)=[1];
A(x5,y5)=[1];
A(x6,y6)=[1];
A(x7,y7)=[1];
A(x8,y8)=[1];
A(x9,y9)=[1];
A(x10,y10)=[1];

hold on
grid off






pause
   C=zeros(100,100)

     
for k=1:it

 [i,j]=find(A==1);

      l=length(i)
       
        for m=1:l
           
 
B(m)=A(i(m)+1,j(m))+A(i(m)-1,j(m))+A(i(m),j(m)+1)+A(i(m),j(m)-1);
centro(m)=rem(B(m),2);
if centro(m)==0
   C(i(m),j(m))=0;
else
   C(i(m),j(m))=1;
end


%­nord

Bn(m)=A(i(m),j(m))+A(i(m)+1,j(m)+1)+A(i(m)+2,j(m))+A(i(m)+1,j(m)-1);
nord(m)=rem(Bn(m),2);
if nord(m)==0
   C(i(m)+1,j(m))=0;
else
   C(i(m)+1,j(m))=1;
end

%­sud

Bs(m)=A(i(m),j(m))+A(i(m)-1,j(m)+1)+A(i(m)-1,j(m)-1)+A(i(m)-2,j(m));
Sud(m)=rem(Bs(m),2);

if Sud(m)==0
   C(i(m)-1,j(m))=0;
else
   C(i(m)-1,j(m))=1;
end

%est

Be(m)=A(i(m),j(m))+A(i(m),j(m)+2)+A(i(m)+1,j(m)+1)+A(i(m)-1,j(m)+1);
Est(m)=rem(Be(m),2);

if Est(m)==0
   C(i(m),j(m)+1)=0;
else
   C(i(m),j(m)+1)=1;
end

%­Ovest
Bo(m)=A(i(m),j(m))+A(i(m)+1,j(m)-1)+A(i(m),j(m)-2)+A(i(m)-1,j(m)-1);
Ovest(m)=rem(Bo(m),2);
if Ovest(m)==0
   C(i(m),j(m)-1)=[0];
else
   C(i(m),j(m)-1)=[1];
   
end
 end
A=C
[x,y]=find(C==1);
pause(0.2)
plot(x,y,'.m')
axis([0 100 0 100])
hold on
%Cambiando il flag di hold da off in on l'effetto cambia, per un certo
%­tipo di configurazioni risulta più interessante
         
grid off
drawnow

 

     


end

     



%Avviate, inserite la coordinate di quelle che volete siano le cellule
%­vive. X-->Colonna Y-->Riga, dopo di che inserite il numero di iterazioni
%­xcontrariamente alla versione precedente non ci sono più i problemi di
%­lentezza quindi potete mettere anche un numero significativo. Un unico
%avvertimento. Non so bene come si comporta avvicinandosi ai bordi, quindi
%cercate di far partire l'evoluzione dell'automa da una posizione centrale
% non mettete (x,y)=(1,1) ecc.


come c'è scritto nei commenti rispetto alla versione precedente, le cellule vive possono essere inserite con il mouse. Questo da un lato è bello, però dall'altro rende l'inserimento meno preciso, appunto per questo motivo ho dovuto diminuire la dimensione degli assi... questo però comporta che il bordo viene facilmente raggiunto. Nella prossima versione cerco di risolvere questo problema..
 
Top
view post Posted on 28/8/2009, 13:57     +1   -1
Avatar

IN DISPERSIONE

Group:
FOUNDER
Posts:
14,802
Reputation:
+36
Location:
trinakaos---CT/SR

Status:


 
Top
1 replies since 17/8/2009, 19:29   279 views
  Share