2026. július 3., péntek

Evolúciós szimuláció

Egy egyszerű genetikus algoritmus (evolúciós szimuláció) segítségével bemutatható, hogyan fejlődik ki egy véletlenszerű karaktersorozatból egy előre meghatározott célkitűzés (például egy adott mondat).A program a következő lépésekből áll:Populáció létrehozása: Véletlen karakterekből álló "egyedek" generálása.Szelekció (Fitnesz): Annak vizsgálata, hogy az egyes egyedek mennyire hasonlítanak a célmondathoz.Kereszteződés és Mutáció: A legjobb egyedek tulajdonságainak összekeverése, és kis eséllyel véletlenszerű hibák (mutációk) bevitele az új generációkba.
----------------
import random

# A cél, amit az evolúciónak el kell érnie
CEL = "Ez egy evolucios szimulacio!"
KARAKTEREK = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÖŐÚÜŰ.,!"

POPULACIO_MERET = 100
MUTACIOS_RATA = 0.05 # 5% esély a mutációra

# 1. Egyed létrehozása véletlenszerű karakterekből
def veletlen_egyed(hossz):
    return ''.join(random.choice(KARAKTEREK) for _ in range(hossz))

# 2. Fitnesz (célhoz való hasonlóság) kiszámítása
def ertekeles(egyed, cel):
    # Minél több karakter egyezik a megfelelő pozícióban, annál magasabb a pontszám
    pontszam = sum(1 for i, j in zip(egyed, cel) if i == j)
    return pontszam

# 3. Kereszteződés két szülő között
def keresztez(szulo1, szulo2):
    hossz = len(szulo1)
    if hossz == 0:
        return szulo1
    # Véletlenszerű vágási pont
    vagas = random.randint(0, hossz - 1)
    return szulo1[:vagas] + szulo2[vagas:]

# 4. Mutáció
def mutate(egyed):
    uj_egyed = []
    for kar in egyed:
        if random.random() < MUTACIOS_RATA:
            uj_egyed.append(random.choice(KARAKTEREK))
        else:
            uj_egyed.append(kar)
    return ''.join(uj_egyed)

# Fő evolúciós ciklus
def evolucio():
    cel_hossz = len(CEL)
    generacio = 0
    
    # Kezdő populáció generálása
    populacio = [veletlen_egyed(cel_hossz) for _ in range(POPULACIO_MERET)]
    
    while True:
        # Értékelés és a populáció rendezése fitnesz szerint (csökkenő)
        populacio.sort(key=lambda egyed: ertekeles(egyed, CEL), reverse=True)
        
        legjobb_egyed = populacio[0]
        legjobb_fitnesz = ertekeles(legjobb_egyed, CEL)
        
        # Kiírás minden generációban
        print(f"Generáció: {generacio:4} | Eredmény: {legjobb_egyed} | Fitnesz: {legjobb_fitnesz}")
        
        # Ha elértük a 100%-os egyezést, megállunk
        if legjobb_fitnesz == cel_hossz:
            print("\nEvolúció sikeresen befejeződött!")
            break
            
        # Új generáció építése
        uj_populacio = []
        
        # Elitizmus: a legjobb 10% változatlanul átkerül a következő generációba
        elit_szam = int(POPULACIO_MERET * 0.10)
        uj_populacio.extend(populacio[:elit_szam])
        
        # Új egyedek létrehozása keresztezéssel és mutációval
        while len(uj_populacio) < POPULACIO_MERET:
            szulo1 = random.choice(populacio[:20]) # Csak a legjobb 20%-ból választunk szülőt
            szulo2 = random.choice(populacio[:20])
            
            gyerek = keresztez(szulo1, szulo2)
            gyerek = mutate(gyerek)
            uj_populacio.append(gyerek)
            
        populacio = uj_populacio
        generacio += 1

if __name__ == "__main__":
    evolucio()
