Skip to content

Definició de l'autòmat cel·lular Èter

Jaume Ribas edited this page Jan 6, 2024 · 3 revisions

Èter

Autòmat cel·lular en el qual cada cel·la de la quadrícula té un valor numèric enter. Aquest valor es transfereix entre cel·les veïnes seguint un conjunt de regles. El valor total de la quadrícula sempre es conserva.

Definició:

A cada pas, les següents accions s'executen per a cada cel·la:

  1. Fer una llista de les cel·les veïnes, del veïnatge de von Neumann, amb valor menor al de la cel·la actual. Si cap cel·la compleix aquesta condició, no executar cap més acció.
  2. Crear un valor temporal per a cada cel·la de la llista anterior, inicialitzat a zero.
  3. Comparar el valor de la cel·la actual amb el valor més gran d'entre totes les cel·les de la llista.
  4. Prendre la diferència entre aquests dos valors, restar-la del valor de la cel·la actual i dividir-la, amb divisió entera, entre totes les cel·les de la llista i la cel·la actual. El residu de la divisió es retorna al valor de la cel·la actual.
  5. Sumar el quocient de la divisió anterior als valors temporals de cada cel·la de la llista.
  6. També sumar aquest quocient al valor de la cel·la actual.
  7. Transferir a la cel·la, o cel·les, de la llista, amb valor igual al valor més gran d'entre totes les cel·les de la llista, el seu valor temporal corresponent. I treure-les de la llista.
  8. Si la llista no ha quedat buida, tornar a l'acció 3. Cal destacar que el valor de la cel·la actual pot haver-se reduït, mentre que el valor de les cel·les que queden a la llista no ha canviat. Només els seus valors temporals poden haver augmentat.

Els valors de les cel·les de la quadrícula, en el següent pas del model, són el resultat de sumar al valor restant de cadascuna, els valors que els han transferit les seves cel·les veïnes.

Ja que el valor que una cel·la transfereix a una de les seves veïnes depèn dels valors de les seves altres veïnes, no n'hi ha prou amb només conèixer el valor d'una cel·la i el seu veïnatge de von Neumann, en un pas concret, per a calcular el valor que aquesta cel·la tindrà en el següent pas.

Exemple en 2D:

Pas 0

                
      101      
                 

Comença amb una quadrícula infinita on totes les cel·les tenen valor 0, excepte una cel·la que té valor 101.

Executar les accions per a la cel·la amb valor 101:

  1. Fer una llista de les cel·les veïnes, del veïnatge de von Neumann, amb valor menor al de la cel·la actual. En aquest exemple, les quatre veïnes tenen un valor menor (0):

    Veïna Valor
    DALT 0
    BAIX 0
    ESQUERRA 0
    DRETA 0
  2. Crear valors temporals:

    Veïna Valor Valor temporal
    DALT 0 0
    BAIX 0 0
    ESQUERRA 0 0
    DRETA 0 0
  3. Comparar el valor de la cel·la actual (101) amb el valor més gran d'entre totes les cel·les de la llista (0):

    101 - 0 = 101

  4. Prendre la diferència entre aquests dos valors i restar-la del valor de la cel·la actual:

    101 - 101 = 0

    Dividir-la, amb divisió entera, entre totes les cel·les de la llista (4) i la cel·la actual:

    101/(4 + 1) = 20

    El residu de la divisió (1) es retorna al valor de la cel·la actual:

    0 + 101%5 = 1

  5. Sumar el quocient de la divisió anterior (20) als valors temporals de cada cel·la de la llista:

    Veïna Valor Valor temporal
    DALT 0 20
    BAIX 0 20
    ESQUERRA 0 20
    DRETA 0 20
  6. També sumar aquest quocient al valor de la cel·la actual:

    1 + 20 = 21

  7. Transferir a la cel·la, o cel·les, de la llista, amb valor igual al valor més gran d'entre totes les cel·les de la llista (0), el seu valor temporal corresponent:

    DALT +20,
    BAIX +20,
    ESQUERRA +20,
    DRETA +20

    I treure-les de la llista:

    Veïna Valor Valor temporal
  8. La llista està buida.

