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