Doposud jsme (většinou) používali algoritmy, které jsou inspirované Darwinistickou evolucí. Nicméně evolučních teorií bylo mnohem více. Dneska se podíváme na teorie Lamarcka a Baldwina a zkusíme je využít v rámci evolučních algoritmů.

Lamarckismus

Lamarckismus se v mnohém shoduje s darwinismem. Tvrdí, že jedinci dědí své vlastnosti od svých rodičů, tvrdí i to, že vlastnosti, které jsou pro jedince potřebné se během jeho života rozvíjí. Navíc ale tvrdí, že jedinci od rodičů dědí vlastnosti takové, jaké je mají v době početí potomka. Podle Lamarcka tedy kovář, který díky své práci posiluje ruce, bude mít také svalnaté syny. To samé se dá ukázat například u žiraf, které protahují své krky, aby dosáhly na listy na stromech a jejich potomci tedy mají krky vždy o něco delší. Zajímavá situace by mohla nastat, kdyby někdo měl jedno dítě v době, kdy má nadváhu, a druhé dítě potom, co začne sportovat. První dítě by podle Lamarcka mělo mít opět nadváhu a druhé by mělo být sportovně založené.

Pro evoluční algoritmy si z této teorie bereme to, že jedinci dědí vlastnosti, které jejich rodiče získali během života. Necháme tedy rodiče se během “života” zlepšovat. Toho se dá docílit například nějakou chytrou mutací, která jedince nějak vylepší. Ten potom své geny předává dál svým potomkům.

Baldwinismus

Baldwin tvrdil, že evoluce nevybírá jedince, kteří jsou dobří, ale že upřednostňuje jedince, kteří mají dobré předpoklady. Tvrdil, že při změně prostředí nevyhrávají jedinci, kteří jsou mu uzpůsobeni, ale jedinci, kteří se umí naučit se prostředí přizpůsobit. Tím, jak se podobně dobří jedinci vybírají v dalších generacích a podporuje se tím schopnost naučit se přežít, tak se nakonec zdá, že chování nutné k přežití je vrozené. Tohle se může projevit například v případě, že se v prostředí objeví nový predátor a zároveň existuje chování, které predátorovi zesložiťuje ulovení kořisti. Jedinci, kteří se toto chování rychle naučí budou ve výhodě a díky (darwinistickému) přirozenému výběru se budou v populaci množit. Tím se bude i zlepšovat schopnost naučit vhodné chování až do té míry, že to chování bude vypadat jako instinkt.

V evolučních algoritmech si zase bereme jen to, co se nám z teorie líbí. Budeme tedy jedince vybírat ne podle toho, jak dobří jsou, ale jak dobře jsou schopní se během svého “života” naučit. Toho se dá dosáhnout například tak, že při výpočtu fitness provedeme nějaké lokální prohledávání a podíváme se, jak dobře po něm jedinec dopadne a podle toho mu přidělíme jeho fitness. Geny jedince se ale nezmění.

Lamarck a Baldwin pro spojitou optimalizaci

Pokud chceme použít lamarkistické nebo baldwinistické myšlenky ve spojité optimalizaci máme jednu přirozenou možnost. Jako učení během života (tj. v rámci mutace při lamarckismu a v rámci výpočtu fitness v baldwinismu) můžeme spustit nějakou gradientní metodu a pokusit se tak jedince vylepšit. Naše fitness funkce umí spočítat numericky gradient v libovolném svém bodě (Java: metoda numericalDerivative ve třídě RealFunction, Python: funkce numericalDerivative v co_functions.py) . Stačí tento gradient vynásobit vhodně zvolenou délkou kroku a odečíst (minimalizujeme) od vektoru jedince. Je lepší volit kratší kroky a dělat jich více.

Kromě gradientní metody samozřejmě můžeme pustit i libovolnou jinou optimalizační metodu, např. simulované žíhání, nebo dokonce i další evoluční algoritmus.

Dejte si pozor na férovost srovnání jednotlivých metod. Zdrojáky přesně nepočítají počet vyhodnocení fitness ale jen ho dopočítávají podle velikosti populace a počtu generací. Nezapočítávají tedy vyhodnocení, které potřebujete pří lokálním prohledávání (např. numerický výpočet gradientu jich potřebuje minimálně tolik, jaká je délka jedince). Zohledněte tento fakt při komentování výsledků.

Последнее изменение: понедельник, 9 ноября 2020, 12:19