gozforum [ Disinformazione e Controcultura ]

AUTOMA CELLULARE Fredkin MATLAB, risolti problemi di velocità

« Older   Newer »
  Share  
icon1  view post Posted on 15/8/2009, 02:32     +1   -1
Avatar

IN DISPERSIONE

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

Status:


E finalmente... dopo 2 giorni (o forse 3) ecco il nuovo codice corretto e più performante dell'automa cellulare bidimensionale...non dimenticando che lo scopo finale è quello di riuscire a fare il gioco "life" e alla fine la versione gozzolana di tale gioco...alcune note
-cambiando da hold on a hold off nella riga 184 si hanno risultati diversi, per alcune configurazioni iniziali è meglio hold off per altre on
-Non ho risolto la questione dei bordi (sono stanco, vista l'ora!!!) quindi bisogna tenersi al centro, o eventualmente aumentare le dimensioni di A,C e degli assi (tutti con medesimi valori)
-Il prossimo passo consisterà nel fare in modo che invece di scrivere manualmente le coordinate delle cellule vive, besì indicarle con il mouse (sempre se si può fare) per questo spero che qualcuno mi aiuti :)
-contrariamente alla verione precedente, questo è molto più veloce quindi si possono fare tutte le iterazioni che si vogliono (sempre mantenendosi lontani dai bordi)
domani posto la foto di qualche bella configurazione

CODICE
%------AUTOMA CELLULARE BIDIMENSIONALE 1.0 (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


A=zeros(300,300);


disp('iserisci cordinare della prima cellula')
x1=input('x=')
y1=input('y=')
disp('iserisci cordinare della seconda cellula')
x2=input('x=')
y2=input('y=')
disp('iserisci cordinare della terza cellula')
x3=input('x=')
y3=input('y=')
disp('iserisci cordinare della quarta cellula')
x4=input('x=')
y4=input('y=')
disp('iserisci cordinare della quinta cellula')
x5=input('x=')
y5=input('y=')
disp('iserisci cordinare della sesta cellula')
x6=input('x=')
y6=input('y=')
disp('iserisci cordinare della settima cellula')
x7=input('x=')
y7=input('y=')
disp('iserisci cordinare della ottava cellula')
x8=input('x=')
y8=input('y=')
disp('iserisci cordinare della nona cellula')
x9=input('x=')
y9=input('y=')

it=input('numero iterazioni????')

%­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];

hold on
plot(y1,x1,'*b')
plot(y2,x2,'*b')
plot(y3,x3,'*b')
plot(y4,x4,'*b')
plot(y5,x5,'*b')
plot(y6,x6,'*b')
plot(y7,x7,'*b')
plot(y8,x8,'*b')

plot(y9,x9,'*b')
axis([0 300 0 300])
pause

 
   C=zeros(300,300)

     
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

%­il problema è proprio qui..quindi ci vuole una matrice solo per i calcoli
%­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 300 0 300])
hold on
         
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.
 
Top
krylù
view post Posted on 16/8/2009, 07:32     +1   -1




gozzolomi hai letto nel pensiero su questo tipo di simulazioni ci pensavo da un pò, io volevo provare a farne uno con i dati della tesi, quando finisco di elaborarli ci provo, ma quindi ci vuole matlab?
 
Top
view post Posted on 16/8/2009, 10:02     +1   -1
Avatar

IN DISPERSIONE

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

Status:


dioende cosa devi fare... comunque se vuoi giocare con gli automi..mi sembra in offtopic c'è un post di igor che linka al gioco life.. vacci e giocaci un pò è divertente.. e quelli sono automi cellulari
 
Top
view post Posted on 28/8/2009, 13:58     +1   -1
Avatar

IN DISPERSIONE

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

Status:


 
Top
3 replies since 15/8/2009, 02:32   141 views
  Share