Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Potíže s genetickým programováním

Dnes opustíme na chvilku naše oblíbené Linuxy a podíváme se na neméně zajímavé téma - na genetické programování. To vychází z geniální myšlenky, přesto se však tato metoda prozatím nestala univerzální a naráží na své hranice. Proč k tomu dochází?

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Základní myšlenka genetického programování byla vysvětlována již mnohokrát, proto ji nyní popíšeme pouze stručně. Podobně jako v biologické evoluci i v její počítačové obdobě využíváme stejné principy: mutaci, křížení a přírodní výběr (selekci). Vycházíme z toho, že i mezi programy přežijí ty „nejschopnější“ – tedy ty, které nejlépe řeší námi zadanou úlohu. Na začátku vezmeme nějaké zdrojové kódy, obvykle takové, které mají již k řešení úlohy nějaký vztah. Uděláme mezi nimi první výběr. Máme například zajistit, aby se virtuální mravenec naučil hledat potravu. Srovnáme tedy programy podle toho, jak je který úspěšný (tj. žebříček bude třeba seřazen podle množství jídla, které sesbírá mravenec za několik kol). Ty nejlepší v populaci „namnožíme“, ty nejhorší smažeme. Následně spolu programy náhodně „zkřížíme“, tj. funkčně si odpovídající bloky kódu nějak proházíme (z programů A1A2 a B1B2 dostaneme třeba kombinace A1B2 a B1A2). Tento postup celkem odpovídá tomu, co se děje při pohlavním rozmnožování s jednotlivými geny.
Máme potomstvo. Jako další krok nyní necháme u určité části programů proběhnout mutaci, tj. náhodnou změnu. Mutace se může týkat třeba řídicí proměnné cyklu (změna hodnoty, nebo změna proměnné jako takové), podmiňovacího příkazu apod. Může také docházet k deleci (vypadnutí kusu programu) či inserci (kus kódu je kopírován na další místo).
Nyní testujeme, jak nové programy řeší danou úlohu. Většina změn bude zřejmě k horšímu, řada programů vůbec nepůjde spustit či budou vykazovat jiné zásadní chyby. To nám ovšem nevadí, slabé programy vyřadíme, ty úspěšné naopak propustíme do dalšího kola opět ve více kopiích.
Pokud v nové generaci nedostaneme program řešící danou úlohu lépe než v předešlém kole, můžeme buď pokračovat dále, a nebo se vrátíme ke generaci minulé.


Způsoby křížení můžeme samozřejmě definovat nějak přesněji, taktéž je záhodno upřesnit, co všechno může mutovat a samozřejmě jak často. Taktéž můžeme změnit pořadí kroků, tj. nejprve nechat programy mutovat a až pak je křížit. (Poznámka: autor tohoto článku je pouze svátečním programátorem a omlouvá se za možná přílišné zjednodušení v textu výše.)

Jaký je z toho závěr? Genetickým programování lze vyvinout určitý software často bez toho, abychom rozuměli „podstatě“ řešeného problému a museli se nějak namáhat s vymýšlením algoritmické reprezentace. Tato skutečnost má kromě výhod samozřejmě i určité nevýhody, mj. i estetickou – není to prostě tak elegantní jako dokonale promyšlený a zdůvodněný algoritmus, nemusí se dostavit „radost z úspěchu“. Existují však i další potíže. Aby „selekce“ mohla vůbec nějak smysluplně začít, potřebujeme programy, které už úlohu alespoň nějak řeší. Pokud vložené programy dělají něco úplně jiného, není moc mezi čím vybírat (museli bychom čekat, až mutacemi náhodně vznikne nějaký alespoň „trochu-řešící“ program, a toho bychom se nemuseli v reálném čase vůbec dočkat). Naopak v případě, že se řešení výsledku už nějak blíží, bývá kumulovaná selekce často velmi efektivní. Může se nám také stát, že během vývoje dostaneme algoritmus, který by geniálně řešil jiný problém, avšak samozřejmě to nemáme možnost zjistit (to ovšem víceméně platí i pro jiné metody programování). Taktéž musíme umět včas skončit, tj. zjistit, kdy už mutace pouze „rozhazují“ obstojné řešení.
Zatím se ale jedná skutečně o pouhé vady na kráse. S dostatečně výkonným hardwarem bychom mohli zdánlivě složit ruce v klín a vše nechat na samovolně probíhající evoluci.
Pak je zde ale jeden zásadní problém, kterému bychom mohli učeně říkat „falešný atraktor“. Atraktor (ze slovesa přitahovat – to attract) není kosmetický doplněk, ale stav, kam směřuje určitý fyzikální (či jiný) systém. Pro teplotu konvice s horkou kávou ponechanou v místnosti je například atraktorem teplota místnosti. Pro pohybující se kyvadélko zpomalované třením je to nehybná svislá poloha.
Kromě atraktoru bychom problém také mohli označit za problém lokálních minim. Potřebujeme se dostat k nejlepšímu řešení úlohy, tj. k extrému globálnímu. Jestliže však řešení úlohy, které si můžeme představit jako kuličku, jednou spadne do určitého důlku, je velmi obtížné jej z něj mírným potřásáním dostat, i když někde dále se nachází důlek hlubší. Kulička se prostě vždy skutálí zpátky do důlku, který si vyhlédla jako první.
Protože v genetickém programování ovšem „mapu krajiny“ neznáte (jinak byste měli i řešení, tj. nejhlubší důlek, a nepotřebovali byste nic programovat), často si nemůžete být jisti, zda jste dosáhli skutečného řešení, nebo pouze řešení falešného – falešného atraktoru.
Tady by snad byla na místě jistá odbočka do biologie. Jak to, že biologická evoluce potom vůbec probíhá a už dávno nezatuhla ve svých lokálních extrémech-důlcích? Často k zatuhnutí skutečně dochází. Nějaká změna se prostě nemůže uplatnit, protože „mezipřechod“ k ní je nevýhodný. Zmutovaní jedinci jsou z populace eliminováni dříve, než by mohlo dojít k další, už zvýhodňující mutaci. Jenomže na rozdíl od genetického programování není biologická krajina konstantní. Struktura maxim a minim se neustále mění s tím, jak se mění třeba teplota, hladiny moří a koneckonců i další organismy. Abychom se vyhnuli problému falešných atraktorů, měli bychom tyto změny nějakým způsobem zahrnout i do genetického programování. Jenže jak? Chceme přece vyřešit určitou konkrétní úlohu. Když zahýbáme s „krajinou“, evoluce sice nikde nezatuhne, jenže výsledkem bude řešení jiné úlohy, než o jakou nám šlo. My jsme dnes také výsledkem řešení jiné úlohy, než jaká byla „formulována“ v prvohorách.

