940 likes | 1.09k Views
2de gebruikerscommissie DINGO. @KaHo Sint-Lieven, Gent 30 maart 2004. Overzicht. Technologisch gedeelte Literatuurstudie: modellen voor personeelsplanning Voorgesteld algemeen personeelsplanningmodel Opslaan en inlezen van XML bestanden (JDOM, XOM) Evalueren van beperkingen
E N D
2de gebruikerscommissie DINGO @KaHo Sint-Lieven, Gent 30 maart 2004
Overzicht • Technologisch gedeelte • Literatuurstudie: modellen voor personeelsplanning • Voorgesteld algemeen personeelsplanningmodel • Opslaan en inlezen van XML bestanden (JDOM, XOM) • Evalueren van beperkingen • Constraint Generator (CoFfTeA) • Literatuurstudie: algoritmen voor personeelsplanning • Algemeen gedeelte • Classificatie van personeelsplanning • Voorgesteld algemeen personeelsplanningmodel • Toelichting van het model adhv prototype gebruikerinterfaces • Distributie Vakgroep IT - KaHo Sint-Lieven
Agenda Technisch gedeelte Modellering (WP2) • Literatuurstudie modellen voor personeelsplanning • Korte schematische voorstelling van het model • Opslaan en openen van de data in XML (via JDOM, XOM) • Evaluatie van constraints • Constraint Generator uit CoFfTeA Algoritmen voor personeelsplanning (WP3) • Aanpak literatuurstudie algoritmen voor personeelsplanning Vakgroep IT - KaHo Sint-Lieven
Modellen voor personeelsplanning • Mathematische modellen: meeste vrij analoog • Toewijzen van werknemers per shift aan taak: wordt voorgesteld door matrix • DOEL: rekening houdend met beperkingen waarden zoeken voor matrixelementen Vakgroep IT - KaHo Sint-Lieven
Voorbeeld van een wiskundig model • “Algemeen” model voor ETP van Meisels en Schaerf (vaste begin- en einduren) • m werknemers E1,…,Em • n shifts S1,…,Sn • t taken T1,…,Tt • Doel: vinden van een 3-dim. binaire m x n x t matrix X zodat xijk=1 als werknemer Ei toegewezen is aan taak Tk in shift Sj. Vakgroep IT - KaHo Sint-Lieven
Voorbeeld van een wiskundig model • De beperkingen: • vereistenmatrix is een niet-negatieve n x t matrix R zodat Rjk het aantal keren voorkomen van taak Tk in shift Sj voorstelt • kwalificatiematrix is een binaire m x t matrix Q zodat Qik=1 als werknemer Ei de taak Tk mag en kan uitvoeren, in het andere geval is Qik=0 • beschikbaarheidsmatrixis een binaire m x n matrix A, waar Aij=1 als werknemer Ei beschikbaar is voor shift Sj, in het andere geval is Aij=0 Vakgroep IT - KaHo Sint-Lieven
Voorbeeld van een wiskundig model • De beperkingen (vervolg): • 3-dimensionele binaire n x n x mconflictmatrixC, zodat als Cj1j2i=0 dan kan werknemer Ei niet toegewezen worden aan de shifts Sj1 en Sj2 • Werkbelasting: boven– en onderlimiet op het aantal taken waaraan elke werknemer kan aan worden toegewezen. Definieer daartoe een shiftverzameling G1,…,Gs, die elk shifts van een bepaalde soort groeperen. Definieer dan 2 geheeltallige m x s matrices V en W zodat werknemer Ei moet toegewezen worden aan ten minste Vik en ten hoogste Wik shifts van groep Gk. Vakgroep IT - KaHo Sint-Lieven
Voorbeeld van een wiskundig model • Wiskundig geformuleerd: • Vind xijk zodat: Vakgroep IT - KaHo Sint-Lieven
Doch echter… • Opstellen van zo’n wiskundig model: geen eenvoudige taak, bijv. als er veel niet-lineaire beperkingen moeten worden uitgedrukt in vorm van lineaire ongelijkheden (bijv. geen 3 opeenvolgende nachtshifts) • Bij realistisch problemen: aantal variabelen is heel groot • Niet makkelijk interpreteerbaar voor de gebruikers Vakgroep IT - KaHo Sint-Lieven
Algemeen personeelsplanningsmodel • Invoer • Gegevens (Jan werkt dinsdag 30 maart) • Beperkingen (na een late shift, geen vroege) • Berekening • Opbouwen interne rekenstructuur • Via algoritmen oplossingenruimte genereren • Uitvoer • Weergave en bewerking van gekozen oplossing Vakgroep IT - KaHo Sint-Lieven
Gegevens Beperkingen P Jan D Interne rekenstructuur Piet 08h00 17h00 T Din 30 maart Algoritmen Oplossing P Jan werkt dinsdag 30 maart P Piet moet aan de inslag staan T D D De inslag moet bemand zijn van 8h00 tot 17h00 Vakgroep IT - KaHo Sint-Lieven T
Algemeen personeelsplanningsmodel • Invoer • Gegevens: Opslaan en lezen via XML • Beperkingen: Constraint Generator (CoFfTeA) • Berekening • Opbouwen interne rekenstructuur: • Gegevens in 3d-matrix en controleren op beperkingen • algoritmen: • Welke algoritmen gebruikt worden hangt af van de complexiteit • Uitvoer • Weergave en bewerking van gekozen oplossing • Concrete informatie betreft personeel, tijd en taken Vakgroep IT - KaHo Sint-Lieven
Algemeen personeelsplanningsmodel • Gegevens: Opslaan en lezen via XML • Drie dimensies tijd/taken/personeel • Tijd: • Per dag (shifts) • Volgens contract • Volgens gewenste bezetting (coverage) • Vakanties • Taken: • Kwalificatie • Gewenste bezetting • Personeel: • Kwalificatie • Contract • Vakantie Vakgroep IT - KaHo Sint-Lieven
Naam Beginuur Einduur Pauze: Beginuur Einduur Verboden Zone: Beginuur Einduur Shifts Qualifications Naam Naam Vereiste kwalificatie Alternatieve kwalificatie Duties Taak Shift Coverageperiode per # weken Minimale bezetting/dag Gewenste bezetting/dag Coverage Naam: Max uur/week Gem uur/week Min #weekend vrij per # weken Werkpatroon per# weken Mogelijke shifts/dag Contract Naam Voornaam Contracttype Vakanties Kwalificaties Alternatieve kwalificaties Personnel Vakgroep IT - KaHo Sint-Lieven
Algemeen personeelsplanningsmodel • Berekening • Opbouwen interne rekenstructuur: • Gegevens herleiden naar drie dimensies • Invullen in matrixstructuur • Controleren op beperkingen • Inkleuren van de matrix in mogelijke en onmogelijke regio’s • Algoritmen: • Algoritmen maken keuzes uit mogelijke regio’s • Hercontroleren deze op beperkingen • Evalueren de oplossing • Herbeginnen met nieuwe keuze • Welke algoritmen toegepast worden hangt af van de complexiteit Vakgroep IT - KaHo Sint-Lieven
Algemeen personeelsplanningsmodel • Uitvoer (weergave en bewerking van gekozen oplossing) • Concrete informatie betreft personeel, tijd en taken • (personeel, tijd): • Kalender met wie wanneer moet werken • (taken, tijd): • Kalender met welke taken uitgevoerd worden • (personeel, taken): • Wie doet wat? Vakgroep IT - KaHo Sint-Lieven
Opslaan en inlezen van XML bestanden JDOM en XOM
Opslaan en inlezen van XML bestanden • Gegevens worden opgeslagen in XML bestanden • Voordeel is dat er geen speciale software nodig is om de gegevens te interpreteren • Gegevens zijn makkelijk uit te wisselen • Begrijpbaar voor iedereen Vakgroep IT - KaHo Sint-Lieven
XML • XML = eXtensible Markup Language • XML is een markup taal voor documenten die gestructureerde informatie bevatten • Uitbreidbaar: geen vast formaat zoals bijv. HTML • XML is gecreëerd om informatie te structureren, opslaan en te verzenden Vakgroep IT - KaHo Sint-Lieven
rootelement attribuut element XML: voorbeeld <?xml version="1.0" encoding="UTF-8"?> <shifts> <shift ID="1"> <description>vroege</description> <allowed> <start_time> <hour>6</hour> <minute>0</minute> </start_time> <end_time> <hour>14</hour> <minute>0</minute> </end_time> <work_duration>8:0</work_duration> <break> <start_time> <hour></hour> <minute></minute> </start_time> Vakgroep IT - KaHo Sint-Lieven
XML: voorbeeld <end_time> <hour></hour> <minute></minute> </end_time> </break> </allowed> <forbidden> <start_time> <hour>2</hour> <minute>0</minute> </start_time> <end_time> <hour>23</hour> <minute>55</minute> </end_time> </forbidden> </shift>… </shifts> Vakgroep IT - KaHo Sint-Lieven
XOM, JDOM • Java APIs om XML files te manipuleren • JDOM is de meest gebruikte • Echter 1 nadeel: heel moeilijk om door een XML boom te navigeren • XOM is daarvoor veel beter geschikt: hoewel het nog niet vanzelfsprekend is • XOM: heel recent, gebeuren constant aanpassingen aan de API (sommige methodes die in vroegere versies bestonden, verdwijnen soms) Vakgroep IT - KaHo Sint-Lieven
Snelcursus JDOM import org.jdom.*; import org.jdom.output.XMLOutputter; import java.util.*; import java.io.*; public class ConstraintSwing { private Element rootElement = new Element("constraints"); private DocType doctype = new DocType(rootElement.getName()); private Document doc = new Document(rootElement, doctype); public void Output2File(String xmlFileName){ try{ XMLOutputter outputter = new XMLOutputter("\t", true); FileOutputStream output = new FileOutputStream(xmlFileName); outputter.setEncoding("UTF-8"); outputter.output(doc, output); output.close(); output.flush(); adaptFile(xmlFileName); } Vakgroep IT - KaHo Sint-Lieven
Snelcursus JDOM catch (FileNotFoundException FNFE){ System.out.println(FNFE.getMessage()); } catch (IOException IOE){ System.out.println(IOE.getMessage()); } } public void createXMLElement(Element root, String child, String tkst){ Element child1 = new Element(child); child1.setText(tkst); root.addContent(child1); } Vakgroep IT - KaHo Sint-Lieven
Snelcursus JDOM public Element createXMLElement1(Element root, String child, String attri){ Element child1 = new Element(child); child1.setAttribute("metaname", attri); root.addContent(child1); return child1; } … } Vakgroep IT - KaHo Sint-Lieven
Snelcursus XOM import nu.xom.*; import java.io.*; public class XmlTranslator{ public void Output2File(String xmlFileName, Document doc){ try{ FileOutputStream output = new FileOutputStream (xmlFileName); Serializer outputter = new Serializer(output); outputter.write(doc); output.close(); output.flush(); } catch(FileNotFoundException FNFE){ System.out.println(FNFE.getMessage()); } catch(IOException IOE){ System.out.println(IOE.getMessage()); } } Vakgroep IT - KaHo Sint-Lieven
Snelcursus XOM private Element createRootElement (String root){ Element rootElement = new Element(root); return rootElement; } private Document createDocument(Element rootElement){ Document doc = new Document(rootElement); return doc; } public Document createRootAndDocument(String root){ return createDocument(createRootElement(root)); } public void createXMLElement(Element rootElement, String child, String text){ Element child1 = new Element(child); child1.appendChild(text); rootElement.appendChild(child1); } Vakgroep IT - KaHo Sint-Lieven
Snelcursus XOM public Element createXMLElement(Element rootElement, String child, String attribuut, String value){ Element child1 = new Element(child); Attribute att = new Attribute(attribuut, value); child1.addAttribute(att); rootElement.appendChild(child1); return child1; } public Element createXMLElement(Element rootElement, String child){ Element child1 = new Element(child); rootElement.appendChild(child1); return child1; } … } Vakgroep IT - KaHo Sint-Lieven
Evaluatie van beperkingenvoor personeelsplanning kostfunctiebenadering voor planning met een groot aantal beperkingen op uurroosters van personeel
Beperkingen • Verpleegkundigen, politie, arbeiders in productie en logistiek,… • Harde beperkingenminimale bezetting per tijdslot • Zachte beperkingentijdgerelateerde beperkingen op de uurroosters van het personeel • Doel: stel een uurrooster op met de beschikbare personeelsleden dat aan de harde beperkingen voldoet en dat streeft naar een goede kwaliteit met betrekking tot de zachte beperkingen • Metaheuristieken vergen een groot aantal evaluaties van de doelfunctie (die de kwaliteit van een oplossing meet) Vakgroep IT - KaHo Sint-Lieven
Vereisten • Functionele vereisten • Korte evaluatietijd • Verklarend • Uitbreidbaar • Probleem specifieke vereisten • Harde beperkingen • bezetting • kwalificatie • Zachte beperkingen Vakgroep IT - KaHo Sint-Lieven
Evaluatie Methode • Laag geheugengebruik • Simultane berekening van verschillende afdelingen • Complexe problemen • Snel • Metaheuristieken • Complexe reële problemen • Eenvoudig • Modulair • Implementatie • Evaluatie • Verklarend • Overtreden beperkingen • Grootte van de overtreding • Uitbreidbaar • Nieuwe beperkingen • Extra eigenschappen • Modificeerbaar • Kost parameters • Waarden van de beperkingen Vakgroep IT - KaHo Sint-Lieven
Zachte beperkingen Beperkingen van de organisatie • Minimum tijd tussen twee toekenningen • Toegelaten alternatieve kwalificaties Beperkingen bepaald door het contract • Maximum aantal toekenningen gedurende de planningsperiode • Minimum/maximum aantal opeenvolgende dagen • Minimum/maximum aantal werkuren • Minimum/maximum aantal opeenvolgende vrije dagen • Maximum aantal toekenningen per dag van de week • Maximum aantal toekenningen per shift • Maximum toekenningen van een bepaalde shift per week • Aantal opeenvolgende shifts (van een type) • Plan 2 vrije dagen na de nachtdienst Vakgroep IT - KaHo Sint-Lieven
Zachte beperkingen • Volledige weekends plannen • Identieke shifts toekennen tijdens het weekend • Maximum aantal opeenvolgende weekends werken • Maximum aantal weekends werken gedurende 4 weken • Maximum (cumulatief) aantal toekenningen op feestdagen • Beperking op de opeenvolging van shifts • Patronen voor specifieke cyclische beperkingen • Werkbelasting balanceren over het beschikbare personeel Persoonlijke beperkingen • Vrije dag/vrije shift • Gewenste shift • Stagebegeleiding (studenten niet alleen aan het werk) • Personeelsleden niet samen aan het werk Vakgroep IT - KaHo Sint-Lieven
Algemene variabelen • planning periode (bvb 4 weken, 28 dagen) • shifts, personeelsleden, kwalificaties • event (toekenning), vrijedag Vakgroep IT - KaHo Sint-Lieven
Nummeringen: sjablonen Constraints max-total max-pert max-between max-consecutive Waarden Tellers total last Kostparameters min-total min-pert min-between min-consecutive Formele beschrijving: Nummeringen bewerkingen en variabelen • consecutive • pert (array) Vakgroep IT - KaHo Sint-Lieven
Voorbeeld • planningsperiode 1 week • zachte beperkingen: • maximum aantal toekenningen 6 • minimum 2 • maximum aantal opeenvolgende vrije dagen 8 • minimum 2 • maximum aantal opeenvolgende toekenningen 4 • minimum 2 • maximum per dag 1 • maximum aantal nachtdiensten 3 • minimum aantal opeenvolgende nachtdiensten 2 • volledige weekends werken Vakgroep IT - KaHo Sint-Lieven
Nummeringen rooster P1 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 constraints N2 max-total = 3 min-consecutive = 2 tellers last total consecutive constante max constraints N3 min-consecutive = 2 Vakgroep IT - KaHo Sint-Lieven
Kostfunctie P1 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 kost N1 cost-max-total = 0 cost-min-total = 0 cost-max-between = 0 cost-min-between = 0 cost-max-consecutive = 1 cost-min-consecutive = 0 cost-max-pert = 0 tellers last total consecutive constraints N2 max-total = 3 min-consecutive = 2 kost N2 max-total = 0 min-consecutive = 1 constraints N3 min-consecutive = 2 kost N3 min-consecutive = 0 totale kost (kostparameter * kost) Vakgroep IT - KaHo Sint-Lieven
Kostfunctie P2 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 kost N1 cost-max-total = 0 cost-min-total = 0 cost-max-between = 0 cost-min-between = 1 cost-max-consecutive = 0 cost-min-consecutive = 1 cost-max-pert = 0 tellers last total consecutive constraints N2 max-total = 3 min-consecutive = 2 kost N2 max-total = 0 min-consecutive = 2 totale kost (kostparameter * kost) constraints N3 min-consecutive = 2 kost N3 min-consecutive = 0 Vakgroep IT - KaHo Sint-Lieven
Kostfunctie P3 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 kost N1 cost-max-total = 1 cost-min-total = 0 cost-max-between = 0 cost-min-between = 0 cost-max-consecutive = 3 cost-min-consecutive = 0 cost-max-pert = 0 tellers last total consecutive constraints N2 max-total = 3 min-consecutive = 2 kost N2 max-total = 0 min-consecutive = 0 totale kost (kostparameter * kost) constraints N3 min-consecutive = 2 kost N3 min-consecutive = 0 Vakgroep IT - KaHo Sint-Lieven
Kostfunctie P4 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 kost N1 cost-max-total = 0 cost-min-total = 0 cost-max-between = 0 cost-min-between = 1 cost-max-consecutive = 0 cost-min-consecutive = 1 cost-max-pert = 0 tellers last total consecutive constraints N2 max-total = 3 min-consecutive = 2 kost N2 max-total = 0 min-consecutive = 0 totale kost (kostparameter * kost) constraints N3 min-consecutive = 2 kost N3 min-consecutive = 1 Vakgroep IT - KaHo Sint-Lieven
Kostfunctie P5 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 kost N1 cost-max-total = 0 cost-min-total = 0 cost-max-between = 0 cost-min-between = 1 cost-max-consecutive = 0 cost-min-consecutive = 0 cost-max-pert = 1 tellers last total consecutive constraints N2 max-total = 3 min-consecutive = 2 kost N2 max-total = 0 min-consecutive = 0 totale kost (kostparameter * kost) constraints N3 min-consecutive = 2 kost N3 min-consecutive = 0 Vakgroep IT - KaHo Sint-Lieven
Startvoorwaarden Vakgroep IT - KaHo Sint-Lieven
Kostfunctie P1 constraints N1 max-total = 6 min-total = 2 max-between = 8 min-between = 2 max-consecutive = 4 min-consecutive = 2 max-pert = 1 kost N1 cost-max-total = 0 cost-min-total = 0 cost-max-between = 0 cost-min-between = 0 cost-max-consecutive = 3 cost-min-consecutive = 0 cost-max-pert = 0 tellers N1 last = -1 total = 0 consecutive = 2 tellers N2 last = U total = 0 consecutive = U constraints N2 max-total = 3 min-consecutive = 2 kost N2 max-total = 0 min-consecutive = 1 tellers N3 last = -2 total = 0 consecutive = 2 constraints N3 min-consecutive = 2 kost N3 min-consecutive = 0 Vakgroep IT - KaHo Sint-Lieven
Evaluatiealgoritme • Initialisatie: rekening houdend met wat vroeger gepland was • Planning in de periode voor de planningsperiode staat vast • Beeld de nummeringen af op de voorgaande planningsperiode • Zoek waarden voor de tellers: initialiseer • Geen kosten aanrekenen voor het verleden • Tussentijdse evaluatie: tellers aanpassen en kosten berekenen indien nodig • Finale evaluatie: kosten berekenen aan het einde van de planningsperiode per iteratie worden de algoritmen 1 x uitgevoerd per persoon in de planning; onafhankelijk van het aantal en het type van de zachte beperkingen Vakgroep IT - KaHo Sint-Lieven
-1 U -2 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Vakgroep IT - KaHo Sint-Lieven