A genetikai algoritmus egy heurisztikus keresési algoritmus , amelyet optimalizálási és modellezési problémák megoldására használnak a kívánt paraméterek véletlenszerű kiválasztásával, kombinálásával és variálásával, a természetben előforduló természetes szelekcióhoz hasonló mechanizmusok segítségével . Ez az evolúciós számítások egy olyan fajtája, amely az optimalizálási problémákat természetes evolúciós módszerekkel oldja meg, mint például az öröklődés , a mutáció , a szelekció és a keresztezés . A genetikai algoritmus megkülönböztető jellemzője a „keresztező” operátor használatának hangsúlyozása, amely a jelölt megoldások rekombinációjának műveletét hajtja végre, amelynek szerepe hasonló a természetben játszott keresztezés szerepéhez.
Az evolúció szimulációjával kapcsolatos első munkát Nils Baricelli végezte 1954-ben a Princetoni Egyetem Advanced Study Intézetében telepített számítógépen. [1] [2] Ugyanebben az évben megjelent munkája széles körű közfigyelmet keltett. Ez az áttörés lehetővé tette, hogy az evolúciós folyamatok számítógépes szimulációja, valamint a Fraser és Barnell (1970) [4] és Crosby (1973) [5] könyveiben leírt módszerek a 60-as évektől általánosabb tevékenységgé váljanak a biológusok körében. Fraser szimulációi a modern genetikai algoritmusok minden lényeges elemét tartalmazták. Bremermann kutatásai a modern genetikai algoritmusok elemeit is magukba foglalták. [6] További úttörők közé tartozik Richard Friedberg, George Friedman és Michael Conrad. David B. Vogel (1998) sok korai művet újra kiadott . [7]
Bár Baricelli 1963-as cikkében egy gép egyszerű játékra való képességét szimulálta, [8] a mesterséges evolúció elfogadott optimalizálási technikává vált Ingo Rechenberg és Hans-Paul Schwefel munkája nyomán az 1960-as években és a XX. hetvenes évek elején. században – Rechenberg csoportja képes volt evolúciós stratégiák szerint összetett mérnöki problémákat megoldani . [9] [10] [11] [12] Egy másik megközelítés Lawrence J. Vogel evolúciós programozási technikája volt , amelyet mesterséges intelligencia létrehozására javasoltak. Az evolúciós programozás eredetileg állapotgépeket használt a körülmények előrejelzésére, a diverzitást és szelekciót pedig az előrejelzés logikájának optimalizálására. A genetikus algoritmusok különösen népszerűvé váltak John Holland 70-es évek elején végzett munkájának és Adaptation in Natural and Artificial Systems (1975) [13] című könyvének köszönhetően . Vogel kutatása Holland sejtautomatákkal végzett kísérletein és (Hollandia) a Michigani Egyetemen írt írásain alapult . A genetikai algoritmusokkal kapcsolatos kutatások nagyrészt elméleti jellegűek maradtak egészen az 1980-as évek közepéig, amikor is a Pennsylvania állambeli Pittsburgh-ben (USA) végül megtartották az Első Nemzetközi Genetikai Algoritmuskonferenciát .
A kutatási érdeklődés növekedésével az asztali számítógépek számítási teljesítménye is jelentősen nőtt, ami lehetővé tette az új számítástechnika gyakorlati alkalmazását. A 80-as évek végén a General Electric elkezdte árulni a világ első genetikai algoritmus termékét. Ipari számítástechnikai eszközök készletévé váltak. 1989-ben egy másik cég, az Axcelis, Inc. kiadta az Evolvert , a világ első, asztali számítógépekhez készült, kereskedelmi forgalomba kerülő genetikai algoritmus termékét. A New York Times technológiai újságírója, John Markoff 1990-ben írt [14] az Evolverről.
A probléma úgy van formalizálva, hogy a megoldása gének vektoraként („ genotípusa ”) kódolható, ahol minden gén lehet bit , szám vagy más objektum. A genetikai algoritmus (GA) klasszikus megvalósításaiban feltételezik, hogy a genotípus fix hosszúságú. Vannak azonban a GA-nak olyan változatai, amelyek mentesek ettől a korlátozástól.
Bizonyos, általában véletlenszerű módon a kezdeti populáció számos genotípusa jön létre. Ezeket egy „ fitness függvény ” segítségével értékelik, ahol minden genotípushoz egy bizonyos érték („fitness”) társul, amely meghatározza, hogy az általa leírt fenotípus mennyire oldja meg a problémát.
A „ fitneszfunkció ” (vagy az angol szakirodalomban fitness függvény) kiválasztásakor fontos ügyelni arra, hogy a „könnyítés” „sima” legyen.
Az eredményül kapott megoldáshalmazból („generációk”) a „fitness” értékét figyelembe véve olyan megoldásokat választanak ki (általában nagyobb a valószínűsége a legjobb egyedek kiválasztásának), amelyekre „genetikai operátorokat” alkalmaznak (a legtöbb esetben esetekben a „ crossover ” - crossover és a „ mutation ” - mutation ), ami új megoldásokat eredményez. Számukra is kiszámolják az edzettségi értéket, majd elvégzik a következő generáció számára a legjobb megoldások kiválasztását („kiválasztását”).
Ez a műveletsor iteratív módon ismétlődik, így modellezve egy "evolúciós folyamatot", amely több életcikluson ( generációig ) tart, amíg az algoritmus leállási kritériuma teljesül. Ez a kritérium lehet:
A genetikus algoritmusok elsősorban többdimenziós keresési terekben való megoldáskeresésre szolgálnak.
Így a genetikai algoritmus következő szakaszai különböztethetők meg:
Az első lépés előtt véletlenszerűen létre kell hoznia egy kezdeti sokaságot; még ha kiderül is, hogy teljesen versenyképtelen, valószínű, hogy a genetikai algoritmus akkor is gyorsan életképes populációba juttatja. Így első lépésben nem lehet különösebben törekedni az egyedek túl fittté tételére, elég, ha megfelelnek a populáció egyedeinek formátumának, és ki lehet számolni rájuk az alkalmassági függvényt. Az első lépés eredménye a H populáció, amely N egyedből áll.
A kiválasztási szakaszban ki kell választani a teljes népesség egy bizonyos hányadát, amely az evolúció ezen szakaszában "életben" marad. Különféle módon lehet kiválasztani. Egy egyed h túlélési valószínűségének a Fitness(h) fittségi függvény értékétől kell függnie. Maga az s túlélési arány általában a genetikai algoritmus paramétere, és egyszerűen előre megadva. A szelekció eredményeként a H populáció N egyedéből sN egyedeknek kell maradniuk, amelyek bekerülnek a végső H' populációba. A többi egyed meghal.
A genetikai algoritmusokban történő szaporodáshoz több szülőre van szükség, általában kettőre, hogy utódokat hozzanak létre.
Számos szülőválasztási operátor létezik:
A beltenyésztésnek és a kitenyésztésnek két formája van: fenotípusos és genotípusos. A fenotípusos forma esetében a hasonlóságot a fitnesz függvény értékétől függően mérjük (minél közelebb vannak a célfüggvény értékei, annál hasonlóbbak az egyedek), a genotípusos forma esetében pedig a hasonlóságot mérjük. a genotípus reprezentációjától függően (minél kevesebb különbség van az egyedek genotípusai között, annál hasonlóbbak az egyedek).
A reprodukálás a különböző algoritmusokban eltérően van definiálva – ez természetesen az adatábrázolástól függ. A szaporodás fő követelménye, hogy az utódnak vagy utódoknak lehetősége legyen mindkét szülő tulajdonságait átörökíteni, azokat valamilyen módon "keverni".
Miért általában a teljes H populációból választják ki a szaporodásra szánt egyedeket, és nem a H' első lépésben fennmaradt elemei közül (bár ez utóbbi lehetőségnek is van létjogosultsága)? A tény az, hogy számos genetikai algoritmus fő hátránya az egyedek sokféleségének hiánya. Elég gyorsan kiemelkedik egyetlen genotípus, ami egy lokális maximum, majd a populáció minden eleme elveszíti a szelekciót, és az egész populáció „eltömődik” ennek az egyednek a másolataival. Az ilyen nemkívánatos hatások kezelésének különböző módjai vannak; ezek egyike a nem a leginkább alkalmazkodó, hanem általában az összes egyed reprodukciós választása. Ez a megközelítés azonban arra kényszerít bennünket, hogy eltároljuk az összes már létező egyedet, ami növeli a probléma számítási bonyolultságát. Ezért az egyedek keresztezésre való kiválasztásának módszereit gyakran úgy alkalmazzák, hogy nemcsak a leginkább alkalmazkodtak, hanem más, rossz kondíciójú egyedek is „szaporodnak”. Ezzel a megközelítéssel megnő a mutációk szerepe a genotípus sokféleségében.
A mutációkra ugyanaz vonatkozik, mint a szaporodásra: van egy bizonyos arányban m mutáns, ami a genetikai algoritmus paramétere, és a mutáció lépésében mN egyedeket kell kiválasztani, majd az előre meghatározott mutációs műveleteknek megfelelően módosítani. .
Számos oka van a kritikának egy genetikai algoritmus más optimalizálási módszerekkel való összehasonlításával kapcsolatban:
Sok szkeptikus van a genetikai algoritmusok alkalmazásának megvalósíthatóságával kapcsolatban.
Én személy szerint soha nem találkoztam olyan problémával, amelyre a genetikai algoritmusok lennének a legalkalmasabbak. Sőt, soha nem találkoztam olyan genetikai algoritmusokkal nyert számítási eredménnyel, amely pozitív benyomást tenne rám.
A genetikai algoritmusokat a következő problémák megoldására használják:
Keresés egydimenziós térben, keresztezés nélkül.
#include <cstdlib> #include <ctime> #include <algoritmus> #include <iostream> #include <szám> int main () { srand (( unsigned int ) time ( NULL )); const size_t N = 1000 ; int a [ N ] = { 0 }; számára ( ;; ) _ { //mutáció az egyes elemek véletlenszerű oldalára: for ( méret_t i = 0 ; i < N ; ++ i ) a [ i ] += (( rand () % 2 == 1 ) ? 1 : -1 ); //most válassza ki a legjobbat, növekvő sorrendben std :: sort ( a , a + N ); //és akkor a legjobbak a tömb második felében lesznek. //másolja a legjobbakat az első felére, ahol hagyták az utódot, és az elsők meghaltak: std :: másolás ( a + N / 2 , a + N , a ); //most nézd meg a lakosság átlagos állapotát. Amint látja, egyre jobb és jobb. std :: cout << std :: felhalmoz ( a , a + N , 0 ) / N << std :: endl ; } }Keresés egydimenziós térben a túlélés valószínűségével, keresztezés nélkül. (Delphi XE-n tesztelve)
program Program1 ; {$APPTYPE CONSOLE} {$R *.res} rendszert használja . generikumok . Alapértelmezések , Rendszer . Gyűjtemények , Rendszer . Sysutils ; Nh = N div2 ; _ MaxPopulation = Magas ( egész szám ) ; var A : egész szám [ 1 .. N ] tömbje ; I , R , C , Pontok , Születési arány : Egész ; Iptr : ^ Integer ; Kezdje Véletlenszerűvé ; // Részleges populáció I := 1 - től N do A -ig [ I ] := Véletlenszerű ( 2 ) ; ismétlés // Mutáció az I := 1 -től N - ig A [ I ] := A [ I ] + ( - Véletlenszerű ( 2 ) vagy 1 ) ; // Válogatás, a legjobbak a TArray végén . // Előre beállított Iptr := Addr ( A [ Nh + 1 ]) ; Pontok := 0 ; Születési arány := 0 ; // Keresztezési eredmények a következőre: I := 1 - Nh do begin Inc ( Pontok , Iptr ^ ) ; // Véletlenszerű keresztezési siker R := Random ( 2 ) ; Inc ( BirthRate , R ) ; A [ I ] := Iptr ^ * R ; Inc ( Iptr , 1 ) ; vége ; // Részösszeg Inc ( C ) ; Writeln ( Formátum ( 'Népesség %d (ráta:%f) pontszám:%f' , [ C , Születési arány / Nh , Pontok / N ])) ; vége . ![]() | ||||
---|---|---|---|---|
|
Optimalizálási módszerek | |
---|---|
Egydimenziós |
|
Nulla sorrend | |
Első rendelés | |
másodrendű | |
Sztochasztikus | |
Lineáris programozási módszerek | |
Nemlineáris programozási módszerek |
Gépi tanulás és adatbányászat | |
---|---|
Feladatok | |
Tanulás tanárral | |
klaszteranalízis | |
Dimenziócsökkentés | |
Strukturális előrejelzés | |
Anomália észlelése | |
Grafikon valószínűségi modellek | |
Neurális hálózatok | |
Megerősítő tanulás |
|
Elmélet | |
Folyóiratok és konferenciák |
|