---------------
Generáció:    0 | Eredmény: znSuxANktClHgKTWmLTÓmnrduYoG | Fitnesz: 3
Generáció:    1 | Eredmény: HPkŰRyÜBVdvwoFxgZSlvvwVa,eo! | Fitnesz: 4
Generáció:    2 | Eredmény: HPkŰRyÜBVdvwoFxgZSlvvwVa,eo! | Fitnesz: 4
Generáció:    3 | Eredmény: zDInÓnvXAŰÓKTqan MTÓmwVanÚo! | Fitnesz: 5
Generáció:    4 | Eredmény: wPkŰRyÜBoŐaUcGoZZSXvwwVanÚo! | Fitnesz: 6
Generáció:    5 | Eredmény: vnSŰŰyKzo.W,cGpn MTÓmwVanÚo! | Fitnesz: 7
Generáció:    6 | Eredmény: HPMŰRyÜBVŐaUcGoh MTÓmwVanÚo! | Fitnesz: 8
Generáció:    7 | Eredmény: HPMŰRyÜBVŐaUcGoh MTÓmwVanÚo! | Fitnesz: 8
Generáció:    8 | Eredmény: HPMŰRyÜBVŐaUcGoh MTÓmwVanÚo! | Fitnesz: 8
Generáció:    9 | Eredmény: H!kNbyÜrVŐaUcGoh sTJmwVanio! | Fitnesz: 10
Generáció:   10 | Eredmény: HPkŰRyÜBICl,cGoh sTJmwVanio! | Fitnesz: 11
Generáció:   11 | Eredmény: HPkŰRyÜBICl,cGoh sTJmwVanio! | Fitnesz: 11
Generáció:   12 | Eredmény: HPkŰRyÜBICl,cGoh sTJmwVanio! | Fitnesz: 11
Generáció:   13 | Eredmény: HPkŰRy BICl,cGoÖ sTJmsVanio! | Fitnesz: 12
Generáció:   14 | Eredmény: HPkŰRy BICl,cGoÖ sTJmsVanio! | Fitnesz: 12
Generáció:   15 | Eredmény: iPkŰRy BICl,cGoC sTJmwlanio! | Fitnesz: 13
Generáció:   16 | Eredmény: iPkeRy fICl,cGoh sTJmwlanio! | Fitnesz: 14
Generáció:   17 | Eredmény: iPkeRy fICl,cGoh sTJmwlanio! | Fitnesz: 14
Generáció:   18 | Eredmény: iPkeRy fICl,cGoh sTJmwlanio! | Fitnesz: 14
Generáció:   19 | Eredmény: iPpeRy fI.l,cGoh sTimwlanio! | Fitnesz: 15
Generáció:   20 | Eredmény: iPpeRy fI.l,cGoh sTimwlanio! | Fitnesz: 15
Generáció:   21 | Eredmény: iPpeRy fI.l,cGoh sTimwlanio! | Fitnesz: 15
Generáció:   22 | Eredmény: iP eRy fWCl,cGoh sTimwlanio! | Fitnesz: 16
Generáció:   23 | Eredmény: iP eRy fWCl,cGoh sTimwlanio! | Fitnesz: 16
Generáció:   24 | Eredmény: iP eRy fWCl,cGoh sTimwlanio! | Fitnesz: 16
Generáció:   25 | Eredmény: iP eRy fWCl,cGoh sTimwlanio! | Fitnesz: 16
Generáció:   26 | Eredmény: iP eRy fWCl,cGoh sTimwlanio! | Fitnesz: 16
Generáció:   27 | Eredmény: iP eRy fWCl,cGoh sTimwlanio! | Fitnesz: 16
Generáció:   28 | Eredmény: EP eRy fWCl,cGoR sTimwlanio! | Fitnesz: 17
Generáció:   29 | Eredmény: EP eRy fWCl,cGoR sTimwlanio! | Fitnesz: 17
Generáció:   30 | Eredmény: EP eRy fWCl,cGoR sTimwlanio! | Fitnesz: 17
Generáció:   31 | Eredmény: EP eRy fWCl,cGoR sTimwlanio! | Fitnesz: 17
Generáció:   32 | Eredmény: EP eRy fWCl,cGoR sTimwlanio! | Fitnesz: 17
Generáció:   33 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   34 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   35 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   36 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   37 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   38 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   39 | Eredmény: EP eRy fIClWcWoÖ sTim.lacio! | Fitnesz: 18
Generáció:   40 | Eredmény: EA eRy fWSlÖcGos sTim.lacio! | Fitnesz: 19
Generáció:   41 | Eredmény: EA eRy fWSlÖcGos sTim.lacio! | Fitnesz: 19
Generáció:   42 | Eredmény: EA eRy fWSlÖcGos sTim.lacio! | Fitnesz: 19
Generáció:   43 | Eredmény: EA eRy fWSlÖcGos sTim.lacio! | Fitnesz: 19
Generáció:   44 | Eredmény: EP eRy fvClBcGos sTim.lacio! | Fitnesz: 20
Generáció:   45 | Eredmény: EP eRy fvClBcGos sTim.lacio! | Fitnesz: 20
Generáció:   46 | Eredmény: EP eRy fvClBcGos sTim.lacio! | Fitnesz: 20
Generáció:   47 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   48 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   49 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   50 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   51 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   52 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   53 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   54 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   55 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   56 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   57 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   58 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   59 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   60 | Eredmény: EP eRy fvClBcGos sTimulacio! | Fitnesz: 21
Generáció:   61 | Eredmény: EP eRy fvClBcGos szimulacio! | Fitnesz: 22
Generáció:   62 | Eredmény: EP eRy fvClBcGos szimulacio! | Fitnesz: 22
Generáció:   63 | Eredmény: EP eRy fvClBcGos szimulacio! | Fitnesz: 22
Generáció:   64 | Eredmény: EP eRy fvClBcGos szimulacio! | Fitnesz: 22
Generáció:   65 | Eredmény: Ez eRy fvClBcPos szimulacio! | Fitnesz: 23
Generáció:   66 | Eredmény: Ez eRy fvClBcPos szimulacio! | Fitnesz: 23
Generáció:   67 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   68 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   69 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   70 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   71 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   72 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   73 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   74 | Eredmény: Ez eRy MvClucGos szimulacio! | Fitnesz: 24
Generáció:   75 | Eredmény: Ez eRy fvClucios szimulacio! | Fitnesz: 25
Generáció:   76 | Eredmény: Ez eRy fvClucios szimulacio! | Fitnesz: 25
Generáció:   77 | Eredmény: Ez eRy fvClucios szimulacio! | Fitnesz: 25
Generáció:   78 | Eredmény: Ez eRy fvClucios szimulacio! | Fitnesz: 25
Generáció:   79 | Eredmény: Ez eRy fvClucios szimulacio! | Fitnesz: 25
Generáció:   80 | Eredmény: Ez eRy fvClucios szimulacio! | Fitnesz: 25
Generáció:   81 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   82 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   83 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   84 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   85 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   86 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   87 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   88 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   89 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   90 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   91 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   92 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   93 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   94 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   95 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   96 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   97 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   98 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:   99 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:  100 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:  101 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:  102 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:  103 | Eredmény: Ez egy MvClucios szimulacio! | Fitnesz: 26
Generáció:  104 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  105 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  106 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  107 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  108 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  109 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  110 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  111 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  112 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  113 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  114 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  115 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  116 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  117 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  118 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  119 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  120 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  121 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  122 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  123 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  124 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  125 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  126 | Eredmény: Ez egy Zvolucios szimulacio! | Fitnesz: 27
Generáció:  127 | Eredmény: Ez egy evolucios szimulacio! | Fitnesz: 28

Evolúció sikeresen befejeződött!

Nincsenek megjegyzések:

Megjegyzés küldése