Az 1950-60-as években merült fel először az a gondolat, hogy a biológiai
evolúció a mérnöki problémákban is felhasználható lehet optimalizációs
eszközként. A mesterséges intelligencia kialakulásának kezdeti korszakában a
természetes evolúció modellezésére irányuló próbálkozások vezettek el a korai,
genetikus algoritmussal rokon stratégiák és módszerek, az evolúciós stratégiák,
az evolúciós programozás, majd jóval később a genetikus programozás
kialakulásához. A darwini evolúciós elmélet és a genetika alapjait magába építő
szigorúan vett genetikus algoritmusok első változatát, az egyszerű genetikus
algoritmusokat John Holland, a Michigani Egyetem professzora javasolta
1975-ben. Az azóta eltelt több mint 25-35 év alatt mind a szűkebb értelemben
vett genetikus algoritmusok, mind pedig a tágabban értelmezett evolúciós
módszerek komoly fejlődésen mentek keresztül, sokféle változatuk alakult ki, és
egyre teljesebbé vált a matematikai megalapozásuk is.
A gépszerkesztés alternatívája a mesterséges intelligencia létrehozásában
az egyik megközelítés, a biológiai evolúció folyamatának utánzása a
számítógépben. A szimulált evolúció eltérő utat kínál a bonyolult hardver és
szoftver tervezésére. Olyan utat, ami megkerüli a műszaki tervezés számos
problémáját. A szimulált evolúció működését példázzuk egy számokat csökkenő
sorrendbe rendező szoftverrel. A szokványos műszaki megközelítés az lenne, hogy
egy rendező algoritmus valamelyikének alapján írunk egy programot; de most
nézzük azt az esetet, hogy ehelyett hogyan „fejleszthetnénk ki” a szoftvert.
Az első lépés véletlenszerű programok „populációjának” a generálása. Ezt
a populációt létrehozhatjuk álvéletlenszám-generátor használatával, amellyel
megalkotjuk az utasítások véletlenszerű sorozatát. A folyamat felgyorsítására
alkalmazhatjuk a csak a rendezés műveletére használható utasításokat, például
az összehasonlító- és csereutasításokat. Az utasításoknak ezek a véletlenszerű
sorozatai jelentik a programot. A véletlenszerű populáció mondjuk tízezer ilyen
programot fog tartalmazni, melyek mindegyike néhány száz utasítás hosszúságú.
A következő lépésben megvizsgáljuk a populációt, hogy kikeressük közülük
a legsikeresebb programokat. Ehhez minden egyes programot le kell futtatnunk,
hogy lássuk, melyik rendezi helyesen a próbasorozatot. Minthogy a programok véletlenszerűek,
valószínűleg egyik sem állja ki a próbát, de a puszta szerencse némelyiket
közelebb viszi a helyes rendezéshez, mint a többieket. Az egyik program például
véletlenül a sorozat végére helyezheti az alacsony számokat. Miután a
programokat kipróbáljuk egy néhány számból álló sorozaton, minden programhoz
egy hozzáillő pontszámot rendelhetünk. A következő lépés az olyan új populációk
létrehozása, amelyek a magasra értékelt programok leszármazottai.
Ennek megvalósításához először is töröljük az átlagos pontszámnál
kevesebbel rendelkező programokat, hogy csak a legalkalmasabb programok
maradjanak életben. Az új populációt úgy hozzuk létre, hogy kisebb
véletlenszerű variációkkal másolatokat készítünk a fennmaradó programokról. Ez
az eljárás megfelel az aszexuális mutációs reprodukciónak. A másik lehetőség,
hogy a következő generáció új programjait az életben maradt programok
párosításával „tenyésztjük”. Ez a folyamat pedig a szexuális reprodukciónak
felel meg. Ez oly módon vihető végbe, hogy a „szülőprogramok” mindegyikéből
utasítássorozatokat kombinálunk a „gyermek” létrehozására. A szülők
feltételezhetően azért maradtak fenn, mert hasznosítható utasítássorozatokat
tartalmaztak, és így jó esély nyílik rá, hogy a gyermek örökölni fogja szüleitől
a leghasznosabb részleteket.
A programok létrejött új generációját ismét ugyanannak az elemző és
szelekciós eljárásnak vetjük alá, úgyhogy ismét csak a legalkalmasabb programok
maradnak életben és szaporodnak. Egy párhuzamos számítógép néhány
másodpercenként hoz létre újabb generációt, így a szelekciós és variációs
eljárást sok-sok ezerszer is könnyedén megismételhetjük. A populációk átlagos
alkalmassága minden generációval növekszik, azaz a programok egyre alkalmasabbak
a rendezésre. Néhány ezer generáció múlva a programok tökéletesen fognak
rendezni.
Egy kísérletben alkalmazták a szimulált evolúciót, hogy az különleges
rendezési feladatok megoldására kifejlesszen egy programot, majd leírták a
folyamat működését. A kísérletben előnyben részesítették azokat a programokat,
amelyek gyorsan rendezték a próbasorozatokat, így a gyorsabb programoknak
nagyobb esélyük volt a fennmaradásra. Ezzel az eljárással igen gyors
rendezőprogramok jöttek létre. Az evolúciós folyamatban létrejött programok
valamivel gyorsabbnak bizonyultak, mint azok, amelyek algoritmusok alapján
íródtak. Gyorsabban rendezték a számokat, mint bármely olyan program, amelyet
programozók írtak volna egy ismert algoritmus alapján. Az evolúciós folyamat
során létrejött programok esetében az az egyik legérdekesebb mozzanat, hogy nem
érthető, hogyan is működnek, hiába vizsgálták meg utasítássorozataikat a
leggondosabban. Könnyen lehet, hogy ezek a programok nem megérthetőek, más
szóval, nem bonthatjuk a program működését a megérthető részek hierarchiájára.
Matematikai teszteket használtak annak bizonyítására, hogy a
kifejlesztett rendezőprogramok tökéletes rendezők. Jobban bízhatunk az őket
létrehozó folyamatban, mint a matematikai tesztekben. Mégpedig azért, mert az
evolúciós folyamat során kifejlődött rendezőprogramok olyan programok hosszú
sorának a leszármazottai, amelyek fennmaradása kizárólag rendezési
képességüktől függött.
Az a tény, hogy az evolúciós folyamat során létrejött programok nem
mindig megérthetőek, egyes embereket aggodalommal tölt el az alkalmazásuk
tekintetében, azonban ez az aggodalom téves feltételezéseken alapul. Ezeknek a
feltételezéseknek az egyike, hogy a szigorúan műszaki alapon létrehozott
rendszerek mindig jól megérthetőek, ám ez csak a viszonylag egyszerű rendszerek
esetében igaz. Például manapság egyetlen személy sem láthat át teljes mértékben
egy operációs rendszert. A téves feltételezés az is, hogy a nem megmagyarázható
rendszerek kevésbé megbízhatóak. Ha választani lehetne, hogy egy műszakilag
tervezett számítógépprogram, illetve egy emberi pilóta által irányított
repülőgépen utazzon-e, melyiket választaná? Részemről egészen biztosan az embert
választanám, bár fogalmam sincs az emberi pilóta működéséről. Szívesebben vetem
a bizalmam abba a folyamatba, amely a pilótát létrehozta. Akárcsak a
rendezőprogramok esetében, tudom, hogy a pilóta az életképesnek bizonyult
egyedek hosszú sorának a leszármazottja. Ha a repülőgép biztonsága a számok helyes
rendezésétől függene, akkor inkább bíznám magam egy evolúciósan kifejlesztett
rendezőprogramra, mint egy olyanra, amit egy csapat programozó írt.
Nincsenek megjegyzések:
Megjegyzés küldése