Speciální seminární skupina

Základní informace

  • Skupina je určena studentům, kteří již mají solidní základy programování ze střední školy.
  • Očekává se, že studenti v této skupině buď již Python (v rozsahu probíraném v IB111) znají, nebo jsou schopni se jej naučit samostatně na základě přednášek a dostupných zdrojů (literatura, web).
  • Skupinu vede přednášející předmětu (Radek Pelánek).
  • Skupina nemá pravidelná cvičení v počítačové učebně, pravidelné domácí úlohy ani vnitrosemestrální písemky.
  • Studenti samostatně vypracovávají projekty (viz níže), tyto projekty na konci semestru osobně prezentují vedoucímu skupiny. Za projekty studenti obdrží body odpovídající bodům, které studenti ostatních skupin získávají za domácí úlohy a vnitrosemestrální písemky (tj. až 300 bodů).
  • Studenti mají k dispozici konzultace v průběhu semestru. Konzultace se budou zaměřovat primálně na "principy" (volba zadání úlohy, přístup k řešení, volba datových struktur), nikoliv na "detaily" (syntax Python, technické potíže).

Průběh semestru

Skupina je normálně rozvrhovaná, nicméně nemá pravidelnou (každotýdenní) výuku. V průběhu semestru proběhne několik setkání (přesné termíny budou upřesněny na začátku semestru):

  • První týden semestru, všichni společně: Úvodní setkání, ujasnění očekávání.
  • 13. 10. a 20. 10., po skupinách: Konzultace prvního projektu (harmonogram)
  • 10. 11. a 24. 11., všichni společně: Krátká prezentace postupu na 2. a 3. projektu před všemi studenty.
  • 8. 12., 15. 12., začátek ledna, individuálně: Prezentace finálních projektů vedoucímu skupiny, uzavření hodnocení projektů.

Projekty

Očekává se vypracování tří projektů spadajících do níže uvedených témat. Témata rámcově odpovídají běžným domácím úlohám, v rámci této skupiny se ovšem očekává výrazně rozsáhlejší zpracování. Témata jsou záměrně zadána neurčitě a otevřeně, součástí úlohy je také domyslet si vlastní zajímavé zadání. Nemějte nicméně strach z otevřenosti zadání, zadání a očekávání budou upřesněna na konzultacích a v případě potřeby dostanete konkrétní rady, jak postupovat.

Na konci semestru odevzdáváte kompletní zdrojové kódy a zprávu (ve formátu PDF), která bude obsahovat pro každý projekt:

  • Popis řešené úlohy (co přesně řešíte).
  • Hlavní myšlenky použitého řešení, vysvětlující komentáře k odevzdaným souborům.
  • Ukázky výstupů (grafy s výsledky analýz, vytvořené bitmapové obrázky) s popisky/komentáři.

Materiály odevzdáte do Odevzdávárny v ISu. Pokud máte zdrojové kódy na githubu (či podobné službě), stačí do zprávy uvést odkaz.

Simulace strategií pro jednoduchou hru

Napište program, který bude schopen simulovat souboje různých strategií v jednoduché hře. Zpracujte statistiky, např. kdo vítězí s jakou pravděpodobností, jak dlouho průměrně hra trvá. Zvolte hru a strategie tak, aby výsledky nebyly dopředu zřejmé (triviálně odhadnutelné). Ztvárnění výsledků formou grafu je vhodné (doporučeno použít matplotlib, ale dá se tolerovat i Excel).

U tohoto projektu je přirozené využít v programu objekty a v rámci procvičení použití objektů v Pythonu to bude požadováno. Pokud s nimi nemáte zkušenost, udělejte první verzi (pro říjnovou konzultaci) bez objektů, ale očekávejte, že pro finální verzi bude potřeba přejít na objektovou reprezentaci (na přednášce se budou objekty probírat v druhé polovině semestru).

Náměty na hry:

  • Pexeso - např. strategie "náhodně", "perfektní paměť", "nedokonalá paměť" (buffer velikosti K)
  • Iterovaný zápas v jednoduchá hře v normální formě, např. Kámen, nůžky, papír či Dilema vězně.
  • Jednoduchá hra pro děti (klidně může být ještě zjednodušena), např. Člověče nezlob se, Želví závody.
  • Simulace strategií pro sázení (např. Martingale).

Zpracování dat

Najděte zajímavý zdroj dat a "zpracujte" jej. Vytvořený program by měl dělat nejen "načtení dat", ale i nějaký netriviální "výpočet" nad daty (příp. zajímavé propojení více zdrojů dat). Výstupem by měly být zajímavé analýzy. Použitá data musí být dostatečně bohatá, aby zpracování vedlo na dostatečně rozsáhlý program. Konkrétně se očekává, že skrze tento projekt prokážete schopnost používat datové struktury (např. slovník, vnořené seznamy).

Formulujte explicitně otázky, které byste rádi z pomocí dat zodpověděli. Začněte klidně s ambiciózními otázkami, které není reálné v rámci projektu zcela zodpovědět, ale poslouží vám jako užitečné vodítko, kterým směrem analýzy ubírat. Příklady: "Které aspekty zemí (velikost, počet obyvatel, vzdálenost od ČR) nejvíce ovlivňují, jak moc čeští studenti tyto země znají?", "Které politické strany mají nejstabilnější výsledky ve volbách?", "Existují výrazné rozdíly v povahových vlastnostech mezi obyvateli různých států?".

Náměty na zdroje dat:

Další inspirace (typy analýz i metody): Learn Python Through Public Data Hacking

Obrázky

Tento projekt má dvě části: "rekurzivní fraktály" a "bitmapy".

Rekurzivní fraktály: Vytvořte programy pro vykreslování fraktálů s rekurzivní strukturou, inspirujte se obrázky s názvy Sierpińského trojúhelník, Kochova vločka, Hilbertova křivka, rekurzivní stromečky (uvedené ve slidech z průběhu semestru). Pro vykreslování doporučuji použít buď želví grafiku (module "turtle" v Pythonu) nebo si udělat vlastní vykreslování do vektorového formátu SVG. Implementujte jak některé klasické fraktály, tak vlastní variace. Implementujte vše pomocí rekurze (nepoužívejte přístupy jako jsou "L-systémy").

Bitmapy: Napište program, který zpracovává nebo generuje bitmapové obrázky (za použití knihovny Image, implementace Pillow). Vymyslete si vlastní zadání, které bude nějakým způsobem originální. Pokud si vyberete nějaký relativně jednoduchý úkol (detekce hran), zpracujte více algoritmů a ty porovnejte. Náměty:

  • Generování "krajinky"/mapy: různá nadmořská výška, pohled shora, barvy podle nadmořské výšky, stínování kopců, simulátor "povodně", ...
  • Hledání cesty v bludišti (které je zadáno jako bitmapový obrázek).
  • Vlastní implementace některých standardních transformací, které nabízí grafické programy (detekce hran, detekce (červených) očí, detekce obličeje, ...). Neočekává se stejný výkon jako u profesionální aplikace, důležité je, abyste to implementovali samostatně (bez použití jakýchkoliv knihoven a převzatých kódů).