Genetikus algoritmus hatékonyabbá tétele?
Üdv!
Írtam egy genetikus algoritmust, és megfigyeltem egy olyan összefüggést, hogy minél több génből áll a genom, annál nehézkesebben csökken a hibaérték. Létezik valami bevett módszer ennek a problémának a kiküszöbölésére?
Használj más algoritmust.
Sajnos ennyi infóból mást nem lehet írni, mert lehet az algoritmusod rossz, lehet a programozása...
"A program jól van megírva."
Ilyen kijelentések után abszolút nem lehet komolyan venni.
A feladathoz viszonyítva szerintem túl sok a lehetséges mutáció. Ha a feladat az, hogy el kell találni a 10-hez, akkor ezek töredéke is elég, hiszen ezek közül több is hasonlót végez, csak máshogy.
Egy másik lehetséges ok a lassúságra, hogy túl sok variációt hagysz a memóriában.
Szia!
Én nem vagyok programozó, csak felhasználói szoftvereket használok, amik GA-t futtatnak, de ezt találtam.:
"Főleg a rossz megfogalmazás az oka, de akár egyes paraméterek nemlineáris volta is hozzájárulhat ahhoz, hogy megalkotott kódunk „beragad”, „megakad” egy lokális minimumon. Lokális minimumnak nevezzük a bemeneti jelek és a belső állapot összefüggéseiből kapott olyan holtponti állapotot, amiből a rendszer önerejéből képtelen kikerülni, miközben az általa szolgáltatott eredmény ugyan viszonylag optimális, de nem a legoptimálisabb. A jelenséget általában az okozza, hogy a legjobb egyed már elég közel van a megoldáshoz, ezért a rosszabb (de az aktuális állapotból kimozdító hatású) vektort nem tudjuk érvényesíteni, képletesen szólva „egy kis rosszat elviselni a nagyobb jó érdekében”. Pl. neurális hálózatoknál a többdimenziós térben egy olyan völgyként lehet ábrázolni, ami elég alacsonyan van a csúcsokhoz képest (azaz kvázi optimális), de magas hegyek határolják (amelyek nagy hibaértékkel bírnak). Létezik alacsonyabb völgy ehhez képest is (lásd még optimálisabb), ám a rendszer „nem képes” ismét növelni a magasságot, mert az ellene van a globális optimumnak és ezért nem tud kimozdulni az aktuális helyzetéből, egy körben forog.
A lokális minimum ellen több módon lehet védekezni:
nagyobb populációval (így többféle elemből tudunk válogatni)
a géneken végzett több öröklődési/mutációs eljárással (mert ekkor nagyobb a variancia)
több egyed örökítésével (mert ekkor több rossz részlépéssel egy jobb állapotba juthatunk)
véletlenszerű elemek bevonásával
több, egymással szinkronban „tenyésztett” populációval (amelyek egymásnak géneket tudnak átadni)" forrás: [link]
Ill.:
Én javaslom a "genetikus algoritmus"+"elakad"
"megakad", "beragad" stb. keresőszavakat.
Ill. olvastam, hogy a GA paramétereit lehet véletlenszerűen, ill. "step by step", vagy esetleg másik GA-val keresni, ez is egy optimálás.
Pl. nekem is, hiába van a kezemben egy kész szoftver az optimális GA paraméterek megkeresése nem triviális.
Így felhasználóként is szépen látszik, ahogy lépked előre a generációkban szépen a progi, majd egyszer csak pl. 25000 generáció után nem talál gyakrabban jobb egyedet és pl. az 50000-ik generáció után lefut még 50 000 generáció úgy, hogy semmi újat nem talál.
Pedig pl. 250 paraméter közül keres egy 4-5 változós összefüggést! Egyszóval "hajszállal" több variáció van, mint a lottó ötösnél...
Nyilván GA kód és GA kód között is nagy különbség van hatékonyság tekintetében.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!