Závěrečné práce
Pokud máte zájem, tak rád povedu vaši ročníkovou, bakalářskou, diplomovou nebo doktorskou práci. Moje specializace je především teorie grafů, kombinatorická optimalizace a umělá inteligence, čemuž odpovídají specializace, ve kterých jsem schopen práci vést.- Bakalářské studium: Obecná informatika a Umělá inteligence
- Magisterské studium: Diskrétní modely a algoritmy, Teoretická informatika, Umělá inteligence
- Doktorské studium: Individuální diskuze s dostatečným předstihem před podáním přihlášky ke studiu (minimálně 3 měsíce předem).
Co očekávat od závěrečné práce?
Pokud jste studenti bakalářského nebo magisterského studia, tak se nemusíte obávat, že byste v práci museli vymyslet něco nového a významného. Cílem bakalářské a diplomové práce je prokázat, že jste porozuměli látce probírané na předmětech vaší specializace a dokážete znalosti správně aplikovat na trochu složitější úloze, než jste viděli na cvičeních. Například na cvičení z Přírodou inspirovaných algoritmů máte použít evoluční algoritmus na problém batohu, tak v závěrečné práci jej můžete rozšířit na problém umístění daných předmětů do vícero batohů tak, aby zadané dvojice předmětů nebyly v jednom batohu (motivací může být skutečnost, že hořlaviny a trhaviny se nesmí převážet spolu). Tento problém lze řešit různými algoritmy, tak si jich pár vyberete, použijete a srovnáte je. V textové části máte prokázat, že zvládnete čtenářům vysvětlit, co jste v práci dělali, jaké postupy jste zvolili a jak si vedly jednotlivé algoritmy.Zdůrazňuji, že není nutné, aby váš program překonal nejlepší známé algoritmy, které jsou často nad rámec studijních plánů. Cílem práce je správné použití probíraných metod a jejich objektivní srovnání. Naopak je špatně, když se budete snažit přesvědčit čtenáře, že váš postup je nejlepší na světě, protože má přesnost lepší o 0,01 %, zejména když tohoto zlepšení je možné docílit jen na jedné jediné hodnotě seed.
Ročníkový projekt musí být softwarový, ale bakalářská a diplomová práce může být teoretická. Například můžete o nějakém problému rozhodnout, zda jej lze vyřešit v polynomiálním čase nebo je NP-úplný, najít pro něj FPT nebo aproximační algoritmus. Dokonce je možné přístupy kombinovat, takže můžete vymyslet algoritmus na váš oblíbený problém, v ročníkovém projektu jej implementovat a bakalářské práci matematicky dokázat, jaké má vlastnosti. Jelikož většina studentů preferuje implementační a experimentální práce, tak následující povídání se týká spíš těchto prací. Pokud byste preferovali teoretičtější práce, tak postup budeme řešit individuálně.
Pokud máte vybraný ročníkový projekt v oblasti AI nebo optimalizace, tak je přirozené navazovat v bakalářské práci. V ročníkovém projektu naprogramujete vhodné algoritmy nebo využijete existujících knihoven. Tyto algoritmy vyzkoušíte a porovnáte na nějakých sadách dat. Textové části práci popíšete použité algoritmy a výsledky experimentů.
Jak si vybrat téma závěrečné práce?
Zjednodušeně řečeno si musíte vybrat problém, který byste chtěli studovat, a nástroje, které se chcete naučit a vyzkoušet. Samozřejmě každá dvojice problému a nástroje nemusí dávat smysl, ale pokud si předem rozmyslíte, co by vás zajímalo, tak se při konzultaci snáz dostaneme k tématu, které budete mít chuť následující rok až dva studovat. Nejspíš nemáte tušení, jak moc náročné musí být zadání práce, ale s tím se nemusíte moc trápit, protože to je na posouzení vedoucího. V nejhorším případě vás přesvědčím, že zadání bude nutné zjednodušit nebo jej odložit do diplomové práce.Pokud vás některé témata zaujala nebo máte vlastní představu o práci, tak mi napište a domluvíme se. Hlavně se nebojte napsat včas, protože v březnu už mám většinou kapacitu na ročníkové práce vyčerpanou.
Jaký zvolit zvolit jazyk?
Volba programovacího jazyka závisí na zvoleném problému a často neexistuje jedna ideální volba.- Python
- Obvyklá volba pro problémy strojové učení, ve kterých náročné výpočty běží v knihovnách napsaných v C/C++/Fortran a Python slouží jen k předzpracování dat a analýze výsledků. U optimalizačních algoritmů tento postup často nefunguje, protože časově náročný výpočet fitness funkce jste si napsali v Python. Je velký rozdíl, jestli při ladění programu čekáte sekundu nebo minutu a při experimentech máte čekat den nebo rok. Již jsme tu měli řadu studentů, kteří začali psát optimalizaci v Python a pak vše přepisovala do C/C++. Podstatnou výhodou Python je velké množství knihoven, které se (při správné volbě) snadno instalují a používají.
- C/C++
- Obvyklá volba pro optimalizační problémy, ale k dosažení rychlosti potřebujete i znalosti architektury počítačů. Je nezbytné starat se o správu paměti i v místech, která nejsou časově kritická. Nemáte k dispozici nástroje z Python (například list comprehension), které výrazně zkracují kód a zrychlují vývoj.
- Kombinace Python a C/C++
- Je možné s použitím knihovny pybind11 časově náročné výpočty napsat v C/C++ a zbytek v Python, ale tento postup bych doporučoval jen pokročilým programátorům. Je nutné umět vyřešit řadu technických záležitostí a umět hledat chyby, které můžou v části programu napsané v Python nebo v C/C++ nebo někde mezi při předávání dat.
- C#, Java, Rust, Go, etc.
- Teoreticky je možné každý algoritmus implementovat v libovolném Turingovsky silném programovacím jazyku, ale tyto jazyky moc neznám, takže vám s nimi moc nepomůžu.
- Julia
- Julia je dynamický programovací jazyk určený zejména pro vědecké výpočty. Julia poskytuje efektivní nástroje vyšších programovacích jazyků (podobně jako R, MATLAB a Python), ale má just-in-time (a volitelně ahead-of-time) kompilaci, kterou se snaží být stejně rychlý jako C. Jelikož se jedná o nový (verze 1.0 vyšla v roce 2018) a méně používaný jazyk, tak nemá tak bohatou sadu knihoven jako Python, což nahrazuje jednoduchým voláním funkcí v C, C++, Python, R, Rust. Nevýhodnou je nutnost naučit se další jazyk, který asi v praxi nevyužijete, pokud se nebudete dál zabývat vědeckými výpočty.
Textovou část práce můžete psát česky, slovensky nebo anglicky. Pokud pro vás angličtina není noční můrou, tak ji zvolte. V práci byste neměli míchat češtinu a angličtinu, což je někdy vzhledem k neustálené české terminologii těžké. Ve zdrojových kódech byste měli používat výhradně angličtinu.
Text práce napište v LaTeXu s BibLaTeXem pro citace. První poznámky můžete začít psát i v markdown, ale je jen otázkou času než přejdete na LaTeX.
Postup při vypracování práce
- Nejprve si musíte vybrat téma a vedoucího. U mě se můžete inspirovat z těchto problémů a algoritmů.
- Napsat zadání práce.
- Rozmyslet si strukturu programu a napsat specifikaci.
- Implementovat zadaný program a průběžně psát komentáře a dokumentaci.
- Spustit všechny experimenty.
- Napsat textovou část práce.