|
Pro úlohy s exponenciální časovou složitostí je možné s úspěchem použít
genetické algoritmy. Tento applet znázorňuje hledání optimálního rozmístění
vysílačů, aby bylo dosaženo maximálního pokrytí (neplatila se pokuta) a
zároveň výstavba nestála příliš mnoho peněz (cena za vysílač). Hledání
se ukončí po dosažení požadované cílové ceny.
Algoritmus se snaží napodobit vývoj živočichů v přírodě pomocí třech základních principů -- selekce, mutace a křížení. Nejprve je vytvořena počáteční "populace", která obsahuje náhodně vzniklá rozmístění vysílačů. U každého rozmístění jsme schopni určit stupeň jeho přizpůsobení okolí (podle nákladové funkce CF = počet_nepokrytí*pokuta + počet_vysílačů*cena). V každé generaci se jedinci seřadí vzestupně podle nákladové funkce. Pouze nejúspěsnější jedinci mají právo se dále množit -- jsou od nich odvozování noví jedinci pomocí mutací (vytvoření/zrušení vysílače na náhodně zvolené pozici nebo výměna hodnot mezi dvěma sousedícími políčky) a křížením (polovina rozmístění od jednoho rodiče, druhá od druhého). Právo stát se rodičem má procento nejlepších jedinců podle parametru "Rodičovská základna". Počet mutací u nově vznikajících jedinců je dán parametrem "Počet mutací". Nejméně úspěšní jedinci jsou naopak v každém kroku odstraněni. Procento nově vzniklých a odstraněnovaných jedinců je dáno parametrem "Obměna populace". Velikost populace zůstavá stále stejná. Stejný algoritmus může být použit pro libovolnou mapu, jak je vidět z dalších příkladů. Legenda: V horní části obrazovky je mapa s nejlepším rozmístěním vysílačů pro danou generaci. Ve spodní části je znázorněn vývoj populace pomocí nákladů pro nejlepšího (červeně) a nejhoršího jedince (modře) v každém kroku.
|