Automat Cel·lular: El joc de la Vida
Un automat cel·lular, introduït pel matemàtic John H. Conway en1970, és un sistema en el que el valor de cada component (cel·la) depen de les seves veines i unes determinades regles.
L'automat es pot representar com una matriu de dimensions fixades i que a cada cel·la te un valor (estat) que pot variar al llarg del temps segons les regles de comportament de l'automat.
El Joc de la Vida:
En en nostre cas l'estat de cada cel·la serà binari (viva o morta) i les regles de comportament permetran canviar aquest estat d'una generació a la següent.
Regles de comportament:
- Una cel·la viva amb menys de 2 veïns vius, mor per soledat.
- Una cel·la viva amb més de 3 veïns vius, mor per sobrepoblació.
- Una cel·la viva amb 2 o 3 veïns vius, sobreviu a la següent generació.
- Una cel·la morta amb exactament 3 veïns vius, reviu.
Generació Inicial:
Pel moment inicial generarem una població de manera aleatòria
% Generació inicial
m=40; %mides inicials
n=40;
genOrig=round(rand(m,n));
spy(genOrig);
celVivesOrig=size(find(genOrig ~= 0),1)
Següents generacions:
Ara a cada generació s'ha de passar per totes del cel·les i aplicar les regles de comportament.
figure()
genAnt=genOrig;
numGeneracions=50; %totla de generacions
for g=1:numGeneracions
genAct=zeros(size(genAnt));
for i=2:m-1
for j=2:n-1
% aplicar regles
veins=(genAnt(i+1,j)+genAnt(i-1,j)+genAnt(i,j+1)+genAnt(i,j-1)+genAnt(i+1,j+1)...
+genAnt(i+1,j-1)+genAnt(i-1,j+1)+genAnt(i-1,j-1));
if (genAnt(i,j)>0)
if (veins<2 ||veins>3 )
genAct(i,j)=0;
else
genAct(i,j)=1;
end
else
if (veins==3)
genAct(i,j)=1;
end
end
end
end
genAnt=genAct;
spy(genAnt);
pause(0.1)
drawnow;
end
celVivesFinal=size(find(genAct ~= 0),1)