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. Zejména v bakalářské práci máte 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 klasifikace lepší o 0,01 %, zejména když tohoto zlepšení je možné docílit jen na 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 bakalářské práce 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.
Ke studiu programovacího jazyka Julia můžete použít
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.