S problémem genetického programování úzce souvisí otázka tzv. biomorf (metoda modelování biologické evoluce, kdy lze z jednoduchých prvků a jednoduché sady operací velmi rychle postavit složité útvary) a teorie buněčných automatů. Těm se podrobněji věnují například následující články.

davame_internetu_obsah
       

Svět podle Stephena Wolframa – výklad řady jevů na základě principů buněčných automatů


Jak pracují buněčné automaty – včetně problematiky generování biomorf evolučním biologem Richardem Dawkinsem


Přehled zdrojů informací o genetickém programování na serveru Science World

Školení: Linux – Firemní server

Na třídenním školení se naučíte nainstalovat a spravovat kompletní linuxový server do Vaší firmy se všemi základními službami, které potřebujete pro provoz Vaší sítě, firemních emailů a webových stránek.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 3,08

Přehled názorů

To asi nepujde tak rychle...
Czerteak 15. 10. 2002 01:03
Nový
├ 
Re: To asi nepujde tak rychle...
xChaos 15. 10. 2002 02:10
Nový
├ 
Re: To asi nepujde tak rychle...
OldFrog 15. 10. 2002 05:09
Nový
│
└ 
Re: To asi nepujde tak rychle...
Petr 15. 10. 2002 06:28
Nový
│
 
└ 
Re: To asi nepujde tak rychle...
malyzelenyhnus 15. 10. 2002 10:15
Nový
│
 
 
├ 
Re: To asi nepujde tak rychle...
ondrej 15. 10. 2002 13:37
Nový
│
 
 
└ 
Re: To asi nepujde tak rychle...
Michal Kec 16. 10. 2002 16:45
Nový
├ 
Re: To asi nepujde tak rychle...
HK 15. 10. 2002 09:13
Nový
│
└ 
Re: To asi nepujde tak rychle...
Czerteak 15. 10. 2002 22:29
Nový
├ 
Re: To asi nepujde tak rychle...
kaaja 15. 10. 2002 09:37
Nový
├ 
Re: To asi nepujde tak rychle...
oozy 15. 10. 2002 10:18
Nový
│
└ 
Re: To asi nepujde tak rychle...
Czerteak 15. 10. 2002 22:26
Nový
│
 
└ 
Re: To asi nepujde tak rychle...
Edheldil 24. 10. 2002 16:05
Nový
└ 
Re: To asi nepujde tak rychle...
alf1024 15. 10. 2002 15:01
Nový
GP a černé skřínky
Pavel Houser 15. 10. 2002 08:52
Nový
Pokud by nekoho zajimalo neco okolo AI/GP delat :
Android 15. 10. 2002 10:13
Nový
funguje to
mao 15. 10. 2002 10:13
Nový
Open source je GP
vlk 15. 10. 2002 10:23
Nový
└ 
Re: Open source je GP
Jirka Kosina 15. 10. 2002 10:36
Nový
Létající robot
Dalibor Šrámek 15. 10. 2002 11:11
Nový
Geneticke programovani......
ibisek 15. 10. 2002 15:00
Nový
Geneticke programovani......
ibisek 15. 10. 2002 15:02
Nový
Geneticke programovani......
ibisek 15. 10. 2002 15:05
Nový
└ 
Re: Geneticke programovani......
Frn 17. 10. 2002 07:23
Nový
Add: Clanok aj diskusia
cronin 15. 10. 2002 20:02
Nový
├ 
Re: Add: Clanok aj diskusia
Pavel Houser 16. 10. 2002 11:12
Nový
│
└ 
Re: regresia
cronin 16. 10. 2002 12:40
Nový
├ 
Re: Add: Clanok aj diskusia
sejda 18. 10. 2002 12:36
Nový
└ 
Re: Add: Clanok aj diskusia
Juraj Perkácz 2. 7. 2004 09:10
Nový
Pekne povidani - informacni hodnota mala
Lukas 17. 10. 2002 13:26
Nový
├ 
Re: Pekne povidani - informacni hodnota mala
cronin 17. 10. 2002 17:29
Nový
├ 
Re: Pekne povidani - informacni hodnota mala
tucekj 18. 7. 2007 18:40
Nový
└ 
Re: Pekne povidani - informacni hodnota mala
tucekj 18. 7. 2007 18:41
Nový
Obava
sejda 18. 10. 2002 12:20
Nový
└ 
Re: Obava
cronin 18. 10. 2002 15:03
Nový
 
└ 
Re: Obava
petr 19. 10. 2002 12:53
Nový
 
 
└ 
Re: Obava
cronin 19. 10. 2002 21:01
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem