2026. június 29., hétfő

Conway-féle Élősejtek szaporodása

Ez a Python-program, a Conway-féle Élősejtek szaporodását valósítja meg nagy teljesítményű, vektorizált módon. A szimuláció a komplex rendszerek, mesterséges élet és emergens jelenségek kutatását viselkedését vizsgálja és modellezi. Csak egy dolgot kell tennie: meghatározni a kiindulási pozíciót. A többi már magától következik be: a káoszból rend lesz, a rendből káosz, meg viszont.
------------
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

print("=" * 65)
print("CONWAY-FÉLE")
print("Komplex rendszerek és emergens viselkedés modellje")
print("=" * 65)

# Paraméterek
MERET = 200
KEZDETI_SURUSEG = 0.25
GENERACIOK = 1000

print(f"Rácsméret: {MERET} × {MERET}")
print(f"Kezdeti élő sejtek aránya: {KEZDETI_SURUSEG*100:.1f}%")
print(f"Maximális generációk száma: {GENERACIOK}")
print("\nInicializálás...")

# Véletlen kezdeti állapot
racs = np.random.choice(
    [0, 1],
    size=(MERET, MERET),
    p=[1 - KEZDETI_SURUSEG, KEZDETI_SURUSEG]
)

print("Szimuláció elindult.")

fig, ax = plt.subplots(figsize=(8, 8))
kep = ax.imshow(racs, interpolation='nearest', animated=True)

ax.set_title("Conway-féle ")
ax.axis("off")


def kovetkezo_allapot(r):
    """Vektorizált szomszédszámítás periodikus határokkal."""

    szomszedok = (
        np.roll(np.roll(r, 1, 0), 1, 1) +
        np.roll(np.roll(r, 1, 0), 0, 1) +
        np.roll(np.roll(r, 1, 0), -1, 1) +
        np.roll(np.roll(r, 0, 0), 1, 1) +
        np.roll(np.roll(r, 0, 0), -1, 1) +
        np.roll(np.roll(r, -1, 0), 1, 1) +
        np.roll(np.roll(r, -1, 0), 0, 1) +
        np.roll(np.roll(r, -1, 0), -1, 1)
    )

    uj = ((szomszedok == 3) |
           ((r == 1) & (szomszedok == 2))).astype(int)

    return uj


def animacio(frame):
    global racs

    racs = kovetkezo_allapot(racs)

    if frame % 50 == 0:
        elo = np.sum(racs)
        print(
            f"Generáció: {frame:4d} | "
            f"Élő sejtek: {elo:6d}"
        )

    kep.set_array(racs)
    return [kep]


ani = FuncAnimation(
    fig,
    animacio,
    frames=GENERACIOK,
    interval=30,
    blit=True
)

plt.show()

print("\nSzimuláció befejeződött.")
print(f"Utolsó generáció élő sejtjeinek száma: {np.sum(racs)}")
-----------
=================================================================
CONWAY-FÉLE ÉLŐSEJTEK SZIMULÁCIÓ
Komplex rendszerek és emergens viselkedés modellje
=================================================================
Rácsméret: 200 × 200
Kezdeti élő sejtek aránya: 25.0%
Maximális generációk száma: 1000

Inicializálás...
Szimuláció elindult.
Generáció:    0 | Élő sejtek:  11290
Generáció:    0 | Élő sejtek:   9662

Szimuláció befejeződött.
Utolsó generáció élő sejtjeinek száma: 9662



Nincsenek megjegyzések:

Megjegyzés küldése