3 de gebruikerscommissie KaHo Sint-Lieven, Gent
2 Overzicht Inleiding Situering OpenTS Eigen personeelsplanningsapplicatie Demo Verspreiding Planning vervolg
3 Mijlpalen Mijlpaal: Rapport over gedistribueerde planning Mijlpaal: Prototype planningscomponenten
4
5 Inleiding Doel eerste deel van DINGO project is: Identificeren van personeelsplanningsproblemen: interviews Modelleren van personeelsplanning (o.a. via concrete cases): classificatie en artikel Opstellen van algoritmen voor automatisch plannen voor lokale personeelsplannings- problemen: zie hierna
6 Gekozen planningsalgoritme Na studie algoritmes: Genetische algoritmes Tabu search Uiteindelijk gekozen voor tabu search Goede ervaringen uit vorige projecten Bestaat reeds een Java framework voor tabu search: OpenTS
7 Déjà vu: tabu search Oorspronkelijk ontwikkeld door Fred Glover Vermijdt het blijven hangen in lokale optima
8 Tabu search Vermijden van blijven hangen in lokale optima door die zetten te verbieden (tabu/taboe) of straffen die de oplossing in de volgende iteratie naar punten in de oplossingenruimte brengt die reeds bezocht zijn Laat dus “slechtere” zetten toe om uit een lokaal minimum te raken
9 OpenTS OpenTS: helpt bij het implementeren van tabu search op een goed gedefinieerde, objectgeoriënteerde manier OpenTS beschrijving: Implementeren van de volgende probleemspecifieke interfaces: Oplossingsstructuur Doelfunctie Tabulijst Zetten (‘moves’) Movemanager (definieert de omgevingen) OpenTS gebruikt deze basiselementen om de oplossingenruimte te doorzoeken Mogelijkheid om dynamische tabu search technieken toe te voegen zoals reactieve tabu lijsten door de event handling mogelijkheden (new current solution, new best solution, unimproving move made, …)
10 Een iteratie in OpenTS Nieuwe huidige oplossing Nieuwe huidige oplossing MoveManger genereert zetten MoveManger genereert zetten Doelfunctie evalueert zetten Doelfunctie evalueert zetten Beste niet-tabu zet wordt genomen Beste niet-tabu zet wordt genomen Zet wordt toegepast op huidige oplossing Zet wordt toegepast op huidige oplossing Initiële oplossing Initiële oplossing
11 OpenTS en Tabu Search Zetten (Moves) = transities tussen oplossingen Definieren de omgeving De tabu lijst geeft de recente geschiedenis van de moves weer + implementeert intensificatie en diversificatie strategieën Tabu tenure = aantal iteraties zet taboe gehouden wordt Een kandidaat verzameling: Zijn niet tabu Voldoen aan het aspiratiecriterium Een kandidaat is taboe als het gekenmerkt wordt door een kandidaat op de tabulijst de zet kan niet gekozen worden tenzij het voldoet aan het aspiratiecriterium Aspiratiecriteria = Een betere oplossing accepteren zelfs als deze door een tabuzet wordt gegenereerd Evaluatiefunctie (Doelfunctie) bepaalt de kwaliteit van de oplossing
12 OpenTS Framework MySolution MyTabuList MyMoveManager2 MyObjectiveFunction MyMoveManager1MyMoveManager3 MyMove1MyMove3MyMove2
13 De OpenTS interface Volgende methodes (“het contract”) implementeren: Solution clone() toString() TabuList setTabu(solution, move) isTabu(solution, move) MoveManager getAllMoves(solution) Move operateOn(solution) hashCode() ObjectiveFunction evaluate(solution, move)
14 Een iteratie in OpenTS 1.Start met initiële oplossing 1 Initiële oplossing Oplossing Zet A Zet B Zet C Zet D getAllMoves()getBestMove() Zet B operateOn() setTabu() Tabulijst isTabu() Tabuwaarde 2.Movemanager genereert alle mogelijke zetten, startend van een gegeven oplossing 2 3.OpenTS gebruikt de doelfunctie om elke zet te evalueren 3 4.OpenTS neemt de beste zet, rekening houdend met de tabulijst 4 5.Kenmerken van de huidige oplossing worden in de tabulijst geplaatst 5 6.Gekozen zet wordt op de oplossing losgelaten 6
15 Oplossingsstructuur Matrix van Atomen Atomen bestaan uit: Waarde (0 of 1) Toegelaten: Shift is toegelaten = true Shift is verboden = false Verboden zone: ziektes, eventuele verplichte beschikbaarheid,…
16 Oplossingsstructuur V L N Voorbeeld 0|1|0||1|0|0||0|0|0||0|0|1||0|1|0||0|0|1||1|0|0| 0|0|1||1|0|0||1|0|0||1|0|0||0|0|1||0|1|0||0|0|1| 1|0|0||1|0|0||1|0|0||0|0|0||1|0|0||0|0|0||0|1|0| 1|0|0||1|0|0||0|0|0||1|0|0||0|0|0||0|1|0||0|1|0| 0|1|0||0|1|0||0|1|0||1|0|0||1|0|0||0|1|0||0|1|0| 1|0|0||0|0|0||0|0|0||0|1|0||1|0|0||0|1|0||1|0|0| Persoon 3
17 Klasse Solution Verplichte methode clone implementeren Zorgt ervoor dat er steeds met de goede oplossing wordt gewerkt Om verlies van oorspronkelijke oplossing te vermijden wordt oplossing ge clone d Verschillende zetten worden uitgeprobeerd (op de ge clone de oplossing), maar slechts 1 wordt effectief uitgevoerd (op de oorspronkelijke oplossing)
18 Doelfunctie (ObjectiveFunction) Evalueert de huidige oplossing Onderscheid tussen: Absolute evaluatie (enkel bij starten): duurt iets langer Incrementele evaluatie (anders): vlugger Verplicht implementeren van de evaluate methode Returnwaarde is de evaluatiekost Wordt rekening gehouden met verschillende constraints Gewichten stellen relatieve belangrijkheid van constraints voor
19 Doelfunctie Wij maken gebruik van abstracte klasse om kosten te berekenen import java.util.Vector; abstract class BerekenKostAbstract{ abstract double initieleKost(MySolution solution); abstract double kost(MySolution solution, Vector GEV); abstract Vector eindkost (MySolution solution); }
20 Zet (Move) operateOn methode implementeren Hier wordt de zet echt uitgevoerd Beschrijven wat dit inhoudt Verschillende zetten: FlipMove: 0 => 1 of 1 => 0 FlipXMove: van X elementen wordt complement genomen ColumnChangeMove: omwisselen van 2 kolommen RowChangeMove: omwisselen van 2 rijen Swap2ElementsMove: 2 elementen worden van plaats verwisseld
21 MoveManager Beschrijft de geldige zetten voor elke iteratie Gebeurt op random manier Implementeren van de methode getAllMoves Resultaat: array (Move[ ]) van alle toegelaten zetten
22 Tabulijst Standaard tabulijst in OpenTS array van integers om attributen van zetten bij te houden Lengte ervan kan worden aangepast Diversificatie (lengte + ev. huidige oplossing “shaken”) Intensificatie (lengte )
23 Beperkingen & demo Coverage: komen er evenveel personeelsleden werken als er gevraagd zijn (per shift)? Max/Min # per periode: Max 1 shift per dag Min 1 weekend per 2 weken Min 40 uur (= 5 shiften) per week Max/Min opeenvolgende: Min 2 opeenvolgende Vroege Max 4 opeenvolgende Weekends Max 8 opeenvolgende dagen Na #x komt #y: Na nachtshift komen 2 shiften rust Na 6 opeenvolgende dagen komen 3 dagen rust Na 2 vroege shifts komen 2 dagshifts
24 UML
25 Verspreiding Patat 2004 (Pittsburgh): presentatie door Bart over “Analysis of real-world personnel scheduling problems” Presentatie door Peter over “Semantic Components for Timetabling”
26 Vervolg van het project Vereenvoudigen van onderhandelingen over het gemeenschappelijk inzetten van personeelsleden door gedistribueerde eenheden Identificeren van problemen bij gedistribueerde werking Modelleren van de agentenonderhandeling in gedistribueerde omgeving Implementeren van het agentenmodel in JADE
27 Vervolg project
28 Onderhandelingsmechanisme Meest eenvoudige: Contract Net Protocol 2 uitwisselbare rollen: Manager definieert en coördineert probleem Aannemer voert deeltaak uit (ev. onderaannemers) Bieden om een oplossing te vinden: Aankondigen van een taak (manager) Evalueren van de taak (aannemers) Voorstel (aannemers) Evaluatie van het voorstel en toekenning (manager) Coördinatie & evaluatie van het geheel (manager)
29 Contract Net Protocol (CNP) manager Aankondigen van een taak aannemers manager bieden Contract wordt toegekend aannemers manager aannemers
30 Contract Net Protocol (CNP) Voordelen Natuurlijke load balancing (door het bieden) Fouttolerantie is hoog Beperkingen Geen oplossing voor conflicten Passieve, vrijgevige, eerlijke agenten Communicatie-intensief, hoge netwerkbelasting
31 Vervolg project Agentendeel: Hoe voorstellen? Zeker geen black box! Eerder beslissingsondersteunend
32 Discussie
33
34 Tetra project Intelligent Communicatieplatform voor Multimodaal Transport Start Medeaanvragers Universiteit Gent Universiteit Antwerpen (ITMMA) Univ. Leuven, Gent, Nottingham, VUB Bedrijven: software, transport, haven- en waterwegbeheerders,…