[CZ] Jak vytvářet grafy a odevzdávat úkoly

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ů

Pro vytváření grafu průběhu fitness můžete použít skripty createGraphs.ps1 (pro Windows PowerShell), nebo createGraphs.sh (pro Unix). Oba skripty vyžadují mít nainstalovaný gnuplot a zároveň ho mít v $PATH.

Skripty očekávají na vstupu soubory, které obsahují statistické informace o několika nezávislých bězích evolučního algoritmu. Na každé řádce souboru je šest čísel - počet vyhodnocení fitness funkce a pět statistických údajů o fitness nejlepšího jedince v populaci - minimum, první kvartil, průměr, třetí kvartil a maximum. Takové soubory vytváří připravené zdrojové kódy, nebo si je můžete vytvořit sami, pokud programujete od začátku v jiném jazyce.

Použití skriptů je jednoduché. Je nutné mu dát pouze dva parametry, které říkají, jaké výstupy se mají zobrazit a jak se mají jmenovat. Předpokládejme, že máme výstupy ze dvou různých algoritmů v souborech logs/basic.objective_stats a logs/better.objective_stats. Pokud chceme tyto dva algoritmy porovnat, stačí zavolat

createGraphs.ps1 -logFileNames basic,better -legendNames Basic,Better

Tím dostaneme porovnání těchto dvou algoritmů v jednom obrázku output.svg, popisky v legendě budou “Basic” a “Better”, na vertikální ose bude použito logaritmické měřítko.

Skript má ještě další užitečné parametry:

  • output určuje jméno výstupního souboru (default output.svg)
  • title určuje jméno grafu (default “Objective value log”)
  • logScale určuje, které osy budou mít logaritmické měřítko, možné hodnoty jsou xxyy a "" (default y)
  • path určuje adresář, kde jsou soubory s výstupy (default “”)
  • scale určuje škálování horizontální osy, např. -scale 1000 vydělí čísla na této ose tisícem (default 1)
  • barsEvery určuje, jak často se mají zobrazovat error bary, jako počet řádek ve výstupním souboru (default 20)
  • limit určuje, kde má končit horizontální osa (default “”)

K dispozici je i Python script, který sice nepotřebuje gnuplot, ale používá místo něj numpy a matplotlib. Jeho parametry jsou podobné jako u výše zmíněných skriptů - podívejte se do jeho nápovědy.

Většina těchto parametrů má za cíl zpřehlednit výsledný graf. Používejte je a experimentujte s nimi, snažte se, aby grafy byly co možná nejpřehlednější. Typické použití jednotlivých parametrů je následující:

  • Oba porovnávané algoritmy konvergují dlouho před tím, než doběhne limit počtu generací, v grafu jsou tedy dlouhé rovné čáry, většina zajímavých věcí se děje na začátku -> nastavte vhodně parametr limit
  • Jeden z algoritmů konverguje podstatně rychleji než druhý, takže je na začátku grafu téměř horizontální čára u jednoho algoritmu. U druhého algoritmu je konvergence pomalá a čára je přes celý graf -> nastavte -logScale na x, nebo xy.
  • Rozdíl v optimalizované hodnotě na začátku a konci evoluce je několik řádů, nejsou tedy vidět malé rozdíly v konvergenci -> nastavte -logScale na y nebo xy.
  • Error bary jsou moc blízko u sebe a znesnadňují čtení grafu -> nastavte -barsEvery na vyšší hodnotu.
Last modified: Monday, 7 October 2019, 3:17 PM