Blog Shift Scheduler
Priebežné plánovanie zmien: ako história rozpisu zlepšuje AI plánovanie

Väčšina nástrojov na plánovanie zmien berie každý rozpis ako samostatnú úlohu.
Pri jednoduchom týždennom rozpise to môže stačiť. Pri reálnych tímoch však rýchlo vznikajú problémy. Ak dnes plánujete júl a o mesiac budete plánovať august, augustový rozpis stále potrebuje vedieť, čo sa stalo na konci júla.
Zamestnanec, ktorý mal nočnú zmenu 31. júla, môže 1. augusta potrebovať odpočinok. Človek, ktorý mal v júli príliš veľa nočných zmien, by nemal byť prvý na rade aj v auguste. A rotácia denná, nočná, voľno by sa nemala začínať odznova len preto, že sa zmenil kalendárny mesiac.
Presne tento problém rieši priebežné plánovanie zmien.
Čo je priebežné plánovanie zmien?
Priebežné plánovanie zmien znamená, že systém pri tvorbe nového rozpisu používa aj nedávnu históriu zmien.
Namiesto toho, aby sa AI pozerala iba na vybraný dátumový rozsah, skontroluje aj predchádzajúce zmeny a použije ich ako kontext. Nový rozpis sa stále vytvorí len pre dátumy, ktoré používateľ požadoval, ale solver vie, čo sa dialo tesne pred nimi.
Pri plánovaní personálu je to dôležité, pretože veľa pravidiel presahuje hranice jedného plánovacieho obdobia:
- Odpočinok po nočných zmenách
- Maximálny počet pracovných dní za sebou
- Týždenné limity hodín
- Prekrývanie nočných zmien
- Rotačné vzory typu denná, nočná, voľno
- Férové rozdelenie náročných zmien
- Férové celkové hodiny v čase
Bez histórie môže systém vytvoriť rozpis, ktorý v rámci vybraného mesiaca vyzerá správne, ale v praxi pôsobí nespravodlivo alebo nebezpečne.
Praktický problém: hranice mesiacov sú umelé
Manažéri často plánujú v pevných obdobiach: jeden týždeň, dva týždne alebo jeden mesiac.
Tím sa však na začiatku nového obdobia nevynuluje.
Napríklad:
- Nočná zmena v nedeľu môže znamenať, že pondelok má byť voľný.
- Človek, ktorý pred začiatkom nového rozsahu pracoval päť dní, už môže byť na limite pracovných dní za sebou.
- Týždenný limit stále platí, aj keď požadovaný rozsah začína v stredu.
- Nočná zmena sa môže začať pred požadovaným rozsahom a skončiť už v ňom.
- Férovosť má brať do úvahy nedávnu náročnú prácu, nie iba nový rozpis.
Preto dobrý AI plánovač zmien potrebuje históriu rozpisu. Požadovaný dátumový rozsah je len okno, do ktorého sa má vytvoriť výsledok. Solver potrebuje širší kontext, aby urobil bezpečné a férové rozhodnutie.
Ako Shift Scheduler pracuje s históriou
Shift Scheduler necháva požiadavku pre používateľa jednoduchú: stále môžete naraz plánovať maximálne 31 dní.
Vo vnútri však plánovanie pridáva dve automatické okná histórie:
| Okno histórie | Dĺžka | Účel |
|---|---|---|
| História obmedzení | 7 dní pred požadovaným začiatkom | Odpočinok, prekrývanie zmien, maximálny počet dní za sebou, denné a týždenné limity, bezpečné pokračovanie rotácií |
| História férovosti | 60 dní pred požadovaným začiatkom | Férové rozdelenie celkových hodín a šablón zmien vrátane vyváženia nočných zmien |
Dôležité pravidlo je jednoduché:
Pred požadovaným dátumom začiatku sa nevytvárajú, neupravujú ani nedopĺňajú žiadne zmeny.
História slúži iba ako kontext. Pomáha solveru CP-SAT pochopiť reálnu situáciu, ale nové priradenia ostávajú obmedzené na cieľový plánovací rozsah.
Prečo existujú dve okná histórie
Nie každá história rozpisu má solver ovplyvňovať rovnakým spôsobom.
Časť histórie je prevádzková. Môže z priradenia urobiť nemožnú voľbu.
Napríklad ak človek včera pracoval nočnú zmenu a pravidlo hovorí, že dnes musí oddychovať, solver ho má z dnešnej zmeny vylúčiť. To je tvrdý plánovací fakt.
Iná časť histórie sa týka férovosti. Má optimalizáciu usmerniť, ale nemá zámerne nechať zmenu neobsadenú, keď existuje realizovateľné riešenie.
Napríklad ak jeden človek za posledné dva mesiace odpracoval veľa nočných zmien, plánovač má pri nových nočných zmenách uprednostniť iných kvalifikovaných ľudí. Pokrytie však stále ostáva prvoradé.
Preto Shift Scheduler delí históriu na dve skupiny:
constraintHistorypre prevádzkové pravidláfairnessHistorypre výpočet férovosti
Toto rozdelenie drží správanie systému predvídateľné. Nedávna história môže zablokovať nebezpečné alebo neplatné priradenia, zatiaľ čo dlhšia história férovosti posúva rozpis k lepšej rovnováhe.
Čo riadi história obmedzení
História obmedzení siaha 7 dní pred požadovaný fromDate.
Používa sa pri pravidlách, ktoré musia rozumieť nedávnej práci:
- Odpočinok po konkrétnych šablónach zmien
- Maximálny počet pracovných dní za sebou
- Denné limity hodín
- Týždenné limity hodín
- Kontroly prekrývania zmien
- Nočné zmeny presahujúce do požadovaného rozsahu
- Flexibilné rotačné vzory, napríklad denná, nočná, voľno
Príklad:
Ak požadovaný rozsah začína 1. augusta a človek pracoval nočnú zmenu 31. júla, solver môže 1. august brať ako povinný deň odpočinku, ak pravidlo vyžaduje odpočinok po nočných zmenách.
Plánovač nevytvára ani neupravuje zmenu z 31. júla. Iba ju použije na správne rozhodnutie pre 1. august.
Čo riadi história férovosti
História férovosti siaha 60 dní pred požadovaný fromDate.
Používa sa iba na skórovanie a vyvažovanie:
- Celkové hodiny podľa človeka
- Mix šablón zmien podľa človeka
- Rozdelenie nočných zmien
- Nedávne nadmerné využívanie náročných šablón
Príklad:
Ak Alice za posledných 60 dní pracovala veľa nočných zmien a Bob je tiež kvalifikovaný na nočné zmeny, solver by mal pri ďalšej nočnej zmene uprednostniť Boba, ak je to možné.
Nie je to dokonalá férovosť, pretože plánovanie ľudí vždy obsahuje kompromisy. Je to však výrazne lepšie než tváriť sa, že každý nový mesiac začína s čistým štítom.
Pokrytie je stále na prvom mieste
Priebežná história rozpisu nemá zhoršiť výsledok tým, že systém nechá zmeny prázdne iba pre férovosť.
Shift Scheduler necháva pokrytie ako prvú fázu riešenia. Solver sa najprv snaží obsadiť čo najviac zmien v cieľovom rozsahu pri dodržaní tvrdých obmedzení. Férovosť sa rieši až potom ako súčasť optimalizačného cieľa.
To znamená, že história férovosti môže ovplyvniť, kto bude priradený, ale nemá zámerne nechať cieľovú zmenu neobsadenú, ak sa dá obsadiť.
Pri AI plánovaní personálu je to dôležitý rozdiel:
- Tvrdé obmedzenia chránia bezpečnosť, zákonnosť a realizovateľnosť.
- História férovosti zlepšuje kvalitu rozpisu.
- Pokrytie ostáva hlavný prevádzkový cieľ.
Priebežné plánovanie a optimalizácia CP-SAT
Shift Scheduler používa na optimalizáciu rozpisov solver CP-SAT.
CP-SAT sa na plánovanie zamestnancov hodí veľmi dobre, pretože problém obsahuje veľa premenných a obmedzení:
- Ktorý človek môže pracovať na ktorej zmene
- Ktoré zmeny sa prekrývajú
- Kto je nedostupný
- Koľko hodín môže každý človek pracovať
- Ktoré pravidlá odpočinku platia
- Ktoré priradenia sú férové
- Ktoré rotačné vzory majú pokračovať
Priebežná história rozpisu rozširuje vstup solvera o nedávne fakty. Solver potom vyhodnocuje priradenia v cieľovom rozsahu s presnejším pohľadom na predchádzajúci rozpis.
Jednoducho povedané:
Solver sa nepýta iba: "Kto môže pracovať na tejto zmene?"
Pýta sa: "Kto môže pracovať na tejto zmene vzhľadom na to, čo odpracoval nedávno?"
Príklad: férovosť nočných zmien naprieč mesiacmi
Predstavte si, že júlový rozpis vyzerá takto:
- Alice pracovala 8 nočných zmien.
- Bob pracoval 2 nočné zmeny.
- Alice aj Bob môžu pracovať nočné zmeny.
- Augustový rozpis obsahuje 4 nové nočné zmeny.
Ak augustový solver ignoruje júl, Alice a Bob môžu na začiatku augusta vyzerať rovnako vyvážene.
S históriou férovosti solver vidí, že Alice mala v poslednom čase viac nočnej práce. Keď je to možné, môže viac nových augustových nočných zmien priradiť Bobovi alebo iným vhodným ľuďom.
Práve tu priebežné plánovanie zmien zlepšuje spokojnosť zamestnancov. Znižuje pocit, že náročná práca sa opakuje náhodne alebo nespravodlivo.
Príklad: odpočinok cez hranicu mesiaca
Predstavte si takéto pravidlo:
Po nočnej zmene daj človeku aspoň jeden deň voľna.
Teraz situácia:
- 31. júl: Alice pracuje 19:00-07:00.
- 1. august: Plánovač potrebuje obsadiť dennú zmenu.
Bez histórie obmedzení môže augustový rozpis priradiť Alice na 1. august, pretože solver vidí iba august.
So 7-dňovou históriou obmedzení solver vidí nočnú zmenu z 31. júla a zablokuje priradenie Alice na 1. august.
Výsledný rozpis je bezpečnejší a realistickejší.
Príklad: týždenné limity hodín, keď rozsah začína uprostred týždňa
Týždenné limity sa nie vždy zhodujú s plánovacími obdobiami.
Ak požadovaný rozpis začína v stredu, zamestnanec už mohol pracovať v pondelok a utorok. Tieto hodiny sa majú započítať do týždenného limitu.
História obmedzení dáva solveru dosť informácií na to, aby sa vyhol náhodným nadčasom alebo nereálnym priradeniam nad týždenný limit.
Je to obzvlášť dôležité v zdravotníctve, hotelierstve a gastronómii, maloobchode a všade tam, kde prevádzka pracuje so zákonnými alebo zmluvnými limitmi hodín.
Čo táto funkcia nerobí
Priebežná história rozpisu je zámerne zameraná na konkrétny problém.
Nedovoľuje plánovaču obsadzovať zmeny pred požadovaným dátumom začiatku. Rovnako neprepisuje staré zmeny.
Nesnaží sa vyriešiť každý možný problém s rotačnými vzormi. Presné neukotvené opakujúce sa rotácie budú v budúcej verzii stále potrebovať explicitné dátumy ukotvenia. Aktuálny prístup sa sústreďuje na bezpečné pokračovanie flexibilných rotácií tam, kde má predchádzajúca práca vynútiť odpočinok v cieľovom rozsahu.
Vďaka tomu je správanie ľahko pochopiteľné:
- Požadovaný rozsah ostáva obmedzený na 31 dní.
- História obmedzení sa pozerá 7 dní dozadu.
- História férovosti sa pozerá 60 dní dozadu.
- Historické zmeny sú bežné zmeny, nie záznamy žiadostí o voľno.
- Nové priradenia vznikajú iba v požadovanom rozsahu.
Zhrnutie pre znalostnú bázu
Toto zhrnutie sa hodí pri vysvetľovaní priebežného plánovania v Shift Scheduleri:
- Priebežné plánovanie zmien používa predchádzajúce zmeny ako kontext pre nový rozpis.
- Používatelia stále zadávajú plánovací rozsah maximálne 31 dní.
- Solver automaticky kontroluje 7 dní pred požadovaným začiatkom kvôli prevádzkovým obmedzeniam.
- Solver automaticky kontroluje 60 dní pred požadovaným začiatkom kvôli výpočtu férovosti.
- História obmedzení ovplyvňuje odpočinok, maximálny počet dní za sebou, týždenné limity hodín, denné limity hodín, prekrývanie zmien, nočné zmeny a flexibilné pokračovanie rotácií.
- História férovosti ovplyvňuje férové rozdelenie celkových hodín a šablón zmien vrátane vyváženia nočných zmien.
- História nevytvára, neupravuje ani nedopĺňa zmeny pred požadovaným dátumom začiatku.
- Pokrytie sa optimalizuje ako prvé, takže história férovosti nemá zámerne nechávať cieľové zmeny neobsadené.
- CP-SAT používa historický kontext na to, aby boli priradenia v cieľovom rozsahu bezpečnejšie a férovejšie.
FAQ
Čo je priebežné plánovanie zmien?
Priebežné plánovanie zmien je plánovanie personálu, ktoré pri tvorbe nového rozpisu používa nedávnu históriu zmien. Pomáha pravidlám a férovosti pokračovať naprieč týždňami alebo mesiacmi namiesto toho, aby sa pri každom plánovacom období začínalo odznova.
Prečo je história rozpisu dôležitá pri AI plánovaní zmien?
História rozpisu je dôležitá preto, že odpočinok, férové rozdelenie nočných zmien, týždenné limity hodín a rotačné vzory často presahujú hranice vybraného dátumového rozsahu. Plánovač, ktorý ignoruje nedávnu prácu, môže vytvoriť rozpis, ktorý vyzerá správne, ale je nespravodlivý alebo nebezpečný.
Plánuje Shift Scheduler naraz viac ako 31 dní?
Nie. Používateľom zadaný plánovací rozsah je stále obmedzený na 31 dní. Okná histórie 7 a 60 dní sú interný kontext, nie ďalšie dátumy, do ktorých by sa plánovali nové zmeny.
Môže história vytvoriť zmeny pred dátumom začiatku?
Nie. Historické zmeny sú iba kontext na čítanie. Shift Scheduler vytvára nové priradenia iba v požadovanom cieľovom rozsahu.
Ako história férovosti pomáha pri nočných zmenách?
História férovosti umožňuje optimalizácii vidieť, kto v poslednom období pracoval veľa nočných zmien. Keď môže novú nočnú zmenu pokryť viac kvalifikovaných ľudí, solver môže uprednostniť človeka s menším počtom nedávnych nočných priradení.