La configuració resultant és la següent:

Pas 1

         
    20    
  20 21 20  
    20    
         

Executar les accions de nou:

Cel·la de dalt amb valor 20:

  1. En aquest cas, només afegim tres cel·les veïnes a la llista, ja que l'altra veïna té un valor més gran que el de la cel·la actual (BAIX: 21):

    Veïna Valor
    DALT 0
    ESQUERRA 0
    DRETA 0
  2. Crear valors temporals:

    Veïna Valor Valor temporal
    DALT 0 0
    ESQUERRA 0 0
    DRETA 0 0
  3. Comparar el valor de la cel·la actual (20) amb el valor més gran d'entre totes les cel·les de la llista (0):

    20 - 0 = 20

  4. Prendre la diferència entre aquests dos valors i restar-la del valor de la cel·la actual:

    20 - 20 = 0

    Dividir-la, amb divisió entera, entre totes les cel·les de la llista (3) i la cel·la actual:

    20/(3 + 1) = 5

    El residu de la divisió (0) es retorna al valor de la cel·la actual:

    0 + 20%4 = 0

  5. Sumar el quocient de la divisió anterior (5) als valors temporals de cada cel·la de la llista:

    Veïna Valor Valor temporal
    DALT 0 5
    ESQUERRA 0 5
    DRETA 0 5
  6. També sumar aquest quocient al valor de la cel·la actual:

    0 + 5 = 5

  7. Transferir a la cel·la, o cel·les, de la llista, amb valor igual al valor més gran d'entre totes les cel·les de la llista (0), el seu valor temporal corresponent:

    DALT +5,
    ESQUERRA +5,
    DRETA +5

    I treure-les de la llista:

    Veïna Valor Valor temporal
  8. La llista està buida.

Per a totes les altres cel·les amb valor 20, les accions seran equivalents a les anteriors, només canviant les direccions de les veïnes.

Cel·la central amb valor 21:

  1. Fer una llista de les cel·les veïnes, del veïnatge de von Neumann, amb valor menor al de la cel·la actual:

    Veïna Valor
    DALT 20
    BAIX 20
    ESQUERRA 20
    DRETA 20
  2. Crear valors temporals:

    Veïna Valor Valor temporal
    DALT 20 0
    BAIX 20 0
    ESQUERRA 20 0
    DRETA 20 0
  3. Comparar el valor de la cel·la actual (21) amb el valor més gran d'entre totes les cel·les de la llista (20):

    21 - 20 = 1

  4. Prendre la diferència entre aquests dos valors i restar-la del valor de la cel·la actual:

    21 - 1 = 20

    Dividir-la, amb divisió entera, entre totes les cel·les de la llista (4) i la cel·la actual:

    1/(4 + 1) = 0

    El residu de la divisió (1) es retorna al valor de la cel·la actual:

    20 + 1%5 = 21

  5. Sumar el quocient de la divisió anterior (0) als valors temporals de cada cel·la de la llista:

    Veïna Valor Valor temporal
    DALT 20 0
    BAIX 20 0
    ESQUERRA 20 0
    DRETA 20 0
  6. També sumar aquest quocient al valor de la cel·la actual:

    21 + 0 = 21

  7. Transferir a la cel·la, o cel·les, de la llista, amb valor igual al valor més gran d'entre totes les cel·les de la llista (0), el seu valor temporal corresponent:

    DALT +0,
    BAIX +0,
    ESQUERRA +0,
    DRETA +0

    I treure-les de la llista:

    Veïna Valor Valor temporal
  8. La llista està buida.

En aquest cas, les accions no tenen cap efecte.

La configuració resultant és la següent:

Pas 2

    5    
  10 5 10  
5 5 21 5 5
  10 5 10  
    5    

Cal destacar que les cel·les dels cantons, amb valor 10, han rebut 5 de dues de les seves veïnes. Aquests valors se sumen per a obtenir el valor resultant.

Executar les accions de nou:

