Skip to content

Definición del autómata celular Éter

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

Éter

Autómata celular en el cual cada celda de la cuadrícula tiene un valor numérico entero. Este valor se transfiere entre celdas vecinas siguiendo un conjunto de reglas. El valor total de la cuadrícula siempre se conserva.

Definición:

En cada paso, las siguientes acciones se ejecutan para cada celda:

  1. Hacer una lista de las celdas vecinas, de la vecindad de von Neumann, cuyo valor sea menor al de la celda actual. Si ninguna celda cumple esta condición, no ejecutar ninguna otra acción.
  2. Crear un valor temporal para cada celda de la lista anterior, inicializado a cero.
  3. Comparar el valor de la celda actual con el mayor valor de entre todas las celdas de la lista.
  4. Tomar la diferencia entre estos dos valores, restarla del valor de la celda actual y dividirla, con división entera, entre todas las celdas de la lista y la celda actual. El resto de la división se devuelve al valor de la celda actual.
  5. Sumar el cociente de la división anterior a los valores temporales de cada celda de la lista.
  6. También sumar este cociente al valor de la celda actual.
  7. Transferir a la celda, o celdas, de la lista, cuyo valor sea el mayor de entre todas las celdas de la lista, su valor temporal correspondiente. Y sacarlas de la lista.
  8. Si la lista no ha quedado vacía, volver a la acción 3. Cabe destacar que el valor de la celda actual puede haberse reducido, mientras que el valor de las celdas que quedan en la lista no ha cambiado. Solo sus valores temporales pueden haber aumentado.

Los valores de las celdas de la cuadrícula, en el siguiente paso del modelo, son el resultado de sumar al valor restante de cada una, los valores que les han transferido sus celdas vecinas.

Debido a que el valor que una celda transfiere a una de sus vecinas depende de los valores de sus otras vecinas, no basta con solo conocer el valor de una celda y su vecindad de von Neumann, en un paso dado, para calcular el valor que esta celda tendrá en el siguiente paso.

Ejemplo en 2D:

Paso 0

                
      101      
                 

Empieza con una cuadrícula infinita dónde todas las celdas tienen valor 0, excepto una celda que tiene valor 101.

Ejecutar las acciones para la celda con valor 101:

  1. Hacer una lista de las celdas vecinas, de la vecindad de von Neumann, cuyo valor sea menor al de la celda actual. En este ejemplo, las cuatro vecinas tienen un valor menor (0):

    Vecina Valor
    ARRIBA 0
    ABAJO 0
    IZQUIERDA 0
    DERECHA 0
  2. Crear valores temporales:

    Vecina Valor Valor temporal
    ARRIBA 0 0
    ABAJO 0 0
    IZQUIERDA 0 0
    DERECHA 0 0
  3. Comparar el valor de la celda actual (101) con el mayor valor de entre todas las celdas de la lista (0):

    101 - 0 = 101

  4. Tomar la diferencia entre estos dos valores y restarla del valor de la celda actual:

    101 - 101 = 0

    Dividirla, con división entera, entre todas las celdas de la lista (4) y la celda actual:

    101/(4 + 1) = 20

    El resto de la división (1) se devuelve al valor de la celda actual:

    0 + 101%5 = 1

  5. Sumar el cociente de la división anterior (20) a los valores temporales de cada celda de la lista:

    Vecina Valor Valor temporal
    ARRIBA 0 20
    ABAJO 0 20
    IZQUIERDA 0 20
    DERECHA 0 20
  6. También sumar este cociente al valor de la celda actual:

    1 + 20 = 21

  7. Transferir a la celda, o celdas, de la lista, cuyo valor sea el mayor de entre todas las celdas de la lista (0), su valor temporal correspondiente:

    ARRIBA +20,
    ABAJO +20,
    IZQUIERDA +20,
    DERECHA +20

    Y sacarlas de la lista:

    Vecina Valor Valor temporal
  8. La lista está vacía.

La configuración resultante es la siguiente:

Paso 1

         
    20    
  20 21 20  
    20    
         

Ejecutar las acciones de nuevo:

Celda superior con valor 20:

  1. En este caso, solo añadimos tres celdas vecinas a la lista, ya que la otra vecina tiene un valor mayor que el de la celda actual (ABAJO: 21):

    Vecina Valor
    ARRIBA 0
    IZQUIERDA 0
    DERECHA 0
  2. Crear valores temporales:

    Vecina Valor Valor temporal
    ARRIBA 0 0
    IZQUIERDA 0 0
    DERECHA 0 0
  3. Comparar el valor de la celda actual (20) con el mayor valor de entre todas las celdas de la lista (0):

    20 - 0 = 20

  4. Tomar la diferencia entre estos dos valores y restarla del valor de la celda actual:

    20 - 20 = 0

    Dividirla, con división entera, entre todas las celdas de la lista (3) y la celda actual:

    20/(3 + 1) = 5

    El resto de la división (0) se devuelve al valor de la celda actual:

    0 + 20%4 = 0

  5. Sumar el cociente de la división anterior (5) a los valores temporales de cada celda de la lista:

    Vecina Valor Valor temporal
    ARRIBA 0 5
    IZQUIERDA 0 5
    DERECHA 0 5
  6. También sumar este cociente al valor de la celda actual:

    0 + 5 = 5

  7. Transferir a la celda, o celdas, de la lista, cuyo valor sea el mayor de entre todas las celdas de la lista (0), su valor temporal correspondiente:

    ARRIBA +5,
    IZQUIERDA +5,
    DERECHA +5

    Y sacarlas de la lista:

    Vecina Valor Valor temporal
  8. La lista está vacía.

