Table of Contents

Stránka není kompletní, na stránce se pracuje!!!

Semestrální práce

Vaším úkolem v této semestrální práci bude vybrat si či navrhnout vlastní optimalizační algoritmus pro black-box minimalizaci reálných funkcí. Odevzdávat budete

  1. implementaci třídy vašeho optimalizátoru v Javě schopného pracovat v testovacím frameworku a
  2. krátký report ve formě vědeckého článku, v němž popíšete, jak váš optimalizátor funguje.

Hodnocení

Za tuto úlohu lze získat až 30 bodů:

Report: hodnocení a pokyny k vypracování

Šablony používají 2-sloupcový formát a poměrně malá písma, na celý report by vám měly stačit 1-2 strany. Na reportu budu hodnotit následující:

Ke stažení

V archivu najdete 2 adresáře:

K vypracování reportu použijte jednu z šablon (pro Word a LaTeX).

Jak to celé rozchodit

V archivu najdete kompletní projekt v Netbeans. Tento projekt obsahuje jedinou třídu s metodou main - třídu TestRunner. Tato třída v zásadě definuje, jaké optimalizátory a jaké testovací problémy se mají použít, vytváří instance jednotlivých optimalizátorů a aplikuje je postupně na všechny testovací problémy. Pro každou kombinaci algoritmus-problém vytvoří jeden soubor se statistikami (přípona .sts), které se dále zpracovávají v MATLABu.

Po dokončení běhu testovacího frameworku si můžete výsledky prohlédnout. Zkopírujte všechny .sts soubory z adresáře projektu Netbeans do adresáře se soubory MATLABu a spusťte skript scrCompareAlgorithms.m. Tento skript uspořádá turnaj všech algoritmů způsobem každý s každým. Jinými slovy, pro každou dvojici algoritmů spočítá na kolika problémech byl lepší první algoritmus a na kolika druhý. Vytvoří tzv. performance matrix, PM, takovou, že prvek PM(i,j) udává, na kolika problémech byl i-tý algoritmus lepší než j-tý. K rozhodnutí, zda jsou výsledky jednoho algoritmu lepší než druhého, se používá neparametrický Wilcoxon-Mann-Whitneyho U test, jak je implementován ve funkci ranksum v MATLABu.

Z hodnot v PM se vypočte celkové skóre algoritmu jako počet problémů, na nichž jiné algoritmy porazil, mínus počet problémů, na nichž byl jinými algoritmy poražen (tj. řádkový součet PM mínus sloupcový součet PM). Na základě tohoto skóre se vypočte pořadí algoritmů.

Skript následně spustí GUI tzv. ResultBrowseru, v němž můžete jednotlivé dvojice algoritmů na jednotlivých problémech vizuálně porovnávat.

Jak naprogramovat optimalizátor

Vaším úkolem je naimplementovat (a následně odevzdat) třídu, která bude dědit od abstraktní třídy auiproject.AbstractOptAlgInstance. Minimálně musíte definovat její 3 metody:

Svou třídu (např. MySuperTrooperSolver) umístěte do balíku auiproject.alg. Aby o ní testovací framework věděl, musíte její plně kvalifikované jméno (auiproject.alg.MySuperTrooperSolver) přidat v metodě main() třídy TestRunner do seznamu solvers.

Další detaily o implementaci frameworku najdete přímo ve zdrojových kódech jako javadoc.