Samorozvrh bude program na tvorbu rozvrhu pro studenty UK. Uživatel zadá
předměty, na které chce chodit, a Samorozvrh mu vrátí, které paralelky má
zvolit. To je praktické, pokud si toho člověk chce zapsat hodně, nebo pokud
má nějaké speciální požadavky: chce mít jeden den volný, chce někdy končit
brzy nebo naopak začínat pozdě a podobně.
Pro uživatelské rozhraní implementuji webovou aplikaci, kde uživatel zadá
požadované předměty (pravděpodobně jejich kódy), zmáčkne tlačítko a na
serveru se spočítá rozvrh.
Program má tedy dvě takřka nezávislé části, frontend (webapp) a backend
(solver, který rozvrhy bude tvořit).
Použité technologie:
- frontend
- Go: hlavně proto, že si ho chci vyzkoušet, a na servery je vhodné
(často se chlubí svou concurrency)
- blíže nespecifikovaný template engine na zobrazování
- backend
- Google Optimization Tools: https://developers.google.com/optimization/
- konkrétně její "constraint programming solver"
- knihovna umí řešit problém nalezení rozvrhu, když jej popíšeme
jako sadu rovnic a nerovnic
- Python 3: Optimization Tools jsou sice v C++, ale mají mimo jiné
Python bindingy. V Pythonu se vyvíjí velmi snadno a výkon nás moc nezajímá,
protože vše výpočetně náročné zařizuje optimalizovaná knihovna.
Výhodou je, že se s programem dá hodně vyhrát - udělat minimální funkcionalitu
je jednoduché, ale dá se vymyslet velká spousta vychytávek, které se dají
přidat, zejména různé parametry na upřesnění toho, jak má vypadat ten
"nejlepší" rozvrh.