Cel·la del cantó superior esquerra amb valor 10:

  1. En aquest cas, totes les veïnes tenen menor valor però amb dos valors diferents:

    Veïna Valor
    DALT 0
    BAIX 5
    ESQUERRA 0
    DRETA 5
  2. Crear valors temporals:

    Veïna Valor Valor temporal
    DALT 0 0
    BAIX 5 0
    ESQUERRA 0 0
    DRETA 5 0
  3. Comparar el valor de la cel·la actual (10) amb el valor més gran d'entre totes les cel·les de la llista (5):

    10 - 5 = 5

  4. Prendre la diferència entre aquests dos valors i restar-la del valor de la cel·la actual:

    10 - 5 = 5

    Dividir-la, amb divisió entera, entre totes les cel·les de la llista (4) i la cel·la actual:

    5/(4 + 1) = 1

    El residu de la divisió (0) es retorna al valor de la cel·la actual:

    5 + 5%5 = 5

  5. Sumar el quocient de la divisió anterior (1) als valors temporals de cada cel·la de la llista:

    Veïna Valor Valor temporal
    DALT 0 1
    BAIX 5 1
    ESQUERRA 0 1
    DRETA 5 1
  6. També sumar aquest quocient al valor de la cel·la actual:

    5 + 1 = 6

  7. Transferir a la cel·la, o cel·les, de la llista, amb valor igual al valor més gran d'entre totes les cel·les de la llista (5), el seu valor temporal corresponent:

    BAIX +1,
    DRETA +1

    I treure-les de la llista:

    Veïna Valor Valor temporal
    DALT 0 1
    ESQUERRA 0 1
  8. En aquest cas, la llista no ha quedat buida, així que es torna a l'acció 3.
  1. Comparar el valor que queda en la cel·la actual (6) amb el valor més gran d'entre totes les cel·les de la llista (0):

    6 - 0 = 6

  2. Prendre la diferència entre aquests dos valors i restar-la del valor de la cel·la actual:

    6 - 6 = 0

    Dividir-la, amb divisió entera, entre totes les cel·les de la llista (2) i la cel·la actual:

    6/(2 + 1) = 2

    El residu de la divisió (0) es retorna al valor de la cel·la actual:

    0 + 6%3 = 0

  3. Sumar el quocient de la divisió anterior (2) als valors temporals de cada cel·la de la llista:

    Veïna Valor Valor temporal
    DALT 0 3
    ESQUERRA 0 3
  4. També sumar aquest quocient al valor de la cel·la actual:

    0 + 2 = 2

  5. Transferir a la cel·la, o cel·les, de la llista, amb valor igual al valor més gran d'entre totes les cel·les de la llista (0), el seu valor temporal corresponent:

    DALT +3,
    ESQUERRA +3

    I treure-les de la llista

    Veïna Valor Valor temporal
  6. La llista està buida.

Executar les accions per a la resta de cel·les per a obtenir la configuració del següent pas:

Pas 3

      1      
    4 2 4    
  4 2 10 2 4  
1 2 10 9 10 2 1
  4 2 10 2 4  
    4 2 4    
      1      

Continuar fins que el valor estigui tan repartit que les accions no tinguin cap efecte.

Pas 4

                 
      1 1 1      
    2 2 4 2 2    
  1 2 6 4 6 2 1  
  1 4 4 9 4 4 1  
  1 2 6 4 6 2 1  
    2 2 4 2 2    
      1 1 1      
                 

Pas 5

                 
      1 2 1      
    2 3 3 3 2    
  1 3 4 5 4 3 1  
  2 3 5 5 5 3 2  
  1 3 4 5 4 3 1  
    2 3 3 3 2    
      1 2 1      
                 

Pas 6

        1        
      2 1 2      
    2 2 4 2 2    
  2 2 4 4 4 2 2  
1 1 4 4 5 4 4 1 1
  2 2 4 4 4 2 2  
    2 2 4 2 2    
      2 1 2      
        1        

Pas 7

        1        
      2 2 2      
    2 2 3 2 2    
  2 2 4 4 4 2 2  
1 2 3 4 5 4 3 2 1
  2 2 4 4 4 2 2  
    2 2 3 2 2    
      2 2 2      
        1        

FI