Algoritmia - Autómatas Celulares

 
Vista:

Autómatas Celulares

Publicado por Fernando (1 intervención) el 28/08/2001 06:14:34
Hola, a quien me quiera ayudar:

Me pusieron un proyecto para la universidad que consiste en hacer el Juego de la vida que se basa en autómatas celulares:

El Juego de la Vida de Conway
Uno de los autómatas celulares más conocidos es el que John Hort on Conway llamó el juego de la vida (Life Game). El juego de la vida es un autómata celular bidimensional en cuadrícula con dos estados por celda.
El juego de la vida puede ser representado por una matriz de espacios y ceros. La matriz representa el mundo, el espacio representa un lugar vacío y el cero representa una célula. La matriz se irá transformado con el tiempo de acuerdo a unas reglas preestablecidas.
El mundo es toroidal, es decir la primera fila se considera contigua a la última y la primera columna se considera contigua a la última. Esto significa que toda celda, así se encuentre en el borde de la matriz, tiene ocho celdas contiguas.
Una célula es vecina de otra si las dos están en celdas contiguas. El contenido de la matriz en cada momento se denomina una generación.
Partiendo de la generación inicial se obtienen las demás generaciones, aplicando las siguientes reglas:
- Regla de supervivencia: Cada célula viva con dos o tres células vecinas vivas sobrevive a la siguiente generación.
- Regla de muerte: Cada célula viva con ninguna, una, o más de tres células vivas a su alrededor se muere.
- Regla de nacimiento: En cada celda vacía con tres células vecinas nace una célula, en la siguiente generación.

Lo que necesito que me colaboren es en crear un algoritmo que aplique estas 3 reglas de los autómatas celulares para poder implementarlo en mi proyecto.

Les agradeszco que me puedan ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación del Juego de la vida de Conway

Publicado por Alejandro (307 intervenciones) el 27/02/2024 22:54:42
Fernando, para implementar el Juego de la vida de Conway, necesitarás un bucle que aplique las reglas en cada generación. Aquí tienes un ejemplo simple en Python que puedes adaptar a tu proyecto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
def aplicar_reglas(matriz):
    filas = len(matriz)
    columnas = len(matriz[0])
    nueva_matriz = [[0] * columnas for _ in range(filas)]
 
    for i in range(filas):
        for j in range(columnas):
            vecinos = contar_vecinos(matriz, i, j)
 
            # Aplicar reglas
            if matriz[i][j] == 1:
                if vecinos == 2 or vecinos == 3:
                    nueva_matriz[i][j] = 1  # Regla de supervivencia
                else:
                    nueva_matriz[i][j] = 0  # Regla de muerte
            else:
                if vecinos == 3:
                    nueva_matriz[i][j] = 1  # Regla de nacimiento
 
    return nueva_matriz
 
def contar_vecinos(matriz, i, j):
    filas = len(matriz)
    columnas = len(matriz[0])
    vecinos = 0
 
    for x in range(-1, 2):
        for y in range(-1, 2):
            if x == 0 and y == 0:
                continue  # No contar la propia celda
            vecino_i = (i + x) % filas
            vecino_j = (j + y) % columnas
            vecinos += matriz[vecino_i][vecino_j]
 
    return vecinos
 
# Ejemplo de uso:
generacion_inicial = [
    [0, 1, 0, 0, 0],
    [0, 0, 1, 0, 0],
    [1, 1, 1, 0, 0],
    [0, 0, 0, 0, 0],
    [0, 0, 0, 0, 1]
]
 
for _ in range(5):  # Simular 5 generaciones
    generacion_inicial = aplicar_reglas(generacion_inicial)
    # Puedes agregar aquí una función para visualizar la matriz en cada generación
 
# Resultado final en generacion_inicial

Este código define una función `aplicar_reglas` que toma una matriz, aplica las reglas del Juego de la vida y devuelve la nueva generación. La función `contar_vecinos` cuenta el número de células vivas alrededor de una posición dada.

Puedes adaptar este código según tus necesidades y agregar funciones de visualización si deseas ver la evolución del juego en cada generación. ¡Espero que esto te sea de ayuda para tu proyecto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar