Optimalizace rozvrhu s cílem minimalizovat časové kolize studentů je klasický problém, který se řeší zejména na vysokých školách nebo středních školách. Nabízím několik kroků a osvědčených postupů, jak k tomuto úkolu přistoupit:
1. Sběr informací
Nejprve je potřeba zjistit:
- Jaké předměty si studenti zapisují (volitelné, povinné).
- Počet studentů v jednotlivých skupinách.
- Požadované kapacity učeben a počet časových slotů.
- Speciální požadavky (například návaznosti předmětů, preference vyučujících, technické vybavení).
2. Definování kolizí
Kolize nastává, když si student nemůže zapsat dva předměty, které potřebuje, protože se překrývají ve stejném čase.
3. Matematické modelování
Rozvrhování je možné formulovat jako problém přiřazování (assignment problem) nebo barevnost grafu (graph coloring):
- Vrcholy grafu: jednotlivé předměty.
- Hrana: pokud si je zapsal tentýž student (předměty nesmí být ve stejný čas).
- Cílem je „obarvit“ (rozvrhnout) graf tak, aby žádné dva předměty se společným studentem nebyly ve stejném časovém slotu.
4. Heuristické a algoritmické přístupy
- Greedy algoritmus: Opakované přiřazování předmětů do časů s nejmenším výskytem kolizí.
- Backtracking / Constraint Programming: Systematické prohledávání s omezeními.
- Genetické algoritmy a simulované žíhání: Pro větší instance problematiky, kde není možné najít optimální řešení v rozumném čase.
5. Optimalizační kritéria
- Minimalizace celkového počtu kolizí napříč všemi studenty.
- Zajištění rovnoměrného rozložení rozvrhu (např. aby studenti neměli dlouhé pauzy mezi předměty).
6. Software a nástroje
K optimalizaci je vhodné využít speciální softwarové nástroje, například:
- UniTime, aSc Rozvrhy, KOS (ČVUT), FET (Faculty Event Timetabling) apod.
- Pro menší školy lze využít Excel, nebo programovací jazyky s knihovnami pro optimalizaci (Python - knihovny jako
PuLP, ortools, networkx).
Základní návrh postupu
- Vytvořit seznam všech požadavků studentů/předmětů.
- Navrhnout počáteční rozvrh (například náhodně).
- Vypočítat počet kolizí pro tento rozvrh.
- Iterativně zaměňovat časy předmětů, dokud nebude počet kolizí minimální.
- Zvážit další kritéria (preferovaná doba, kapacita učeben apod.) a případně výsledek upravit.
Ukázka jednoduchého algoritmu v Pythonu (pseudokód):
from ortools.sat.python import cp_model
model = cp_model.CpModel()
# Proměnné: předměty a sloty
# constraints: předměty se společnými studenty nesmí být ve stejný čas
# optimalizace: minimalizace počtu konfliktů
# ... zde by následovalo vytvoření proměnných a omezení
solver = cp_model.CpSolver()
status = solver.Solve(model)
Shrnutí:
Klíčem je nalézt kompromis mezi minimalizací kolizí a dodržením ostatních omezení (počty učeben, preference apod.). Doporučuji využít hotové rozvrhovací systémy nebo modelování v programovacím jazyce. Pro úspěšnou optimalizaci je nejdůležitější správné zadání a sběr potřebných dat.
Rád poskytnu konkrétnější model nebo příklad, pokud upřesníte typ školy, počet studentů či další parametry!