Velmi zajímavým podoborem GA je též GP (genetické programování), v němž je genetickou informací přímo kompletní počítačový program (zmíněné pokusy s programy řazení čísel spadají právě do této kategorie). Rád bych se u GP ještě chvíli zastavil. Programování není žádný med a známá lidová moudrost praví, že nejrozšířenějším programovacím jazykem je klení. Stále narůstající složitost systémů a pracnost testování software je dnes velkou brzdou oboru; manažeři nechtějí slyšet nic o chybách v kódu a to, že napsat program opravdu dobře je v podstatě umění, nedokážou pochopit vůbec. Kdybychom mohli programování svěřit přímo počítačům, to by bylo!
Uvedu nyní jako příklad experimenty, které prováděl Daniel Hillis. Kdo z vás měl někdy co do činění s programováním, jistě narazil na úlohu ražení čísel. Existuje celá řada algoritmů řazeni. Jednotlivé postupy se mezi sebou liší efektivitou, rychlosti, tedy např. počtem kroků, počtem výměn v jednotlivých pořadích, počtem porovnání mezi čísly, množstvím potřebné paměti. Každý z postupu-algoritmu tak představuje, z hlediska genetického programování, jednu individualitu. Populace se pak skládá z velkého množství programu určených na ražení čísel - někteří jedinci v populaci dokážou úlohu vyřešit rychleji a s nižším použitím výpočetních prostředků, jiní jsou méně obratní a čísla řadí hloupějším způsobem. Jelikož genetickou informací je zde samotný program, crossover (křížení) je prováděno přímo jako výměna části předků-programu. Po řadě generací tak dochází k tomu, že některé méně efektivní programy zaniknou (jako druh vymřou) a jiné, nové vzniklé, kvalitnější postupy naopak brzy ovládnou teritorium.
V průběhu experimentu se podařilo vypěstovat algoritmus, jenž byl efektivnější než nejrychlejší dosud publikovány předpis pro ražení čísel. Počítač v tomto případě projevil něco, co by se při určitě schovivavosti dalo nazvat "tvůrčí činnosti": vymyslel si program, sám se naprogramoval lépe, než by to dokázal člověk. Jako zajímavost stojí za to ještě uvést, že Hillis použil principu koevoluce, konkurence dvou druhu: společně s řešením (řadícím algoritmem) nechal vyvíjet i samotnou úlohu (různé testovací posloupnosti čísel, která měla být řazena). Zjistil tak, že evoluce, pokud k ní dochází v konkurenčním prostředí, je mnohem rychlejší a účinnější.
(Dovolím si teď malou odbočku, týkající se programování a evoluce: Software, zvláště ten zdarma šířený na internetu, se v hrubých rysech chová také geneticky: schopný přežívá a šíří se na disky uživatelů, méně dobrý je nelítostně mazán. Ten nejméně dobrý se pak vůbec nešíří zdarma, musíte si jej koupit. (Konec vsuvky.))
Trend k jakémusi "osamostatňování se" počitačových programů je zřejmý, i bez genetických algoritmů. K prvním, procedurálním programovacím jazykům z šedesátých let minulého století, jako je např. Fortran, C nebo Cobol, přibyly vzápětí jejich objektoví následníci: Smalltalk, C++, Jáva, atd.; Zatímco procedurální jazyky jsou popisem typu "teď vykonávej toto, teď zase ono..." objektový popis představuje spíše formulace: "já jsem okno to a to a umím to a tohle" nebo "já jsem knoflík ten a ten, zmáčkneš-li mne, to uvidíš věci". V posledních letech se jako inovace objektového programování objevuje princip tzv. agentový. Agentem - v softwarovém smyslu - mužeme chápat samostatně jednající systém, jenž komunikuje se svým okolím (člověkem nebo i jinými agenty) a snaží se splnit určité zadané cíle. Agenty mohou například vyhledávat určitou informací na internetu, jednat jménem uživatele - v budoucnu možná budou vyřizovat jeho korespondenci a nakupovat za nás. To, že agentový software je většinou adaptivní a je schopen zobecňovat a získávat automaticky vědomosti o prostředí, v němž se pohybuje, snad ani nemusím zmiňovat.
Zajímavé pokusy s geneticky šlechtěnými agenty provádí John Holland (zájemcům mohu doporučit jeho knihu How Adaptation Builds Complexity). Jeho experimenty jsou mj. zaměřeny na sledování vazeb a vztahů mezi agenty různých typů. Ve svých digitálních zkumavkách zkoumat takové jevy jako je parazitismus, symbióza, vzájemná ochrana mezi jedinci jednoho druhu, mimikry, atd.
Pozoruhodné je, že pokud agenty vybavíme možností vysílat - signalizovat - určitou informací a na druhé straně schopností tyto signály přijímat a zpracovávat, vznikne automaticky komunikace mezi agenty a dochází také ke kooperaci mezi nimi. Jinými slovy, existují-li ústa, která mohou mluvit, a uši, které mohou naslouchat, vznikne řeč už sama od sebe.
Vrátíme-li se k našim umělým mravencům-agentům: ti, kteří jsou vybavení schématem dobrých tykadel, jistě dají v budoucnu vzniknout generaci těch, kteří se začnou těmi tykadly oťukávat. A budeme-li simulovat najednou dvě celá mraveniště, obě mravenčí kolonie vynaleznou jiný způsob oťukávání, a - pokud vydržíme dalších pár generací - začnou se zástupci obou mravenišť přít o pravidla spisovného oťukávání.
|