Odevzdávání úkolů

Evoluční algoritmy jsou založeny na náhodě, tzn. že každý běh může dopadnout trochu jinak a není tedy možné porovnávat pouze výsledky jednoho běhu. Místo toho je potřeba běh několikrát zopakovat, a podívat se, jak se algoritmus chová v průměrném/nejlepším/nejhorším případě.

Odevzdaný úkol musí obsahovat následující náležitosti:

  1. Stručný popis toho, co jste udělali a vyzkoušeli. Opravdu stačí napsat 5-10 vět, není třeba psát dlouhé texty.
  2. Obrázek, který ukazuje, jakým způsobem se mění fitness, resp. optimalizované kritérium v závislosti na počtu vyhodnocení fitness funkce. Obrázek musí zobrazovat (alespoň) průměrnou hodnotu (nebo medián) a první a třetí kvartil. Při porovnání více algoritmů/přístupů musí být všechny v jednom obrázku
  3. Obrázky nazabalujte (pokud jich není opravdu hodně). Nahrajte je jako samostatné soubory.

Skripty pro vytváření grafů

V repozitáři na Githubu můžete najít soubor plotting.py. Ten můžete použít jako základ pro vytváření grafů. Hlavní funkcí je utils.plot_experimenty, která vyžaduje dva argumenty – cestu do adresáře s logy vašich běhů a seznam ID experimentů, které chcete vykreslit (ID experimentu lze nastavit v každém ze skriptů, které dostanete pro každé cvičení v proměnné EXP_ID.) Navíc můžete také přidat rename_dict, kde můžete zadat čitelnější názvy pro vaše experimenty, které budou zobrazeny v legendě. Pokud jste například použili EXP_ID = 'pop100m0.3' pro váš experiment s velikostí populace 100 jedinců a pravděpodobností mutace 0,3, můžete přidat parametr rename_dict={'pop100m0.3': 'Velikost populace = 100, pravděpodobnost mutace = 0,3'}.

Možná budete muset mírně upravit skript, pokud změnit škálování nebo rozsah os. Výsledný graf můžete upravit pomocí dalších matplotlib funkcí. Například pokud chcete změnit škálování vertikální osy na logaritmické, můžete přidat plt.yscale('log') nad řádek s plt.show().

Snažte se grafy dělat co možná nejpřehlednější. Pár tipů, jak na to:

  • Pokud oba porovnávané algoritmy konvergují dlouho před tím, než doběhne limit počtu generací, a v grafu jsou tedy dlouhé rovné čáry, většina zajímavých věcí se děje na začátku -> nastavte vhodně limit na x ose - plt.xlim(0, LIMIT). Také můžete použít logaritmické měřítko na y ose (viz níže).
  • Pokud jeden z algoritmů konverguje podstatně rychleji než druhý, takže je na začátku grafu téměř vertikální čára u jednoho algoritmu a u druhého algoritmu je konvergence pomalá a čára je přes celý graf -> nastavte logaritmickou y-osu (nebo i x-osu) plt.yscale('log').
  • Rozdíl v optimalizované hodnotě na začátku a konci evoluce je několik řádů, nejsou tedy vidět malé rozdíly v konvergenci -> opět nastavte logaritmické osy
Naposledy změněno: pondělí, 13. října 2025, 14.26