Para todas las demás celdas con valor 20, las acciones serán equivalentes a las anteriores, solo cambiando las direcciones de las vecinas.

Celda central con valor 21:

  1. Hacer una lista de las celdas vecinas, de la vecindad de von Neumann, cuyo valor sea menor al de la celda actual:

    Vecina Valor
    ARRIBA 20
    ABAJO 20
    IZQUIERDA 20
    DERECHA 20
  2. Crear valores temporales:

    Vecina Valor Valor temporal
    ARRIBA 20 0
    ABAJO 20 0
    IZQUIERDA 20 0
    DERECHA 20 0
  3. Comparar el valor de la celda actual (21) con el mayor valor de entre todas las celdas de la lista (20):

    21 - 20 = 1

  4. Tomar la diferencia entre estos dos valores y restarla del valor de la celda actual:

    21 - 1 = 20

    Dividirla, con división entera, entre todas las celdas de la lista (4) y la celda actual:

    1/(4 + 1) = 0

    El resto de la división (1) se devuelve al valor de la celda actual:

    20 + 1%5 = 21

  5. Sumar el cociente de la división anterior (0) a los valores temporales de cada celda de la lista:

    Vecina Valor Valor temporal
    ARRIBA 20 0
    ABAJO 20 0
    IZQUIERDA 20 0
    DERECHA 20 0
  6. También sumar este cociente al valor de la celda actual:

    21 + 0 = 21

  7. Transferir a la celda, o celdas, de la lista, cuyo valor sea el mayor de entre todas las celdas de la lista (0), su valor temporal correspondiente:

    ARRIBA +0,
    ABAJO +0,
    IZQUIERDA +0,
    DERECHA +0

    Y sacarlas de la lista:

    Vecina Valor Valor temporal
  8. La lista está vacía.

En este caso, las acciones no surten ningún efecto.

La configuración resultante es la siguiente:

Paso 2

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

Cabe destacar que las celdas de las esquinas, con valor 10, han recibido 5 de dos de sus vecinas. Estos valores se suman para obtener el valor resultante.

Ejecutar las acciones de nuevo:

Celda de la esquina superior izquierda con valor 10:

  1. En este caso, todas las vecinas tienen menor valor pero con dos valores distintos:

    Vecina Valor
    ARRIBA 0
    ABAJO 5
    IZQUIERDA 0
    DERECHA 5
  2. Crear valores temporales:

    Vecina Valor Valor temporal
    ARRIBA 0 0
    ABAJO 5 0
    IZQUIERDA 0 0
    DERECHA 5 0
  3. Comparar el valor de la celda actual (10) con el mayor valor de entre todas las celdas de la lista (5):

    10 - 5 = 5

  4. Tomar la diferencia entre estos dos valores y restarla del valor de la celda actual:

    10 - 5 = 5

    Dividirla, con división entera, entre todas las celdas de la lista (4) y la celda actual:

    5/(4 + 1) = 1

    El resto de la división (0) se devuelve al valor de la celda actual:

    5 + 5%5 = 5

  5. Sumar el cociente de la división anterior (1) a los valores temporales de cada celda de la lista:

    Vecina Valor Valor temporal
    ARRIBA 0 1
    ABAJO 5 1
    IZQUIERDA 0 1
    DERECHA 5 1
  6. También sumar este cociente al valor de la celda actual:

    5 + 1 = 6

  7. Transferir a la celda, o celdas, de la lista, cuyo valor sea el mayor de entre todas las celdas de la lista (5), su valor temporal correspondiente:

    ABAJO +1,
    DERECHA +1

    Y sacarlas de la lista:

    Vecina Valor Valor temporal
    ARRIBA 0 1
    IZQUIERDA 0 1
  8. En este caso, la lista no ha quedado vacía, así que se vuelve a la acción 3.
  1. Comparar el valor que queda en la celda actual (6) con el mayor valor de entre todas las celdas de la lista (0):

    6 - 0 = 6

  2. Tomar la diferencia entre estos dos valores y restarla del valor de la celda actual:

    6 - 6 = 0

    Dividirla, con división entera, entre todas las celdas de la lista (2) y la celda actual:

    6/(2 + 1) = 2

    El resto de la división (0) se devuelve al valor de la celda actual:

    0 + 6%3 = 0

  3. Sumar el cociente de la división anterior (2) a los valores temporales de cada celda de la lista:

    Vecina Valor Valor temporal
    ARRIBA 0 3
    IZQUIERDA 0 3
  4. También sumar este cociente al valor de la celda actual:

    0 + 2 = 2

  5. Transferir a la celda, o celdas, de la lista, cuyo valor sea el mayor de entre todas las celdas de la lista (0), su valor temporal correspondiente:

    ARRIBA +3,
    IZQUIERDA +3

    Y sacarlas de la lista

    Vecina Valor Valor temporal
  6. La lista está vacía.

Ejecutar las acciones para el resto de celdas para obtener la configuración del siguiente paso:

Paso 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 hasta que el valor esté tan repartido que las acciones no surtan ningún efecto.

Paso 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      
                 

Paso 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      
                 

Paso 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        

Paso 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        

FIN