Stap 7 — Automatische roostergeneratie
Zodra de lessen zijn aangemaakt, plaatst u ze op het rooster. Een rooster opbouwen is in de praktijk een cyclus, geen eenmalige handeling:
- u plaatst enkele lessen met de hand — om onwrikbare punten te verankeren of sterke beperkingen vast te zetten (externe sprekers op een vaste datum, examens, handmatige afstemmingen);
- u genereert (alles of een deel) zodat het algoritme de rest onder de beperkingen plaatst;
- u stelt in de marge bij — een bijzonder geval corrigeren, een les verplaatsen, van gedachten veranderen;
- en de cyclus kan opnieuw beginnen: u genereert gaandeweg opnieuw (toegevoegde lessen, of — in de kalendermodus — per datumbereik, per reeks klassen of campussen).
U kunt ook alles 100 % met de hand doen, zonder het algoritme. De handmatige plaatsing (plaatsen, verplaatsen, vergrendelen, één voor één of in bulk) heeft een eigen pagina: Handmatige plaatsing. Voor de werkwijze in haar geheel, zie Overzicht van de module.
Deze pagina behandelt de automatische roostergeneratie.
De roostergeneratie plaatst de lessen, ze maakt ze niet aan
Het algoritme werkt met lessen die al bestaan. Het zoekt er een tijdslot en een lokaal bij. De docenten zijn degenen die u aan de cursus hebt toegewezen: het algoritme vervangt ze niet en wijst er geen andere aan, het verwerpt alleen een tijdslot waarop ze niet vrij zijn.
Vandaar de volgorde die u moet aanhouden:
- geef het vak en het urenvolume op voor elke klas: dat is de cursus, een regel met een urenvolume;
- maak de lessen aan uit dat volume, op de stap De uren verdelen en de lessen aanmaken — dat zijn de lessen die het algoritme plaatst;
- en genereer dan pas.
Wie het tabblad voor de roostergeneratie opent voordat de lessen zijn aangemaakt, treft een knop aan die niets doet: er valt niets te plaatsen, en het controlescherm toont Geen lessen gedefinieerd.
Waarom de generatieknop grijs is
De knop weerspiegelt de diagnose die er vlak boven staat, op het tabblad Controle. Drie situaties:
- Geen enkele melding, of alleen waarschuwingen — de knop blijft actief, met een gedempt uiterlijk. Een waarschuwing (geel) wijst op een risico, niet op een onmogelijkheid; blauw is informatief.
- Een blokkerende melding (rood) — de hoofdknop is uitgeschakeld. De berekening is nog wel te starten via Meer opties, op eigen risico: het algoritme ziet het probleem waarop de melding wijst niet, het levert toch een rooster op, en het resultaat komt voor uw rekening. De melding corrigeren verdient de voorkeur.
- Een onoverkomelijke melding — zowel de knop als het optiemenu zijn uitgeschakeld. Er ontbreekt een gegeven, en zonder dat gegeven heeft de berekening geen zin: geen enkele les, geen enkele bruikbare klas (een klas is bruikbaar zodra ze een vestiging en lessen heeft), of een gebruikte vestiging waarvan het tijdraster niet is vastgelegd. Een instelling waar nog geen enkele vestiging is aangemaakt, valt hieronder: zonder vestiging is geen enkele klas bruikbaar.
De statistiek Aantal geconfigureerde klassen kleurt in dat laatste geval rood.
Elke melding staat in duidelijke taal in de lijst, met vermelding van de betrokken klas, vestiging of docent. Voor de ernstschaal en hoe u die leest, zie Conflicten en diagnose; voor het verhelpen van een roostergeneratie die niet tot een resultaat komt, Een mislukte roostergeneratie diagnosticeren.
Beschikbaarheid
De automatische roostergeneratie is beschikbaar op weekroosters, cyclische roosters en kalenderroosters. In de kalendermodus worden de lessen op werkelijke datums geplaatst en kunnen de opties het te genereren datumbereik beperken.
Voorbereiding
Voordat u op Rooster genereren klikt:
- klap het tabblad Roostergeneratie open (op een kalenderrooster heet het Controle) om de globale statistieken te controleren,
- corrigeer de blokkerende meldingen (rood) — zie de vorige paragraaf over de grijze knop,
- lees de waarschuwingen (geel) nog eens door — die blokkeren niets, maar wijzen op een risico (te beperkende beschikbaarheid, een capaciteit die tegen de grens aan zit enzovoort).
Het scherm toont ook:
- het aantal aangemaakte lessen tegenover het aantal geplaatste lessen,
- de ingevoerde urenvolumes tegenover de diensturen van de docenten,
- de groepen die aan ten minste één cursus zijn toegewezen (om vergeten of ongebruikte groepen op te sporen).
Starten
Klik op Rooster genereren. Omniscol zet een eigen, geparallelliseerde rekenomgeving op. De duur hangt af van de omvang van het rooster, het aantal beperkingen en de gekozen opties. De school hoeft geen wachtrij te beheren; de initialisatie duurt vaak een tiental seconden voordat de berekening echt begint.
De berekening is afgetopt op twintig minuten, maar dat ligt in de praktijk ruim boven wat nodig is: een rooster met ongeveer 200 cursussen is vaak in een twintigtal seconden klaar — het algoritme werkt bijna onmiddellijk, het is vooral het opstarten van de machine dat tijd kost — en ~600 cursussen in ongeveer een minuut. Voor een zeer grote instelling die deze grens zou naderen, kan het team van Omniscol op verzoek de rekenkracht van de machine verhogen.
Opties voor de roostergeneratie
Standaard plaatst de roostergeneratie alle lessen die zijn aangemaakt maar nog niet geplaatst. Ze kan ook al geplaatste lessen verplaatsen als dat het rooster verbetert. Vergrendelde lessen behouden hun positie.
Met het optiemenu kunt u onder meer:
- de lokalen beheren met drie keuzes: standaard een geoptimaliseerde toewijzing, alleen controleren, of de lokalen volledig negeren;
- alleen bepaalde klassen of bepaalde vakken selecteren;
- een kalenderrooster beperken tot een gericht datumvenster;
- de al toegewezen lokalen of de huidige plaatsingen negeren;
- alleen de lokalen toewijzen zonder de hele plaatsing opnieuw te berekenen;
- een snelle generatie zonder optimalisatie starten;
- flexibele plaatsing op de onderverdelingen van het tijdraster toestaan wanneer het rooster met een onderverdeling werkt.
Met de geavanceerde optimalisatie-instellingen kunt u ook de gaten verkleinen, twee lessen van hetzelfde vak op dezelfde dag vermijden, de lessen spreiden, een minimum of maximum aantal uren vastleggen, of het aantal aanwezigheidsdagen van de docenten kiezen. De gewoonten verschillen per land: in Frankrijk proberen sommige instellingen het aantal aanwezigheidsdagen van de docenten terug te brengen; in andere contexten geeft men er juist de voorkeur aan die dagen te spreiden, bijvoorbeeld om andere taken op de vestiging te organiseren.
Opties die eigen zijn aan de kalendermodus
In de kalendermodus kunnen de geavanceerde opties de roostergeneratie beperken tot een gericht datumvenster dat korter is dan het volledige bereik van het rooster. Dat is handig om maar een deel van het jaar te genereren: een test over één maand, het stapsgewijs opbouwen van een semester, of het opnieuw oppakken van een al voorbereide periode.
De andere belangrijke optie is het compacteren van de dagen voor de klassen. Standaard zoekt het algoritme eerder een evenwicht over de beschikbare dagen; genereert u maar een deel van de lessen van het jaar, dan kan dat gedrag de lessen kunstmatig uitsmeren. Met het compacteren kunt u om een groepering vragen:
- aan het begin van het venster;
- aan het eind van het venster;
- zonder voorkeur voor begin of eind, maar met dagen die zo compact mogelijk blijven.
Herhaling op een rooster van het type kalender: eerst de standaardweek
Een rooster van het type kalender geeft elke les één voor één haar eigen datum. Toch werken sommige opleidingen niet zo: de les van maandag 10 uur komt elke week terug, zo veel mogelijk. Een klas geeft dat op met Terugkerende lessen; een cursus van die klas onttrekt zich eraan met Buiten herhaling. Er wordt niets geraden: zonder die opgave plaatst de roostergeneratie elke les op haar eigen datum, hoezeer de lessen ook op elkaar lijken. Het urenverdelingsbeleid is optioneel: de herhaling geldt op zichzelf; een expliciet beleid geeft het ritme aan dat het algoritme zo goed mogelijk moet aanhouden.
Zodra één klas van het rooster terugkerend is, werkt de roostergeneratie in drie fasen.
-
Eerst een standaardweek. De lessen bundelen zich tot series. Twee gevallen:
- de cursus draagt een urenverdelingsbeleid: het algoritme bundelt de lessen tot series die deze verdeling respecteren, en die een precieze herhalingswens kunnen dragen;
- anders worden de series geraden: hetzelfde vak, dezelfde groep, dezelfde vorm — vergelijkbare duur en docenten. De groepen van eenzelfde klasverdeling blijven gescheiden, want twee groepen die tegelijk werken, bezetten twee tijdsloten. Een les die als enige van haar soort is, vormt geen serie.
Elke serie zoekt vervolgens haar plaats op een fictieve week, net als op een wekelijks rooster. Daar leest de roostergeneratie het ritme af dat het beleid vraagt: de kolom Herhaling van een regel zegt twee keer per week of eens in de drie weken; Automatisch laat het algoritme dat afleiden uit het aantal lessen afgezet tegen de lesweken. Een cursus die vier keer per week wordt gegeven, bezet vier tijdsloten van de standaardweek. Deze theoretische week houdt al rekening met de kalenderbeperkingen: vastgezette lessen, onbeschikbaarheid op precieze datums of tijdsloten. Series kunnen ook hetzelfde tijdslot bezetten door elkaar op te volgen.
-
Het uitrollen over de kalender. De gevonden week wordt vervolgens herhaald over het datumbereik van de klas: haar datumvenster als ze dat heeft, anders de hele periode van het rooster. Elke les van de serie krijgt daar haar week, haar dag en haar tijdslot. De conflicten worden datum voor datum onderzocht; is de precieze plek al bezet, dan houdt het algoritme de dichtstbijzijnde oplossing aan.
-
De gewone kalendergeneratie maakt het werk af, zonder herhaling. Wat de standaardweek niet heeft kunnen dateren, wordt niet geforceerd: die lessen sluiten zich aan bij de niet-terugkerende lessen, die de kalendergeneratie op haar beurt plaatst.
Hoe de roostergeneratie te werk gaat
Inzicht in de logica van het algoritme helpt u te voorzien wat het zal plaatsen, wat het zal opofferen en hoe u het kunt sturen. Het streeft twee doelen na, in deze volgorde:
- Alles erin krijgen — de absolute prioriteit: alle lessen plaatsen met inachtneming van de harde beperkingen.
- De kwaliteit optimaliseren — zodra alles past: de tussenuren beperken, de dagen gladstrijken, de voorkeuren honoreren.
Het vertrekt van een schone lei (vergrendelde lessen behouden hun plaats, de andere worden opnieuw ingepland) en plaatst van de moeilijkste les naar de gemakkelijkste. De moeilijkheid komt vooral voort uit de krapte van de beperkingen: een cursus waarvan de docent maar één middag per week beschikbaar is, of een blok van vier uur dat in één stuk moet worden ingepast, gaat voorop. Bij gelijke moeilijkheid wisselt het de vakken af en behandelt het de zeldzaamste vóór de meest voorkomende, om de kansen eerlijk over alle vakken te verdelen.
Wanneer niet alles past: de opoffering
Is het rooster te sterk beperkt om alles in te passen, dan geeft het algoritme het niet op: het kiest de kleinste verzameling lessen om opzij te leggen zodat de rest past, en optimaliseert vervolgens dat gedeeltelijke rooster. De opgeofferde lessen blijven in de balk met te plaatsen post-its staan. Doordat de ordening het moeilijkste en het zeldzaamste voorrang gaf, zijn het eerder gemakkelijke en talrijke lessen die het onderspit delven: het vijfde uur van een vak met een groot urenvolume eerder dan het enige uur van een zeldzaam vak.
U houdt zelf de regie over deze afwegingen: vergrendel de lessen die nooit mogen verschuiven — ze worden bij voorrang geplaatst en niet opgeofferd — en versoepel de overmaat aan beperkingen (open tijdsloten, beschikbaarheid) waar dat kan, zodat het geheel past.
Harde en zachte beperkingen
Niet alle beperkingen zijn gelijkwaardig:
- Hard — nooit geschonden: de bezetting (een docent, een klas, een groep, een lokaal of een resource wordt niet twee keer op hetzelfde moment gebruikt), de tijdvakken die als Niet beschikbaar (in het zwart) zijn gemarkeerd op een docent, een klas, een lokaal, een cursus of een groep, het ontbreken van een vrij lokaal of een vrije resource op het tijdslot, de gesloten dagen, de vergrendelde posities en de groepsuitlijningen.
- Zacht — al het overige, dat het algoritme mag overtreden ten koste van strafpunten om alles ingepast te krijgen: de tijdvakken die als Ongewenst (in het rood — te vermijden, niet verboden) zijn gemarkeerd, en de optimalisatievoorkeuren (compactheid, spreiding, groepering per dag…). Een beperking met een hoge prioriteit weegt zwaarder dan een met een lage prioriteit, maar geen enkele blokkeert. Het algoritme probeert ook gerichte versoepelingen (plaatsing op de onderverdelingen van het tijdraster…) wanneer dat de prijs is om geen enkele les op te offeren.
Controleren zonder te optimaliseren
De optie snelle generatie (zonder optimalisatie) start een verkorte doorrekening die vooral één vraag beantwoordt: past alles? Handig om de haalbaarheid van een configuratie te testen voordat u de tijd voor een volledige optimalisatie investeert.
Resultaat
- Groene banner: de roostergeneratie is geslaagd. De lessen van het gevraagde bereik konden worden geplaatst en het resultaat kan worden geïnspecteerd.
- Rode banner: er is geen volledige oplossing gevonden. Het beste berekende rooster blijft raadpleegbaar en de niet-geplaatste lessen verschijnen voor de diagnose in de balk met post-its.
Zie Een mislukte roostergeneratie diagnosticeren.
Consolideren of kopiëren
Na een geslaagde roostergeneratie biedt Omniscol twee opties:
- Consolideren in het lopende rooster (de plaatsing vervangt de bestaande).
- Een kopie maken (het huidige rooster blijft ongewijzigd, het geoptimaliseerde resultaat wordt een nieuw rooster).
Bent u van plan later opnieuw te genereren (omdat u bijvoorbeeld stapsgewijs opbouwt), consolideer dan niet: anders zouden de al geplaatste lessen vertrekpunten worden voor de nieuwe roostergeneratie.
Een les vergrendelen voordat u opnieuw genereert
Gebruik op een al geplaatste les het hangslot voor de positie om die te vergrendelen. De volgende roostergeneratie verplaatst die les niet, maar past de andere lessen eromheen aan. Handig om “onwrikbare” lessen te verankeren (externe sprekers op een vaste datum, examens met een vaste datum, handmatige afstemmingen…). Alle details staan in Een les vergrendelen: vergrendelen in bulk, gevolgen voor de diagnose (rood → oranje), gedrag van het algoritme.
Een rooster naar JSON exporteren
De knop exporteert alleen het lopende rooster in JSON-formaat. Dit is niet de volledige export van het account die in Import en export wordt beschreven.
Typische gevallen:
- een concept of een scenario vastleggen voordat u het verwijdert;
- een tussenstand archiveren vóór een ingrijpende reorganisatie;
- juist dit rooster in het kader van support aan het team van Omniscol bezorgen.
Net als bij de volledige JSON-export van het schoolaccount is het opnieuw inlezen geen standaardgebruik dat aan schoolzijde vrij beschikbaar is.
En daarna
Laatste stap: Een rooster publiceren.
Stappenplan
Een automatische roostergeneratie starten
-
De automatische roostergeneratie plaatst de lessen op het rooster met inachtneming van tientallen beperkingen (beschikbaarheid, capaciteiten, groepsuitlijningen, specialisaties, afwisselende weken). Beschikbaar op weekroosters, cyclische roosters en kalenderroosters.
-
Controleer het tabblad Roostergeneratie. Daar staan de globale statistieken: aangemaakte tegenover geplaatste lessen, ingevoerde urenvolumes tegenover de diensturen van de docenten, blokkerende meldingen (rood), waarschuwingen (geel — die waarschuwen zonder te blokkeren).
-
Corrigeer de rode meldingen voordat u start. Zolang er nog rode meldingen openstaan, kan de roostergeneratie niet beginnen — tenzij u de berekening forceert via het menu "Meer opties", wat niet wordt aanbevolen. Over de gele moet u een afweging maken, maar ze verhinderen de roostergeneratie niet.
-
Stel zo nodig de opties voor de roostergeneratie in: lokalen toewijzen, alleen controleren of negeren; gerichte klassen of vakken; snelle generatie zonder optimalisatie; al toegewezen lokalen of huidige posities negeren. In de kalendermodus kunt u met de geavanceerde opties ook het gegenereerde datumvenster beperken en de lessen compacteren aan het begin van de periode, aan het eind van de periode of zonder voorkeur.
-
Klik op Rooster genereren. De verwerking loopt op de achtergrond; het scherm toont de status van de roostergeneratie en laat u het resultaat inspecteren zodra het beschikbaar is.
-
Sla op wanneer de score u bevalt. Het rooster is geplaatst. Volgende stap: neem de eventuele conflicten door, pas bijzondere gevallen met de hand aan (zie Handmatige plaatsing) en publiceer daarna.
-
En daarna: Een rooster publiceren.