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:
  1. Una cel·la viva amb menys de 2 veïns vius, mor per soledat.
  2. Una cel·la viva amb més de 3 veïns vius, mor per sobrepoblació.
  3. Una cel·la viva amb 2 o 3 veïns vius, sobreviu a la següent generació.
  4. 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)
celVivesOrig = 792

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)
celVivesFinal = 92

Exemples atractius:

El Joc de la Vida és un exemple de sistema dinàmic discret on es poden apreciar certes característiques com configuracions d'equilibri (com les de la figura), desplaçaments, etc.
En la pàgina del professor Rafael Ramírez podeu trobar una presentació explicant més detalls sobre els exemples que afegim a continuació.
Feu 50 generacions a partir d'una generació original de mida 51x51 a partir d'una matriu de zeros i els uns situats:
  1. En les files parelles.
  2. En les files i columnes parelles.
  3. En les files o columnes parelles.
  4. En les k-diagonals amb -1 <= k <= 1
  5. En els elements(i,j) tals que 2 <= i, j <= 26.
  6. Segons la figura següent:

Generació Original a partir d'una imatge binària

Hi ha moltes formes de triar la configuració de la generació original, una d'elles és carregar una imatge binària com es va fer a la pràctica sobre manipulació de matrius.
Si carregeu la imatge BinR2D2.png que es va fer servir en aquella pràctica com a generació original i feu 100 generacions contesteu:
  1. Quantes cel·les queden vives a la última generació? Sol: 4032
  2. Quantes generacions (sense comptar g=0) ha estat viva la cel·la (150,120)? Sol: 14
  3. Quantes vegades ha canviat d'estat la cel·la (60,70)? Sol: 9
  4. En quina generació d'entre la 10 i la 100 hi havia més cel·les vives i quantes n'hi havia? Sol: g= 12, vives = 11470
(c) Numerical Factory, 2019