Diplomarbeit im Studiengang Wirtschaftsmathematik zum Thema Turnusoptimierung im öffentlichen Personennahverkehr Themenstellung: Prof. Dr. P. Recht Der Fakultät WiSo der Universität Dortmund vorgelegt im Februar 2000 von Ulf Speer geboren am 28.05.1973 Matrikelnummer 0057154 Danksagung II Danksagung Zunächst möchte ich Herrn Prof. Dr. P. Recht meinen Dank für die Themenstellung aussprechen. Auf diese Weise war es mir möglich, die vorliegende Diplomarbeit über ein praktisches Thema zu schreiben, was mich in allen Phasen der Arbeit ungemein motiviert hat. Außerdem danke ich Britta Papendieck, die mir viele Hinweise zu Aufbau, Struktur und inhaltlichen Aspekten der Arbeit gegeben hat. Großer Dank gebührt auch der VSS GmbH, die mir technische Unterstützung gewährt hat, ohne die eine solche Arbeit nie möglich gewesen wäre. Außerdem hat die VSS GmbH den Kontakt zur Bremer Straßenbahn AG hergestellt. Dadurch war es mir möglich, viele praktische Anmerkungen und Ergebnisse in meine Arbeit aufzunehmen und die Verfahren anhand von aktuellen Daten aus dem Verkehrsbetrieb zu testen. Besonderer Dank gilt auch Thomas Emden-Weinert, der in zahllosen Diskussionen nie müde wurde, mir Anregungen und praktische Hinweise zum Thema Personalplanung und Optimierung zu geben. Außerdem hat er mich perfekt mit Literaturhinweisen versorgt, was besonders in der Anfangsphase viel Zeit beim Suchen gespart hat. Zudem danke ich Alexandre Chelkovitch, meinem C++-Lehrmeister, der stets einen Rat wußte, wenn die Rechenmaschine mal wieder Ihren eigenen Kopf hatte. Matthias Hoffmann und meinem Vater danke ich herzlich für das Korrekturlesen, was aufgrund der vielen Formeln bestimmt keinen Spaß darstellte. Zu guter Letzt sei auch allen meinen Freunden gedankt, die in den letzten Wochen und Monaten viel Verständnis dafür aufgebracht haben, daß ich nur wenig Zeit für gemeinsame Unternehmungen hatte. Das gleiche gilt für meiner Freundin Frauke, die sich vermutlich genauso wie ich freut, daß die Arbeit jetzt endlich beendet ist. Ulf Speer im Februar 2000 Inhaltsübersicht III Inhaltsübersicht 1 EINORDNUNG UND DEFINITIONEN...........................................................1 2 FESTLEGUNG DER ANFORDERUNGEN UND ZIELE .............................10 3 KRITERIEN DER TURNUSPLANUNG FÜR EINE FAHRERGRUPPE ......14 4 KOMPLEXITÄT UND LÖSUNGSANSÄTZE ..............................................28 5 LÖSUNG MITTELS LINEARER PROGRAMMIERUNG .............................35 6 LÖSUNG MITTELS SIMULATED ANNEALING.........................................76 7 VERGLEICH DER VERFAHREN................................................................91 8 DIENST-FAHRERGRUPPEN-ZUORDNUNG .............................................94 9 ZUSAMMENFASSUNG ............................................................................106 LITERATURVERZEICHNIS ............................................................................107 ANHANG .........................................................................................................110 Inhaltsverzeichnis IV Inhaltsverzeichnis 1 EINORDNUNG UND DEFINITIONEN...........................................................1 1.1 Übersicht .........................................................................................................................................1 1.2 Einleitung ........................................................................................................................................1 1.3 Begriff und Aufgaben der Personalplanung ................................................................................2 1.4 Begriffe der Personaleinsatzplanung im Fahrdienst des ÖPNV.................................................2 1.4.1 Fahrplanperiode .......................................................................................................................3 1.4.2 Dienst.......................................................................................................................................3 1.4.3 Dienstmasse .............................................................................................................................4 1.4.4 Fahrergruppe, Fahrerprofil.......................................................................................................4 1.4.5 Dienst-Frei-Schema .................................................................................................................5 1.4.6 Turnus......................................................................................................................................5 1.4.7 Dienstplan ................................................................................................................................6 1.4.8 Matrixeintrag, Belegung ..........................................................................................................7 1.4.9 Turnuskapazität........................................................................................................................7 1.4.10 Folgen von Matrixeinträgen, Belegungsfolge ..........................................................................7 1.4.11 Doppelfrei, Dreifachfrei...........................................................................................................7 1.4.12 Turnusgruppe, Dienstplangruppe.............................................................................................7 1.5 Der Prozeß der Personalplanung im Fahrdienst des ÖPNV.......................................................8 1.5.1 Personalbedarfsplanung ...........................................................................................................8 1.5.2 Personalausstattungsplanung....................................................................................................8 1.5.3 Personaleinsatzplanung............................................................................................................8 2 FESTLEGUNG DER ANFORDERUNGEN UND ZIELE .............................10 2.1 Allgemeine Anforderungen an eine Personalplanung ...............................................................11 2.2 Anforderungen aufgrund konkreter Probleme im Verkehrsbetrieb........................................11 2.3 Anforderungen an Laufzeit und Flexibilität ..............................................................................13 2.4 Anforderungen an die Implementierung ....................................................................................13 3 KRITERIEN DER TURNUSPLANUNG FÜR EINE FAHRERGRUPPE ......14 3.1 Differenzierung der Kriterien .....................................................................................................14 3.1.1 Kapazitätskriterien .................................................................................................................14 3.1.2 Reihenfolgekriterien ..............................................................................................................15 3.1.3 Alternative Differenzierung ...................................................................................................17 3.2 Beschreibung der Kriterien .........................................................................................................17 3.2.1 Entscheidungsschranken ........................................................................................................18 3.2.2 Zielkriterien ...........................................................................................................................22 3.2.3 Mögliche Alternativen und Erweiterungen ............................................................................26 Inhaltsverzeichnis 4 4.1 V KOMPLEXITÄT UND LÖSUNGSANSÄTZE ..............................................28 Existenz einer zulässigen Lösung ................................................................................................28 4.2 Komplexität des Problems ...........................................................................................................29 4.2.1 NP-Vollständigkeit ................................................................................................................29 4.2.2 Komplexität einer vereinfachten Turnusplanung ...................................................................29 4.3 Lösungsansätze .............................................................................................................................30 4.3.1 Konstruktive Verfahren..........................................................................................................30 4.3.2 Metaheuristiken .....................................................................................................................31 4.3.3 LP-basierte und sonstige Verfahren .......................................................................................32 4.3.4 Vergleich der berücksichtigten Kriterien ...............................................................................33 4.3.5 Erfolgversprechende Ansätze ................................................................................................34 5 LÖSUNG MITTELS LINEARER PROGRAMMIERUNG .............................35 5.1 Beschreibung des Branch-and-Bound Verfahrens ....................................................................35 5.1.1 Allgemeines Prinzip...............................................................................................................35 5.1.2 Anwendung auf ein gemischt ganzzahliges lineares Problem ................................................36 5.2 Richtlinien zur Formulierung eines linearen Modells ...............................................................38 5.2.1 Allgemeine Aspekte...............................................................................................................38 5.2.2 Verwendung binärer Variablen ..............................................................................................39 5.2.3 Modellierung der Betragsfunktion .........................................................................................40 5.3 Formulierung des Modells ...........................................................................................................40 5.3.1 Variablen ...............................................................................................................................41 5.3.2 Nebenbedingungen ................................................................................................................42 5.3.3 Kostenfunktionen...................................................................................................................48 5.3.4 Gesamtmodell ........................................................................................................................60 5.3.5 Statistik der Variablen ...........................................................................................................63 5.3.6 Alternativen und Erweiterungen des Modells ........................................................................65 5.4 Strategien bei der Lösung mit Hilfe eines LP-Solvers ...............................................................65 5.4.1 Auswahl einer Variable..........................................................................................................66 5.4.2 Auswahl eines Problems (Knotenwahl) .................................................................................68 5.4.3 Vergleich der Strategien ........................................................................................................69 5.5 Generierung von Wochenendverteilungen zur Laufzeitverbesserung.....................................70 5.6 Ergebnisse .....................................................................................................................................73 6 6.1 LÖSUNG MITTELS SIMULATED ANNEALING.........................................76 Das Konzept des Simulated Annealing .......................................................................................76 6.2 Bestimmung einer Startlösung ....................................................................................................78 6.2.1 Benutzerdefinierte Startlösung...............................................................................................78 6.2.2 Zufällige Belegungen.............................................................................................................78 6.2.3 Dienst-Frei-Blöcke.................................................................................................................78 6.2.4 Vergleich der Startlösungen...................................................................................................81 Inhaltsverzeichnis VI 6.3 Definition einer Nachbarschaft ...................................................................................................82 6.3.1 Ändern von Belegungen.........................................................................................................82 6.3.2 Tauschen von Belegungen .....................................................................................................82 6.3.3 Ersetzen von Blöcken ............................................................................................................82 6.4 Implementierung der Kostenfunktionen und Nachbarschaften ...............................................84 6.4.1 Kostenfunktionen für die Entscheidungsschranken................................................................84 6.4.2 Aktualisierung der Kosten .....................................................................................................85 6.5 Einstellung der Parameter ...........................................................................................................86 6.5.1 Allgemeine Verfahrensparameter ..........................................................................................86 6.5.2 Gewichtungsparameter für die Entscheidungsschranken .......................................................87 6.6 Vergleich der Nachbarschaften ...................................................................................................88 6.6.1 Ändern von Belegungen.........................................................................................................88 6.6.2 Tauschen von Belegungen .....................................................................................................88 6.6.3 Ersetzen von Blöcken ............................................................................................................89 7 VERGLEICH DER VERFAHREN................................................................91 7.1 Allgemeiner Vergleich der Verfahren.........................................................................................91 7.2 Vergleich anhand konkreter Beispiele ........................................................................................91 8 8.1 DIENST-FAHRERGRUPPEN-ZUORDNUNG .............................................94 Problembeschreibung...................................................................................................................94 8.2 Modellierung des Problems .........................................................................................................96 8.2.1 Entscheidungsvariablen .........................................................................................................96 8.2.2 Entscheidungsschranken ........................................................................................................96 8.2.3 Zielkriterium: Minimierung der Größen der Fahrergruppen ..................................................99 8.3 Existenz einer zulässigen Lösung ................................................................................................99 8.4 Lösungsansätze ...........................................................................................................................100 8.5 Optimierung der Dienstzuordnungen .......................................................................................102 8.6 Schnittstelle zur Turnusplanung für eine Fahrergruppe ........................................................103 8.7 Bewertung ...................................................................................................................................104 9 ZUSAMMENFASSUNG ............................................................................106 LITERATURVERZEICHNIS ............................................................................107 ANHANG .........................................................................................................110 Symbolverzeichnis VII Symbolverzeichnis Mathematische Notation Um die Lesbarkeit der Arbeit zu erhöhen, sollen hier einige Vorbemerkungen zu einer einheitlichen Schreibweise getroffen werden. Die Namen der Indexmengen bestehen in der Regel aus einem Großbuchstaben, weil diese Schreibweise üblich ist und auch hier verwendet werden soll. Die Namen von Parametern und Konstanten treten im Laufe der Arbeit sehr oft auf und haben daher recht ausführliche, sprechende Bezeichner. Sie beginnen immer mit einem Großbuchstaben. Die Namen von Variablen bestehen im Gegensatz dazu nur aus Kleinbuchstaben. Da sie häufig in umfangreichen Formeln auftreten, sind die Namen möglichst kurz gehalten. Zeichen x | x |+ x x x |M| Bedeutung Der Betrag von x ist gleich x, wenn x größer oder gleich 0 ist und –x, falls x kleiner 0 ist. Diese Funktion ist gleich x, falls x positiv ist und 0 sonst. Bezeichnet die kleinste ganze Zahl, die größer gleich x ist. Bezeichnet die größte ganze Zahl, die kleiner gleich x ist. Diese Art von Klammern bedeutet das Runden von x, d.h. x bezeichnet die ganze Zahl, die x am nächsten liegt. Die Kardinalität, also die Anzahl der Elemente in der Menge M. Mengen Menge Beschreibung IN = {0,1,...} IR D = {d: d=0, 1, ...} Dt Menge der natürlichen Zahlen Menge der reellen Zahlen Menge der Dienste der Dienstmasse. Menge der Dienste am Wochentag t∈ T. Menge der Dienste mit Schichtart für i∈ I. Di I = {i: i=1,...} Ischwer ⊆ I Indexmenge der für den Turnus zulässigen Schichtarten Menge der schweren Schichtarten Menge der Schichtarten, die die Nachtruhe verletzen, I(i) ⊆ I für i∈ I wenn sie im Turnus auf die Schichtart i folgen J = {j: j=0,..., 7*Wochen-1} Indexmenge über alle Matrixeinträge des Turnus, wobei der Turnus zeilenweise durchlaufen wird P = {p: p=0, 1, ...} Menge der Fahrergruppen bzw. Fahrerprofile. T = {t: t=0,...,6} Index über die Wochentage (Montag bis Sonntag) Ta ⊆ T Menge der Tagesarten für a∈ A = {1, 2, ...} W = {w: w=0,..., Wochen-1} Indexmenge über die Zeilen eines Turnus Symbolverzeichnis VIII Parameter und Abkürzungen Abkürzung Beschreibung AntWoE AnzFrei AZi BL Mindestanteil freier Wochenenden Anzahl freier Tage im Turnus (Soll-Wert) Anfangszeit der Schichtart i∈ I Länge des Blockes, in dem ein freies Wochenende liegen soll 1 BL = AntWoE DF EinhAbs EZi FreiBedarft Gewk GS Degressionsfaktor für die Freiblockbildung Anteil von Idi, der für jedes i∈ Ischwer fest eingehalten werden soll Endzeit der Schichtart i∈ I Mindestbedarf freier Tage pro Tag t∈ T Gewichte der Kostenarten Idi ⋅(1− EinhAbs ) GS= ∑k (Gauss-Summe) k =1 GZVi Idi Jahresfreip MinDBL MinFAntpa MinFp MaxDBL MaxFBL MaxFp MaxRR Aufgrund der Wunschanteile für die Schichtarten berechnete ideale ganzzahlige Verteilung der Schichtarten über den Turnus Idealabstand zwischen zwei Blöcken der gleichen schweren Schichtart i∈ Ischwer Anzahl freier Tage pro Jahr für Fahrergruppe p∈ P Minimale Dienstblocklänge Minimaler Frei-Anteil an der Tagesart a∈ A für die Fahrergruppe p∈ P Minimale Anzahl Fahrer der Gruppe p∈ P Maximale Dienstblocklänge Maximale Freiblocklänge Maximale Anzahl Fahrer der Gruppe p∈ P Maximale an einem Freiblock anfallende Kosten für die Rückwärtsrollierung: MaxRR = max{EZ i }− min{EZ i }+ max {AZ i }− min{AZ i } i∈I MaxSAAntpia SAAnti SABedarfi,t SABLi SPi SR TK Wochen WRZ i∈I i∈I i∈ I Maximaler Anteil der Schichtart i∈ I an der Tagesart a∈ A für die Fahrergruppe p∈ P Wunschanteil der Schichtart i Mindestbedarf pro Schichtart und Tag Schichtartblocklänge der Schichtart i∈ I (gleich 0, falls die Schichtart nicht schwer ist) Schwerpunkt der Schichtart i∈ I (SPi = 0,5⋅(AZi+EZi)) Standardrollierung Turnuskapazität (7⋅Wochen – AnzFrei) Anzahl der Fahrer, Zeilen bzw. Wochen eines Turnus Geforderte Länge einer zusammenhängenden Wochenruhezeit pro 2-Wochen-Block in Stunden 1 Einordnung und Definitionen 1 1 Einordnung und Definitionen 1.1 Übersicht Im diesem Kapitel soll zunächst das Problemumfeld, in das die Turnusplanung gehört, vorgestellt werden. Dabei werden die wichtigsten Begriffe eingeführt. In Kapitel 2 werden schließlich die genauen Anforderungen und Ziele definiert, denen eine Lösung genügen soll. Dabei wird zwischen den Problemen der Turnusplanung für eine Fahrergruppe und der Dienst-Fahrergruppen-Zuordnung unterschieden. Kapitel 3 legt zunächst die relevanten Kriterien für eine Fahrergruppe fest. Darauf wird die Komplexität untersucht, bevor in den Kapiteln 5 und 6 zwei Lösungsansätze vorgestellt werden. Diese Trennung von Problembeschreibung und Lösung ist wichtig, um die Ergebnisse im Nachhinein anhand der zuvor abgesteckten Ziele beurteilen und die Eignung der beiden Verfahren für die Lösung bewerten zu können. Hiermit beschäftigt sich Kapitel 7. Das in Kapitel 8 behandelte Problem der Dienst-Fahrergruppen-Zuordnung ermöglicht schließlich die Abstimmung der Daten für die einzelnen Fahrergruppen. In Kapitel 9 erfolgt abschließend eine kurze Zusammenfassung der Ergebnisse dieser Arbeit. 1.2 Einleitung In einem Betrieb des öffentlichen Personennahverkehrs (ÖPNV) sind an allen Tagen der Woche, insbesondere also auch am Wochenende, Dienste zu leisten. Die Dienste finden zu verschiedenen Zeiten statt. Man sagt, ein Dienst habe eine bestimmte Schichtart, die von seiner Anfangs- und Endzeit abhängt. Was ist nun ein Turnus? Im folgenden soll darunter ein Schema verstanden werden, das festlegt, wann welcher Mitarbeiter des Verkehrsbetriebes nach welcher Schichtart arbeitet. Üblicherweise arbeiten mehrere Mitarbeiter wechselweise nach dem gleichen Schema, damit freie Wochenenden und unbeliebte Schichtarten, wie Nachtdienste, gleichmäßig an verschiedene Mitarbeiter verteilt werden können. Für dieses wechselnde oder rotierende Schema hat sich der Begriff „Turnus“ gebildet. In einem Fremdwörterbuch ist Turnus etwas allgemeiner als „Umlauf“ oder „eine festgelegte Reihenfolge“ übersetzt. Gegenstand dieser Arbeit soll das Problem der Bestimmung eines oder mehrerer Turnusse für einen bestimmten Zeitraum (z.B. mehrere Fahrplanperioden des Verkehrsbetriebes) sein. Ausgangspunkt für das Thema ist die Personaleinsatzplanung bei der Bremer Straßenbahn AG (BSAG). Die BSAG möchte ihre bestehende Turnusplanung optimieren und automatisieren. Im folgenden wird das Problem anhand der Kriterien, wie sie bei der BSAG relevant sind, geschildert. Die Kriterien sind jedoch so allgemein modelliert, daß sie auch auf andere Betriebe übertragbar sind, ggf. mit einigen Modifikationen. Ähnliche Situationen findet man in Krankenhäusern, bei Pflegediensten, Call-Centern oder Güter-Umschlagplätzen. 1 Einordnung und Definitionen 2 Allgemeine Ziele der Turnusoptimierung sind: • Effektiverer Einsatz der Mitarbeiter • Rationalisierung des Planungsprozesses • Bessere Übereinstimmung zwischen Qualifikation der Mitarbeiter und Anforderungen aufgrund der zu bearbeitenden Dienste • Steigerung der Mitarbeiterzufriedenheit durch § sozialverträgliche Turnusse § Berücksichtigung der Wünsche der Mitarbeiter bezüglich ihrer Dienste • Senkung der Krankheitsraten durch sinnvolle Schichtartfolgen • Anregungen für die Qualifikation von neuen Mitarbeitern • Anregungen für Weiterbildungsmaßnahmen 1.3 Begriff und Aufgaben der Personalplanung Eine gute Einführung in die Personalplanung findet sich bei Kossbiel [26]. Demnach umfaßt die Personalplanung die drei Teilbereiche Personalbedarfsplanung, Personalausstattungsplanung und Personaleinsatzplanung und „...hat die Aufgabe, diese drei Teilbereiche unter Beachtung der für den Personalbereich geltenden Restriktionen und der zwischen dem Personalbereich und den übrigen betrieblichen Planungsbereichen bestehenden Interdependenzen so aufeinander abzustimmen, daß die für den Gesamtbetrieb formulierten Ziele so vollkommen wie möglich erreicht werden.“ (Kossbiel [26], Sp.1616) Der Teilbereich der Personaleinsatzplanung hat dabei die Aufgabe, Personalbedarf und Personalausstattung in Verbindung zu bringen, also eine Zuordnung von Arbeitskräften und Tätigkeiten zu finden. Mag ([28], S.99) versteht unter Personaleinsatzplanung „die gedankliche Vorwegnahme von Zuordnungen des vorhandenen Personals mit bestimmter quantitativer und qualitativer Kapazität auf bestimmte Tätigkeitsbereiche mit der Maßgabe, daß die Zuordnungen möglichst optimal, d.h. zielentsprechend, sind.“ Dabei unterscheidet er die Phasen „Analyse der Zuordnungsvoraussetzungen“ und „Zuordnungsoptimierung“. Die Analyse der Zuordnungsvoraussetzungen beinhaltet die Erstellung eines Anforderungsprofils für jede Tätigkeit und eines Fähigkeitsprofils für jeden Mitarbeiter oder für Gruppen von Mitarbeitern. Ausgehend davon soll die Zuordnungsoptimierung eine Lösung finden, die beides so gut wie möglich berücksichtigt. Bei der Zuordnungsoptimierung tritt in der Regel der Fall auf, daß eine Tätigkeit von mehreren Mitarbeitern ausgeführt werden kann, was als Bereitstellungsmehrdeutigkeit bezeichnet wird. Ebenso kann eine Arbeitskraft meistens mehrere verschiedene Tätigkeiten durchführen (Verwendungsmehrdeutigkeit). Außerdem ist bei der Zuordnung zwischen Teil- und Vollzeitarbeitskräften zu unterscheiden (vgl. Kossbiel [26], Sp.1621). 1.4 Begriffe der Personaleinsatzplanung im Fahrdienst des ÖPNV Um die zu behandelnden Probleme präzise beschreiben zu können, werden zunächst einige Begriffe eingeführt, die im Laufe der Arbeit immer wieder Verwendung finden. Auch wenn einige Begriffe auf den ersten Blick überflüssig wirken oder anderen sehr ähnlich sind, haben sie sich doch im Laufe der Zeit in Diskussionen mit dem Verkehrsbetrieb bewährt, weil so klar abgegrenzt ist, was sich hinter dem entsprechenden Ausdruck verbirgt. Außerdem erleichtern diese Definitionen die exakte Formulierung der Anforderungen an die zu generierenden Turnusse. 1 Einordnung und Definitionen 3 1.4.1 Fahrplanperiode Eine Fahrplanperiode ist der Zeitraum, für den ein Fahrplan des Verkehrsbetriebes gültig ist. Dies ist gleichzeitig der für die Turnusplanung relevante Planungszeitraum, denn für diesen Zeitraum bleibt der Turnus mindestens gültig. In der Praxis werden die gleichen Turnusse meist über mehrere Jahre verwendet. 1.4.2 Dienst Ein Dienst besteht aus einer oder mehreren an einem bestimmten Tag zu verrichtenden Tätigkeiten. Eine Tätigkeit kann dabei zum Beispiel das Fahren einer Straßenbahn sein. Ein Dienst hat eine Anfangs- und eine Endzeit. Die Arbeitszeit eines Dienstes berechnet sich aus der Endzeit abzüglich der Anfangszeit und der Pausen. Ein Dienst, insbesondere ein Nachtdienst, kann über das Ende eines Tages hinaus andauern. Er wird dann dem Tag zugeordnet, an dem er beginnt. Jeder Mitarbeiter führt pro Tag maximal einen Dienst aus. Ein Dienst hat nun verschiedene Eigenschaften: • Bereich: Abhängig davon, ob die Tätigkeiten des Dienstes in einer Straßenbahn oder einem Kraftomnibus ausgeführt werden, hat der Bereich entweder die Ausprägung „STRAB“ oder „KOM“. • Vertragsart: Die Vertragsart ist entweder „Teilzeit“ oder „Vollzeit“, abhängig von der Arbeitszeit des Dienstes. • Schichtart: Abhängig von der Anfangs- und Endzeit eines Dienstes wird jedem Dienst genau eine Schichtart zugeordnet. Bei der BSAG gibt es die Schichtarten früher Frühdienst (FDF), später Frühdienst (FDS), Tagesdienst (TD), Mitteldienst (MD), Spätdienst (SD), Nachtdienst (ND) und geteilter Dienst (GD). Dabei werden die Schichtarten FDF, SD, ND als „schwer“ eingestuft. • Linien: Als weitere Eigenschaften eines Dienstes gelten die Verkehrslinien, die im Rahmen der Tätigkeit des Dienstes gefahren werden. Es kann sich um mehrere verschiedene Linien handeln. • Dienstarten: Die Tätigkeiten eines Dienstes können von verschiedener Art sein, z.B. Umlaufdienst, Reservedienst, Fahrgastdienst, usw. Dabei ist die Bezeichnung „Dienstarten“ zwar gebräuchlich, aber leider irreführend, weil hier nicht die Eigenschaften eines Dienstes, sondern einer Tätigkeit gemeint sind. Genauer wäre „Tätigkeitsarten“. Aus objektorientierter Sicht hat ein Objekt „Dienst“ also die folgenden für die Turnusplanung relevanten Eigenschaften: Wochentag Anfangszeit Dienstarten Linien Endzeit Dienst Schichtart Arbeitszeit Bereich Vertragsart Abbildung 1: Eigenschaften eines Dienstes 1 Einordnung und Definitionen 4 Es ist noch zu beachten, daß die Eigenschaften „Dienstarten“ und „Linien“ gleichzeitig mehrere Ausprägungen haben können. Alle anderen Eigenschaften haben genau eine Ausprägung, was sich meist unmittelbar aus dem logischen Zusammenhang ergibt, denn ein Dienst kann nur eine Endzeit haben. Lediglich bei „Bereich“ wären noch mehrere Werte sinnvoll, wenn ein Dienst zum Beispiel Tätigkeiten sowohl im Straßenbahn- als auch im Omnibusbereich enthält. Dies ist jedoch bei der BSAG nicht möglich. 1.4.3 Dienstmasse In der Praxis (bei der BSAG, aber auch bei anderen Verkehrsbetrieben) fallen an den Tagen Montag bis Freitag im wesentlichen täglich die gleichen Dienste an. An Samstagen und Sonntagen sind die Dienste in der Regel aufgrund größerer Taktzeiten anders zusammengesetzt, und ihre Anzahl ist geringer. Innerhalb einer Fahrplanperiode fallen in jeder Woche die gleichen Dienste an, da der Fahrplan unverändert bleibt. Darum genügt es, alle Dienste nur für eine Woche zu erfassen. Die Menge aller Dienste, die im Laufe einer Woche ausgeführt werden müssen, wird als Dienstmasse bezeichnet. Wenn ein Dienst an mehreren Wochentagen existiert, befindet er sich also entsprechend auch mehrmals in der Dienstmasse. Dabei werden Feiertage, die auf Werktage fallen, und geänderte Dienste bei besonderen Veranstaltungen nicht berücksichtigt. Dies erfolgt erst in der kurzfristigen Planung (vgl. Abschnitt 1.5.3). 1.4.4 Fahrergruppe, Fahrerprofil Obwohl die Dienste nicht nur aus Fahrdiensten, sondern auch aus anderen Dienstarten bestehen (vgl. 1.4.2), werden die Mitarbeiter im folgenden auch als Fahrer bezeichnet. Die Mitarbeiter werden so in Gruppen aufgeteilt, daß sie innerhalb jeder Gruppe etwa einheitliche Qualifikationen und Wünsche bezüglich der zu bearbeitenden Dienste haben. Der Schnitt der Qualifikationen, also die größte gemeinsame Teilmenge der Qualifikationen der einzelnen Fahrer der Gruppe, wird zusammen mit den gemeinsamen Wünschen als Fahrerprofil bezeichnet. Das Fahrerprofil hat ähnliche Eigenschaften wie ein Dienst, nämlich Bereiche, Vertragsarten, Schichtarten, Linien und Dienstarten. Im Gegensatz zu den Diensten kann ein Fahrerprofil jedoch mehrere Ausprägungen für Bereiche, Vertragsarten und Schichtarten annehmen, denn während ein Dienst, zum Beispiel aufgrund seiner festen Anfangs- und Endzeit, nur eine eindeutige Schichtart hat, kann eine Fahrergruppe mehrere verschiedene Schichtarten bearbeiten. Zusätzlich zu diesen Qualifikationsdaten kann aus den Wünschen der Fahrer eine Verteilung für die verschiedenen Ausprägungen einer Eigenschaft des Profils gebildet werden. So können die Fahrer zum Beispiel für die Schichtarten eine Wunschverteilung angeben, die angibt, mit welcher relativen Häufigkeit sie eine bestimmte Schichtart zugewiesen bekommen möchten. Die Wunschverteilung wird in Abschnitt 3.2.2.5 wieder aufgegriffen. Während Wunschverteilungen nur soweit wie möglich berücksichtigt werden sollen, handelt es sich bei den Qualifikationen um harte Bedingungen. Von einer Fahrergruppe können nur die Dienste bearbeitet werden, deren Eigenschaften auch in den Qualifikationsdaten des Fahrerprofils enthalten sind. Ist auch nur eine Eigenschaft eines Dien- 1 Einordnung und Definitionen 5 stes nicht im Fahrerprofil enthalten, so kann der Dienst keinem Mitarbeiter der Gruppe planmäßig zugeordnet werden. Dieses Vorgehen entspricht der gängigen Praxis in ÖPNV-Betrieben. Es ist auch bei Kleinschmidt et al. ([23], S.589) unter dem Begriff „Gruppenäquivalenz“ beschrieben. Dadurch ist es möglich, eine Reihe von Besonderheiten des ÖPNV zu berücksichtigen. Zum Beispiel ist es üblich, daß weibliche Mitarbeiterinnen nicht für Nachtdienste eingeteilt werden oder geteilte Dienste, also Dienste, die eine längere unbezahlte Pause enthalten, nur von Mitarbeitern bedient werden, die vor Ort wohnen und die Pausen zu Hause verbringen können. Die Einhaltung dieser Regeln ist sehr einfach zu realisieren, wenn sie bei der Bildung der Gruppen berücksichtigt wird und Nachtdienste von den Fahrergruppen mit nur männlichen Mitarbeitern bearbeitet werden. In den anderen Profilen ist die Eigenschaft „Nachtdienst“ dann nicht enthalten. Ebenso werden die Teilzeitmitarbeiter und die Mitarbeiter mit einer Einweisung für bestimmte Linien zu einer oder mehreren Gruppen zusammengefaßt. 1.4.5 Dienst-Frei-Schema Ein Dienst-Frei-Schema legt für jeden Fahrer einer Fahrergruppe fest, welche Tage frei sind und welche nicht. An den nicht freien Tagen muß der Fahrer anwesend sein und gegebenenfalls einen Dienst leisten. Die freien Tage werden im folgenden auch kurz als „Freis“ bezeichnet. 1.4.6 Turnus Ein Turnus sei eine (sinnvolle) Abfolge von freien Tagen und Schichtarten für eine Fahrergruppe. Er beinhaltet also die Information eines Dienst-Frei-Schemas und gibt zusätzlich für die nicht freien Tagen an, welche Schichtart der zu bearbeitende Dienst hat, also insbesondere, in welchem ungefähren Zeitraum der Fahrer arbeiten muß. Ein Turnus läßt sich am übersichtlichsten in Form einer Matrix darstellen. Wenn n Fahrer in einer Fahrergruppe arbeiten, enthält die zugehörige Matrix n Zeilen, wobei jeder Fahrer einer Zeile zugeordnet ist. Jede Zeile enthält sieben Einträge für die Tage von Montag bis Sonntag. Entsprechend den Einträgen in dieser Zeile arbeitet der Fahrer in der ersten Woche der Fahrplanperiode. In der zweiten Woche arbeitet jeder Fahrer entsprechend der nächsten Zeile, in der dritten Woche entsprechend der übernächsten Zeile usw.. Liegt zum Beispiel in der 5. Spalte (Freitag) der dritten Zeile ein Frei, so hat der Fahrer mit der Nummer 3 (weil er der dritten Zeile zugeordnet ist) in der ersten Woche der Fahrplanperiode am Freitag frei. Entsprechend hat der Fahrer, der der zweiten Zeile zugeordnet ist, in der zweiten Woche freitags frei, weil er in jeder Woche eine Zeile nach unten rückt. Dies wird an folgendem Beispiel deutlich. 1 Einordnung und Definitionen 6 Abbildung 2: Ein Turnus Ein Turnus liest sich also genau wie ein Buch, nämlich in den Zeilen von links nach rechts. Am Ende einer Zeile wird am Anfang der nächsten Zeile fortgesetzt und aufgrund der zyklischen Gestalt folgt hinter dem Ende der letzten Zeile wieder die erste Zeile der Matrix. Damit kann ein solcher Turnus für eine Fahrplanperiode beliebiger Länge eingesetzt werden. Läuft ein Fahrplan über mehr Wochen als der Turnus Zeilen (und damit Fahrer) hat, durchläuft jeder Fahrer den Turnus (oder zumindest Teile des Turnus) mehrmals. Unterschreitet die Länge der Fahrplanperiode die Anzahl der Zeilen des Turnus, durchläuft jeder Fahrer nur einen Teil des Turnus. 1.4.7 Dienstplan Ein Dienstplan regelt die Zuordnung der Dienste zu den Fahrern. Er ist einem Turnus sehr ähnlich, denn er läßt sich auch als Matrix darstellen und hat die gleiche zyklische Gestalt. Die einzelnen Matrixeinträge enthalten jedoch zusätzlich zu den Schichtarten konkrete Dienste. An dieser Stelle wird auch deutlich, warum Turnus und Dienstplan als zyklische Matrix dargestellt werden. So ist nämlich gewährleistet, daß jeder Dienst, der an einer beliebigen Stelle in der Matrix plaziert ist, auch in jeder Woche bearbeitet wird, nämlich von dem Mitarbeiter, der gerade für die entsprechende Zeile des Dienstplanes zuständig ist. Außerdem erkennt man hier den Grund, warum nur Mitarbeiter mit einheitlicher Mindestqualifikation zu einer Gruppe zusammengefaßt werden: Ein Dienst, der in einem Dienstplan plaziert ist, wird (bei entsprechender Länge der Fahrplanperiode) von allen Mitarbeitern bearbeitet und daher müssen alle Fahrer die notwendige Qualifikation aufweisen. In vielen Situationen können die Begriffe Turnus und Dienstplan synonym gebraucht werden. Der wesentliche Unterschied liegt in der Gültigkeitsdauer. Ein Turnus regelt langfristig, welcher Fahrer an welchem Tag nach welcher Schichtart arbeitet. Da ein Turnus in der Regel über mehrere Fahrplanperioden, meist sogar über mehrere Jahre hinweg gültig ist, ermöglicht er den Fahrern eine langfristige Planung ihres Privatlebens. Die Möglichkeit, kurzfristig freie Tage oder Dienste zu tauschen, bleibt hiervon natürlich unberührt. Ein Dienstplan dagegen regelt die Zuordnung konkreter Dienste zu 1 Einordnung und Definitionen 7 den Fahrern. Da die Dienste nur für eine Fahrplanperiode bekannt sind, hat er kurzfristigeren Charakter. Da ein Turnus in der Praxis oft nur eine begrenzte Anzahl von Wochen enthält (6 bis 12), eine Fahrergruppe jedoch weit mehr Mitarbeiter umfassen kann, ist es üblich, in einem Dienstplan Turnusse zu wiederholen, d.h. daß das Dienst-Frei-Schema und die SchichtartBelegung eines Dienstplanes aus mehreren hintereinander gehängten Turnussen besteht, die in der Regel identisch sind. Diese Idee findet sich auch bei Belletti ([3], S.321) und ist in dem nebenstehenden Schaubild verdeutlicht. Abbildung 3: Hintereinanderhängen von Turnussen 1.4.8 Matrixeintrag, Belegung Ein Matrixeintrag sei eine Position eines Turnus. Ein solcher Matrixeintrag kann verschiedene Belegungen haben. Er kann entweder mit „Frei“ oder mit einer Schichtart belegt sein. Betrachtet man statt eines Turnus einen Dienstplan, so sind die möglichen Belegungen „Frei“ oder „Dienst“. 1.4.9 Turnuskapazität Die Anzahl der nicht freien Matrixeinträge werde als Kapazität des Turnus oder als Turnuskapazität bezeichnet. 1.4.10 Folgen von Matrixeinträgen, Belegungsfolge Unter einer Folge von Matrixeinträgen werden mehrere unmittelbar aufeinanderfolgende Matrixeinträge im Turnus verstanden. Aufgrund der zyklischen Gestalt eines Turnus gehören hierzu auch Folgen, die über das Ende einer Woche oder sogar über das Ende der Matrix hinausgehen und in der nächsten Zeile ihre Fortsetzung finden. Ist die Folge von Matrixeinträgen mit Freis oder Schichtarten belegt, wird auch von einer Belegungsfolge gesprochen. 1.4.11 Doppelfrei, Dreifachfrei Ein Doppelfrei sei eine Folge von zwei Matrixeinträgen, die beide frei sind. Diese Definition läßt keine Rückschlüsse über die Matrixeinträge vor oder hinter dem Doppelfrei zu. Sie können frei sein oder auch nicht. Entsprechend ist ein Dreifachfrei eine Folge von drei direkt aufeinanderfolgenden Matrixeinträgen, die alle drei frei sind. 1.4.12 Turnusgruppe, Dienstplangruppe Unter einer Turnusgruppe / Dienstplangruppe wird die Menge aller Turnusse / Dienstpläne für einen Betriebshof verstanden, also genau ein Turnus / Dienstplan für jede Fahrergruppe. Die Turnusse einer Turnusgruppe müssen zusammen die gesamte 1 Einordnung und Definitionen 8 Dienstmasse des Betriebshofes aufnehmen können, sowohl bezüglich der Anzahl der Dienste als auch bezüglich ausreichender Kapazität für bestimmte Profile. 1.5 Der Prozeß der Personalplanung im Fahrdienst des ÖPNV Die in Kapitel 1.3 allgemein beschriebene Personalplanung soll nun speziell für einen Betrieb des ÖPNV beschrieben werden. Wie oben erfolgt dabei eine Unterteilung in Bedarfsplanung, Ausstattungsplanung und Einsatzplanung. 1.5.1 Personalbedarfsplanung Ausgangspunkt für die Personalbedarfsplanung im Fahrdienst des ÖPNV ist die sich aus dem Fahrplan ergebende Menge von Tätigkeiten. Diese bestehen im wesentlichen aus dem Bedienen der Verkehrslinien. Die Tätigkeiten werden nun im Rahmen der so genannten Dienstplanung zu Diensten zusammengefaßt, also zu Bündeln von Tätigkeiten, die von einem Mitarbeiter innerhalb eines Arbeitstages abgearbeitet werden können (vgl. 1.4.2). Durch die Menge aller Dienste sowie deren Eigenschaften (zzgl. Quoten für Urlaub und Krankheit) ist damit der Personalbedarf festgelegt. Für eine genauere Beschreibung der Dienstplanung siehe Borndörfer et al. [5]. 1.5.2 Personalausstattungsplanung Nachdem der Personalbedarf ermittelt ist, stellt sich nun die Frage, wie viele Mitarbeiter mit welcher Qualifikation benötigt werden, um die Dienstmasse abzudecken. Wie oben beschrieben, wird das Personal in Gruppen mit einheitlicher Mindestqualifikation eingeteilt. Dazu muß für jede Fahrergruppe ein entsprechendes Profil definiert und die Größe der Gruppen festgelegt werden. In einem bestehenden Betrieb können hier natürlich nicht beliebig Profile definiert werden, sondern die Profile sind weitgehend durch die bestehenden Fahrergruppen vorgegeben. Es besteht jedoch die Möglichkeit, einzelne Fahrergruppen zu modifizieren, d.h. ihr Profil oder ihre Größe zu ändern. Im letzteren Fall können Fahrer von einer Gruppe in eine andere wechseln, weil das Profil besser zu ihnen paßt oder weil sich Verschiebungen des Bedarfs ergeben haben. Außerdem kann die Neueinführung von Fahrergruppen oder die Neueinstellung, Pensionierung oder Entlassung von Mitarbeitern eine Überarbeitung der bestehenden Gruppen erforderlich machen. 1.5.3 Personaleinsatzplanung Die Analyse der Zuordnungsvoraussetzungen ist bereits weitgehend durch die Bildung von Profilen und Fahrergruppen im Rahmen der Personalausstattungsplanung abgeschlossen. Die Zuordnungsoptimierung besteht dann schließlich aus zwei Schritten, der Turnusoptimierung für jede Fahrergruppe und der Dienstreihenfolgeplanung. Im Rahmen der Turnusplanung wird für jede Fahrergruppe ein Turnus, also eine Matrix erzeugt, die aus einem Dienst-Frei-Schema und Schichtart-Vorgaben an den nicht freien Tagen besteht. Die Dienstreihenfolgeplanung verteilt schließlich die Dienstmasse auf die Turnusgruppe, also auf die in der Turnusplanung erzeugten Turnusse. Dabei dienen die Schichtart-Vorgaben als Orientierung bei der Anordnung der Dienste, können aber im Einzelfall auch mißachtet werden. Die Teilung der Personaleinsatzplanung in Turnus- und Dienstreihenfolgeplanung findet sich auch bei Kleinschmidt et al. ([23], S.579), wo jedoch die Begriffe „Schichtpla- 1 Einordnung und Definitionen 9 nung“ und „Feinsteuerung“ verwendet werden. Als wesentlicher Grund für diese Trennung ist vor allem die unterschiedliche zeitliche Verfügbarkeit der Daten zu nennen. Die konkreten Dienste lassen sich nur für eine Fahrplanperiode berechnen, und entsprechend ist eine langfristigere Zuteilung nicht sinnvoll. Die Verteilung des Personalbedarfs auf die verschiedenen Wochentage und Tageszeiten, insbesondere also der Bedarf an Schichtarten, läßt sich jedoch auch langfristig prognostizieren, indem man das geplante Angebot und die Erfahrungen der Vergangenheit zu Grunde legt. Kleinschmidt et al. ([23], S.587) formulieren dies so: „Aufgrund der Unschärfe des prognostizierten Bedarfs an bestimmten Mitarbeiterfähigkeiten und in Unkenntnis von zukünftigen Ausfällen von Mitarbeitern erscheint es praxisnäher, lediglich die Mitarbeiter in die vorgesehenen Schichten einzuteilen, ohne bereits eine Arbeitsplatzzuweisung vorzunehmen. Gleichzeitig wird dadurch die Komplexität des Problems verringert.“ 2 Festlegung der Anforderungen und Ziele 10 2 Festlegung der Anforderungen und Ziele In diesem Abschnitt soll das Ziel der Diplomarbeit abgesteckt werden. Es sollen zwei Probleme der Personalplanung betrachtet werden. In beiden Fällen wird die Dienstplanung als abgeschlossen vorausgesetzt, d.h. die Dienstmasse und damit der Personalbedarf ist als Input gegeben. • Erstens soll ein Verfahren entwickelt werden, mit dem sich für eine einzelne Fahrergruppe, deren Größe bereits festgelegt ist, ein neuer Turnus berechnen läßt. Dieser soll bezüglich im weiteren noch zu definierender Kriterien möglichst optimal sein. Da in diesem Fall mit der Größe der Fahrergruppe auch die Personalausstattung für dieses Teilproblem festliegt, handelt es sich um eine reine Personaleinsatzplanung. Der Personalbedarf ist in diesem Fall als ein Teil der Dienstmasse gegeben, der von der entsprechenden Fahrergruppe abgedeckt werden soll. Dabei werden nicht die konkreten Dienste betrachtet, sondern nur die zu verteilenden Schichtarten und die freien Tage, die definitionsgemäß nicht in der Dienstmasse enthalten sind. Dieses Problem soll im folgenden als „Turnusplanung für eine Fahrergruppe“ bezeichnet werden und wird in den Kapiteln 3 bis 7 behandelt. • Zweitens soll ein Verfahren entwickelt werden, das es ermöglicht, für alle Fahrergruppen oder für einen Teil davon neue Turnusse zu entwickeln. Dabei sollen einerseits die Dienstmasse und andererseits die Profile für die einzelnen Gruppen vorgegeben sein. Die Größe der Gruppen soll jedoch innerhalb gewisser Grenzen variabel sein. Hier ist also neben dem Personaleinsatz auch die Personalausstattung ganz oder teilweise variabel. In dem folgenden Schaubild ist diese Situation graphisch dargestellt. Gruppe 1 Gruppe 3 Dienstmasse Gruppe 2 Gruppe x Abbildung 4: Dienst-Fahrergruppen-Zuordnung Die Anzahl der Zeilen der Matrizen, durch die die Anzahl der Fahrer der entsprechenden Gruppe festgelegt wird, steht dabei noch nicht fest. Ziel soll es nun also sein, Turnusse zu bilden, die die gesamte Dienstmasse aufnehmen können. Dabei ist zum einen die Größe der einzelnen Gruppen genau festzulegen, und es ist jeweils ein Turnus zu generieren. Dieses Problem hat also in gewisser Weise das erste Problem als Teilproblem, denn falls es möglich sein sollte, die Größen der einzelnen Fahrergruppen festzulegen und die Dienstmasse sinnvoll auf die Gruppen aufzuteilen, so kann das Verfahren für das erste Problem einfach für jede Gruppe separat angewendet und ein Turnus erzeugt werden. Da sich dies als 2 Festlegung der Anforderungen und Ziele 11 vielversprechend herausgestellt hat, besteht das zweite Problem also im wesentlichen aus der Aufteilung der Dienstmasse auf die Fahrergruppen, womit sich deren notwendige Größe automatisch ergibt. Dieses Problem soll im weiteren als „DienstFahrergruppen-Zuordnung“ bezeichnet und in Kapitel 8 behandelt werden. Spengler ([37], S. 161) bezeichnet eine Personalplanung, bei der Personalbedarf gegeben, der Personaleinsatz variabel und die Personalausstattung gegeben oder variabel ist, als isolierte, sukzessive Personalplanung. Ein möglicher Titel für diese Arbeit wäre also „Isolierte, sukzessive Personalplanung im ÖPNV“. Da dieser Begriff jedoch wenig eingängig ist, sollen die beiden oben beschriebenen Probleme einfach unter dem gängigen Begriff „Turnusplanung“ bzw. „Turnusoptimierung“ zusammengefaßt werden. 2.1 Allgemeine Anforderungen an eine Personalplanung Mag ([28], S.114ff) unterscheidet technische, zeitliche und personelle Randbedingungen beim Personaleinsatz. Technische Randbedingungen treten bei der Personalplanung im ÖPNV praktisch nicht auf, da davon auszugehen ist, daß die Fahrzeuge gleichwertig sind und jeder Mitarbeiter alle Fahrzeuge bedienen kann, sofern er die entsprechende Lizenz bzw. Fahrerlaubnis hat. Unter zeitlichen Randbedingungen versteht man vor allem die Beschränkungen bezüglich der Arbeitszeit, denen die einzelnen Arbeitnehmer unterliegen. Dabei unterscheidet man Jahresarbeitszeit, Wochenarbeitszeit und Tagesarbeitszeit. Neben der Dauer der Arbeitszeit ist hier, wo es speziell um Schichtarbeit geht, auch die Lage der Arbeitszeit relevant. Zeitliche Randbedingungen müssen sowohl bei der Turnusplanung für eine Fahrergruppe als auch bei der Dienst-Fahrergruppen-Zuordnung beachtet werden und sind daher in den Kapiteln 3.1 und 8 näher beschrieben. Personelle Randbedingungen ergeben sich, wenn nicht alle Arbeitnehmer für alle Tätigkeiten eingesetzt werden können. Mag erwähnt hier die besondere Position von jugendlichen, älteren, weiblichen, leistungsgeminderten und ausländischen Arbeitnehmern. Wie bereits in Abschnitt 1.4.4 beschrieben, werden die personellen Randbedingungen bei der Bildung der Fahrergruppen berücksichtigt und sind danach automatisch erfüllt, wenn bei der Zuweisung von Diensten auf die Gruppen die Zulässigkeit bezüglich des Profils beachtet wird. Personelle Randbedingungen sind also nur bei der „Dienst-Fahrergruppen-Zuordnung“ relevant (siehe Kapitel 8). 2.2 Anforderungen aufgrund konkreter Probleme im Verkehrsbetrieb Die BSAG betreibt in Bremen sechs Geschäftsstellen, die weitgehend unabhängig voneinander ihre Personaleinsatzplanung durchführen. Jede Geschäftsstelle hat dabei bis zu 1600 Dienste pro Woche auf zehn bis fünfzehn Fahrergruppen zu verteilen, wobei die Größen der Fahrergruppen zwischen einem und hundert Fahrern liegen. Die Gruppierung des bestehenden Personals ist seit Jahren unverändert. Es liegen kaum Informationen vor, inwieweit eine Umstrukturierung dieser Gruppierung sinnvoll oder sogar notwendig wäre. Die Turnusse werden „von Hand“ unter Verwendung eines starren Schemas (siehe Witt [43]) erzeugt, oder es werden die Turnusse der Vergangenheit übernommen. Die manuelle Erstellung von Turnussen bedeutet aufgrund der Vielzahl der zu berück- 2 Festlegung der Anforderungen und Ziele 12 sichtigenden Kriterien einen hohen Zeitaufwand, ganz abgesehen von der Schwierigkeit, überhaupt Turnusse von geeigneter Qualität zu erzeugen. Im folgenden sind Gründe aufgelistet, die die Einführung eines neuen Turnus für eine Fahrergruppe notwendig machen können. • Einführung einer neuen Fahrergruppe • Umgruppierung von Fahrern • Neueinstellung von Fahrern und Zuordnung zu einer bestehenden Gruppe • Veränderung der Dienstmasse aufgrund einer § Ausweitung des Verkehrsnetzes § Einführung neuer Linien § Veränderung der Taktzeiten im Fahrbetrieb Natürlich können auch mehrere Faktoren zusammenwirken, z.B. ist das Einführen neuer Linien in der Regel auch mit der Einstellung neuer Fahrer verbunden. Ziel dieser Arbeit ist es, Methoden zu entwickeln und zu implementieren, die eine automatische Generierung von Turnussen erlauben. Dabei soll der Mitarbeiter des Verkehrsbetriebes, im folgenden meist „Benutzer“ genannt, anhand von Parametern die Eigenschaften des zu erstellenden Turnus eingeben können, so daß eine vielseitige Verwendbarkeit gewährleistet ist. Als erster Schritt zur Verbesserung der Dienstpläne wurde vor einiger Zeit ein System zur Optimierung der Dienstreihenfolgeplanung entwickelt, das die konkreten Dienste auf die Matrixeinträge der Turnusse zuweist. Dabei werden nicht nur die Schichtart sondern auch die konkreten Anfangs- und Endzeiten der Dienste berücksichtigt, um ausreichende und gleichmäßige Nachtruhen, ausgeglichene durchschnittliche Arbeitszeiten, usw. für die einzelnen Mitarbeiter zu gewährleisten. Als Voraussetzung benötigt diese Dienstreihenfolgeplanung jedoch ein Dienst-FreiSchema und zumindest grobe Schichtart-Vorgaben für die einzelnen Matrixeinträge. Da diese Vorgaben jedoch nicht optimal den Erfordernissen angepaßt waren, ergaben sich folgende Probleme: • Bei den erzeugten Lösungen gab es eine große Zahl von Abweichungen von den Schichtart-Vorgaben der Turnusse, was Unzufriedenheit bei den Mitarbeitern auslöst, da die langfristige Planung ihres Privatlebens gestört wird. • Es traten nicht verteilte Dienste auf, d.h. Dienste, die aufgrund der Qualifikationsdaten keinem Turnus zugewiesen werden konnten. • Es gibt keine Anhaltspunkte für Qualifikation neu einzustellender Fahrer und deren Eingliederung in bestehende oder neue Fahrergruppen, um die Situation zu verbessern. Die Ursachen und damit auch die Lösungsmöglichkeiten für die genannten Probleme sind weitgehend unklar. Eine Ursache kann in einem schlechten Turnus für eine oder mehrere Fahrergruppen liegen, d.h. möglicherweise sind an einem bestimmten Wochentag zu viele Freis verteilt, oder die Verteilung der Schichtart-Belegungen über die Wochentage ist nicht optimal. Hier wäre es sinnvoll, einen neuen, besseren Turnus zu generieren. Es gilt dabei zunächst zu überprüfen, worauf bei der Erstellung eines neuen Turnus zu achten ist. Eine weitere Lösungsmöglichkeit könnte die Weiterbildung bestimmter Fahrergruppen sein, so daß die nicht verteilten Dienste zugewiesen werden können. Vielleicht genügt es aber auch schon, im Rahmen der bestehenden Qualifikationen Umgruppierungen 2 Festlegung der Anforderungen und Ziele 13 zwischen den Fahrergruppen vorzunehmen. Möglicherweise löst auch schon ein einziger zusätzlicher Fahrer für eine bestimmte Gruppe die bestehenden Probleme. Um auf diese Fragen Antworten zu finden, hat sich bei der BSAG der Wunsch nach einem Werkzeug entwickelt, mit dem Anregungen für Lösungen und für besser geeignete Turnusse gewonnen werden können. 2.3 Anforderungen an Laufzeit und Flexibilität Die Einführung neuer Turnusse in einem Verkehrsbetrieb ist nur langfristig möglich, da zunächst viele gesetzliche Bestimmungen zu prüfen und betriebliche Vereinbarungen zu treffen sind. Darum steht bei der Entwicklung eines Systems zur Automatisierung der Turnusplanung weniger die Laufzeit der Verfahren und die Generierung einer schnellen Lösung im Vordergrund, sondern mehr die Qualität der Lösungen. Rechenzeiten von einigen Stunden oder auch Tagen sind dabei unproblematisch. Dennoch spielt die Laufzeit eine wichtige Rolle, da sie mit der Größe des Turnus stark anwachsen kann, so daß für größere Probleminstanzen keine Lösung mehr möglich ist. Auch wenn die Optimierung in Interaktion mit dem Benutzer erfolgen soll, sind kurze Laufzeiten wichtig. Wenn im folgenden Rechenzeiten angegeben werden, beziehen sie sich stets auf einen Pentium-II-Rechner mit 400 MHz. Nachdem eine oder mehrere Turnusse erzeugt wurden, können diese dann zwischen den einzelnen Interessengruppen Unternehmensführung, Planungsabteilung und Betriebsrat diskutiert werden. Wenn bestimmte Kriterien nur unzureichend beachtet worden sind, kann ein neues Szenario erzeugt und daraus eine Lösung mit höherer Akzeptanz entwickelt werden. Neben der Qualität der Lösungen spielt also auch die Flexibilität des Modells eine entscheidende Rolle, damit es auch zukünftigen veränderten Anforderungen genügt und den Entscheidungsprozeß effektiv unterstützen kann. 2.4 Anforderungen an die Implementierung Die Umsetzung der Verfahren in ein Softwaretool soll sich auf die Schnittstellen beschränken, die zur Einbindung in ein bereits bestehendes System nötig sind. Dazu zählen: • Bereitstellung der Datenstrukturen und Klassen für einen Turnus, • Implementierung der Verfahren, d.h. konkret § Übersetzung der vom Benutzer eingegebenen Parameter in ein Modell, § Implementierung des Optimierungsverfahrens bzw. der Schnittstelle zu einer Standardsoftware, die die Optimierung übernimmt, § Geschwindigkeitsoptimierung der Funktionen, die auf die Laufzeit erheblichen Einfluß haben, • Bereitstellung einer Schnittstelle, mit der das Optimierungstool an eine geeignete, benutzerfreundliche Oberfläche angeschlossen werden kann. Die Oberfläche selbst ist nicht Teil der Arbeit. 3 Kriterien der Turnusplanung für eine Fahrergruppe 14 3 Kriterien der Turnusplanung für eine Fahrergruppe In diesem und den folgenden vier Kapiteln soll ausführlich auf die Turnusplanung für eine Fahrergruppe eingegangen werden. Die Kriterien, die dabei zu beachten sind, werden zunächst in verschiedene Kategorien eingeteilt (Abschnitt 3.1) und danach exakt beschrieben (Abschnitt 3.2). Da das Problem in den Kapiteln 5 und 6 mit zwei verschiedenen Methoden gelöst werden soll, findet diese Beschreibung vor der eigentlichen Modellierung, die von der Methode abhängig ist, statt. So wird in Kapitel 7 ein direkter Vergleich der Ergebnisse sowohl insgesamt als auch für einzelne Kriterien möglich. Die Anforderungen sind klar von der Modellierung getrennt und können zur Bewertung der Ergebnisse verwendet werden. Um diese Trennung deutlich zu machen, sind jeweils eigene Kapitel definiert worden. 3.1 Differenzierung der Kriterien Wie bereits in Kapitel 2.1 beschrieben, sind bei der Turnusplanung für eine Fahrergruppe nur zeitliche Randbedingungen zu beachten. Aufgrund der Vielzahl der zeitlichen Kriterien, die bei der Bildung eines Turnus zu berücksichtigen sind, ist es zunächst sinnvoll, mögliche Einteilungen dieser Kriterien zu untersuchen. Salewski ([35], S.363) schlägt unter anderem eine Einteilung in Reihenfolgebeziehungen und Kapazitätsaspekte vor. Diese Einteilung soll zunächst verfolgt werden, um die wichtigsten in der Literatur erwähnten Kriterien vorzustellen. 3.1.1 Kapazitätskriterien Bei den Kapazitätskriterien können gesetzliche, wirtschaftliche und sozialverträgliche Aspekte unterschieden werden, die jedoch eng miteinander verflochten sind. Aus Sicht der Arbeitgeber (wirtschaftlich) müssen alle Schichten, die von der entsprechenden Fahrergruppe bearbeitet werden sollen, auch in dem Turnus plaziert werden. Diese Kriterien zielen also auf die ausreichende Verfügbarkeit von Arbeitskräften zu jedem Zeitpunkt ab. Dabei ist zu beachten, daß am Wochenende meist weniger Fahrer zur Verfügung stehen als an den Tagen Montag bis Freitag, da Fahrer aus sozialverträglichen Gründen oft entweder gar nicht oder nur zu einem bestimmten Anteil an Wochenenden arbeiten. Außerdem müssen gesetzliche Regelungen bezüglich der Arbeits- und Ruhezeit der Arbeitnehmer eingehalten werden. Die relevanten gesetzlichen Bestimmungen finden sich in §1 bis §13 im Arbeitszeitgesetz (ArbZG) sowie in der Verordnung des Rates der Europäischen Gemeinschaften über die Harmonisierung bestimmter Sozialvorschriften im Straßenverkehr (VO (EWG) Nr.3820/85), Artikel 6 bis 8. Hierauf wird in den folgenden Absätzen Bezug genommen. Tägliche Arbeitszeit: Die tägliche Arbeitszeit soll nicht länger als neun Stunden andauern. Sie darf zweimal pro Woche auf zehn Stunden verlängert werden (vgl. VO (EWG) Nr.3820/85, Artikel 6). Diese Restriktion muß schon bei der Bildung der Dienste berücksichtigt werden und stellt dann für die Turnusplanung keine Einschränkung mehr dar. Voraussetzung ist lediglich, daß jeweils nur ein Dienst bzw. eine Schichtart pro Tag zugewiesen wird. 3 Kriterien der Turnusplanung für eine Fahrergruppe 15 Wöchentliche Ruhezeit: In jeder Woche ist eine zusammenhängende Ruhezeit von 45 Stunden zu berücksichtigen. Diese Wochenruhezeit kann bis auf 36 Stunden verkürzt werden, wobei die Verkürzung innerhalb von drei Wochen auszugleichen ist. Artikel 6, VO (EWG) Nr.3820/85 schreibt außerdem vor, daß maximal sechs Arbeitstage in Folge liegen dürfen. Laut Änderung der Fahrpersonalverordnung von 1997 sind auch 12 Arbeitstage in Folge zulässig. Die Interpretationen der Gesetzestexte gehen hier teilweise weit auseinander. Jährliche Arbeitszeit: Die Jahresarbeitszeit ist zumeist in Tarifverträgen festgelegt. Da bei der Turnusplanung die durchschnittliche Arbeitszeit der Dienste feststeht, kann die jährliche Arbeitszeit über die Anzahl freier Tage im Turnus beeinflußt werden. 3.1.2 Reihenfolgekriterien Bei den Reihenfolgekriterien können drei Kategorien, nämlich gesetzliche, arbeitsmedizinische und sozialverträgliche Kriterien unterschieden werden. 3.1.2.1 Gesetzliche Kriterien Es ist festgelegt, daß zwischen zwei Arbeitstagen eine zusammenhängende Ruhezeit von elf Stunden eingehalten werden muß (§5 ArbZG). Diese darf entweder höchstens dreimal pro Woche auf neun Stunden verkürzt werden, oder sie kann im Fall geteilter Dienste in mehrere Blöcke aufgeteilt werden, von denen einer mindestens acht Stunden lang sein muß (vgl. VO (EWG) Nr.3820/85, Artikel 8). Die Schichtarten müssen so angeordnet werden, daß dieses Kriterium erfüllt ist. 3.1.2.2 Arbeitsmedizinische Kriterien Eine ausführliche Diskussion der arbeitsmedizinischen und teilweise auch sozialverträglichen Kriterien findet sich bei Knauth [24]. Dort werden im wesentlichen die im folgenden aufgelisteten Punkte gefordert. Einige davon sind in der Literatur jedoch umstritten. • Es sollen nicht mehr als drei Nachtschichten aufeinander folgen, weil sich der Körper sonst an die Nachtarbeit gewöhnt und Schlafstörungen die Folge sein können. • Früh- und Spätdienstblöcke sollen sich in möglichst kurzer Folge abwechseln, auch innerhalb der Dienstblöcke, damit keine längeren Folgen von Tagen auftreten, an denen die Fahrer abends keine sozialen Kontakte pflegen können. • Es sollen nicht mehr als sechs Arbeitstage aufeinander folgen, auch wenn die Mitarbeiter oft bereit sind, längere Folgen auf sich zu nehmen, um so längere Freiblöcke zu erhalten. Freiblöcke in kürzeren Abständen sind jedoch gerade bei Schichtarbeit notwendig, um eine körperliche Erholung zu ermöglichen. • Zwischen zwei Schichten soll eine ausreichende Ruhezeit von mindestens elf Stunden liegen, damit sich kein Schlafdefizit anstauen kann. • Der Turnus soll regelmäßig und möglichst kurz sein, damit die Fahrer sich an den Rhythmus gewöhnen. Im Widerspruch dazu findet sich zum Beispiel bei Gauderer und Knauth ([20], S.150) die Forderung nach möglichst langen Turnussen, weil so die Wünsche der Fahrer besser berücksichtigt werden können. 3 Kriterien der Turnusplanung für eine Fahrergruppe 16 • Zur Art der Rollierung existieren unterschiedliche Ansichten. Unter Rollierung versteht man die Abfolge der Schichtarten innerhalb eines Dienstblockes. Hierbei sind im wesentlichen drei Fälle zu unterscheiden: § Man spricht von konstanter Rollierung, wenn alle Dienste bzw. Schichtarten innerhalb eines Dienstblockes etwa die gleiche Anfangs- und Endzeit haben. § Eine Rückwärtsrollierung zeichnet sich dadurch aus, daß die Arbeitszeit an einem Tag gegenüber der Arbeitszeit des Vortages nach vorne verschoben ist. Dies hat zwar kürzere nächtliche Ruhezeiten zwischen den Diensten zur Folge, zahlt sich jedoch in längeren Freiblöcken aus. § Bei einer Vorwärtsrollierung ist die Arbeitszeit entsprechend gegenüber dem Vortag nach hinten verschoben. Die Konsequenz sind entsprechend längere Ruhezeiten innerhalb der Dienstblöcke und kürzere Freiblöcke. In der folgenden Abbildung sind die verschiedenen Formen der Rollierung graphisch dargestellt. Rückwärtsrollierung konstante Rollierung Vorwärtsrolleriung Mo Di Mi Do Fr Tageszeit Tageszeit Tageszeit Abbildung 5: Formen der Rollierung Laut Knauth [24], S.164 soll eine Vorwärtsrollierung bevorzugt werden, da längere Ruhezeiten zwischen den Schichten aus arbeitsmedizinischer Sicht wichtiger sind als lange Freiblöcke. Erläuterungen zu einer wünschenswerten Rollierung finden sich außerdem bei Knauth und Minssen ([25], S.20). 3.1.2.3 Sozialverträgliche Kriterien Sozialvertägliche Kriterien sind in den in der Literatur diskutierten Modellen oft vernachlässigt, wie auch schon Drumm ([13], Sp.1765) feststellt. Speziell sind hier Wünsche der Mitarbeiter zur Schichtart-Verteilung, zur Verteilung freier Wochenenden und zur Rollierung zu erwähnen. Gauderer und Knauth [20] schlagen sogar vor, Wünsche jedes Mitarbeiters für einzelne Tage eines Turnus mit in die Planung einzubeziehen, was allerdings einen enormen Aufwand bei der Erfassung der Wünsche voraussetzt. Außerdem ergeben sich aufgrund der zyklischen Struktur des Turnus auch Wirkungen auf andere Mitarbeiter, so daß der Umfang, in dem derart spezielle Wünsche berücksichtigt werden können, recht gering ist. 3 Kriterien der Turnusplanung für eine Fahrergruppe 17 3.1.3 Alternative Differenzierung Andere Möglichkeiten zur Differenzierung der Kriterien können zum Beispiel bei den Interessengruppen, also insbesondere Arbeitnehmern und Arbeitgebern, ansetzen. Dabei werden die Arbeitnehmer hauptsächlich an der Berücksichtigung sozialverträglicher Kriterien interessiert sein, während für die Arbeitgeber wirtschaftliche Interessen, also insbesondere die Kapazitätsrestriktionen, im Vordergrund stehen. Die arbeitsmedizinischen Kriterien sind für beide Gruppen wichtig, denn auch die Arbeitgeber können langfristig nicht an Schichtartfolgen interessiert sein, die sich negativ auf das Wohlbefinden der Mitarbeiter und damit auch auf die Krankheitsraten auswirken. 3.2 Beschreibung der Kriterien Jetzt sollen die berücksichtigten Kriterien beschrieben werden. Die Formulierung der Kriterien und die Art der Parametrisierung wurde mit der BSAG abgestimmt. Dabei hätte man sicherlich auch andere als die dargestellten Möglichkeiten finden können. Hierauf soll jedoch nicht weiter eingegangen werden. Vielmehr ist es wichtig, in diesem Kapitel den Input, also die Grundlage für die Modellierung und die Lösung des resultierenden Problems in den folgenden Kapiteln festzulegen. Bei der Darstellung wird zwischen „Entscheidungsschranken“ und „Zielkriterien“ unterschieden. Durch die Entscheidungsschranken werden alle zulässigen Lösungen beschrieben. Um aus den zulässigen Lösungen eine möglichst optimale auszuwählen, sind Zielkriterien definiert. Um die relative Wichtigkeit der Zielkriterien untereinander festzulegen, ist jedem Zielkriterium ein Gewichtungsfaktor zugeordnet, der vom Benutzer eingestellt werden kann. Außerdem existieren eine Reihe von Parametern, über die der Benutzer einen qualitativen und quantitativen Einfluß auf die Berücksichtigung verschiedener Kriterien nehmen kann. Zu jedem Kriterium sind alle relevanten Parameter aufgelistet. Da einige Parameter Einfluß auf mehrere Kriterien haben, tauchen sie doppelt auf. Bei der Beschreibung der Parameter ist neben dem Namen und der Funktion jeweils auch deren Dimension, der Wertebereich und der voreingestellte Wert angeführt. Die Definition eines Wertebereiches soll den Benutzer davon abhalten, Werte einzugeben, die zu keinem sinnvollen Ergebnis führen können. Jedes Kriterium soll einer der in Abschnitt 3.1 beschriebenen Kategorien zugeordnet werden. Diese Zuordnung ist allerdings nicht immer eindeutig möglich. Um den unterschiedlichen in der Literatur diskutierten Forderungen Rechnung zu tragen, ist es durch die Parametrisierung auch möglich, bestimmte Kriterien nicht zu berücksichtigen, indem das relative Gewicht auf 0 gesetzt oder ein entsprechender Wert für den jeweiligen Parameter eingestellt wird. Beispielsweise kann die minimale Dienstblocklänge auf einen sehr großen Wert gesetzt werden, so daß sie keine Einschränkung mehr darstellt. Dadurch wird dem Ziel Rechnung getragen, ein nicht nur auf die Interessen eines speziellen Verkehrsbetriebes abgestimmtes System, sondern ein flexibel einsetzbares Optimerungstool zu entwickeln. Zur Vereinfachung der Schreibweise werden zunächst einige Indexmengen eingeführt: 3 Kriterien der Turnusplanung für eine Fahrergruppe 18 Indexmenge Beschreibung I = {i: i=1, 2, ...} Ischwer ⊆ I T = {t: t=0,...,6} Indexmenge der für den Turnus zulässigen Schichtarten Die Menge der schweren Schichtarten Index über die Wochentage (Montag bis Sonntag) Tabelle 1 3.2.1 Entscheidungsschranken 3.2.1.0 Anzahl Zeilen Kategorie: wirtschaftliche Kapazitätsrestriktion Beschreibung: Dieser Wert gibt die Anzahl der Zeilen des Turnus an. Streng genommen ist diese Vorgabe keine Entscheidungsschranke, sondern sie gibt die Größe des Problems an. Wie bereits in Abschnitt 1.4.7 beschrieben, kann die Anzahl der Zeilen des Turnus mit der Anzahl der Fahrer der Gruppe übereinstimmen oder ein Teiler davon sein. Damit ist das System für beide Fälle einsetzbar, wobei natürlich die Bedarfsanforderungen für den Turnus in den folgenden Abschnitten 3.2.1.2, 3.2.1.3 und 3.2.1.9 anzupassen sind. Parametername Anzahl Wochen Kurzname Dimension Wochen --- Wertebereich 1,...,30 Voreinst. --- Tabelle 2 3.2.1.1 Genau eine Belegung Kategorie: gesetzliche Kapazitätsrestriktion Beschreibung: Jeder Mitarbeiter darf pro Tag nur eine Schicht arbeiten, damit die tägliche Arbeitszeit nicht überschritten wird. An freien Tagen darf keine Schichtart zugewiesen werden. Diese Entscheidungsschranke ist trivial und ergibt sich auch bereits aus der Darstellung eines Turnus durch eine Matrix, in der an jeder Position nur ein Eintrag existieren darf. 3.2.1.2 Anzahl freier Tage Kategorie: wirtschaftliche Kapazitätsrestriktion Beschreibung: Da im Rahmen der Turnusplanung keine Einflußnahme mehr auf die tägliche Arbeitszeit ausgeübt werden kann, weil diese durch die Bildung der Dienste weitgehend festgelegt ist, kann die jährliche Arbeitszeit nur über die Anzahl der freien Tage im Turnus beeinflußt werden. Daraus ergibt sich die Anzahl der freien Tage pro Jahr und mit Hilfe der durchschnittlichen täglichen Arbeitszeit auch die jährliche Arbeitszeit. Mit der Anzahl der freien Tage ist dann auch die Turnuskapazität (vgl. 1.4.9) festlegt. Es gilt TK = 7⋅Wochen – AnzFrei. Parametername Anzahl freier Tage Tabelle 3 Kurzname AnzFrei Dimension Tage Wertebereich 0,1,...,200 Voreinst. 0 3 Kriterien der Turnusplanung für eine Fahrergruppe 19 3.2.1.3 Bedarf Frei pro Wochentag Kategorie: wirtschaftliche Kapazitätsrestriktion Beschreibung: Sollen die in 3.2.1.2 festgelegten freien Tage in einer bestimmten Weise über die Wochentage verteilt werden, so können Mindestvorgaben für jeden einzelnen Wochentag gemacht werden. Die Summe dieser Mindestvorgaben darf jedoch die Anzahl freier Tage nicht überschreiten. Darüber hinaus muß der Bedarf zur Erfüllung der freien Wochenenden (vgl. 3.2.1.4) berücksichtigt werden, d.h. nach Abzug der explizit für die Wochentage Montag bis Freitag geforderten Freis müssen noch genügend Freis zur Bildung der freien Wochenenden übrig bleiben. Parametername Bedarf Frei pro Wochentag für t∈ T Kurzname Dimension FreiBedarft --- Wertebereich 0,1,...,30 Voreinst. 0 Tabelle 4 3.2.1.4 Mindestanteil freier Wochenenden Kategorie: sozialverträgliche Reihenfolgerestriktion Beschreibung: Es soll mindestens der vorgegebene Anteil der Wochenenden frei sein. Ein Wochenende ist genau dann frei, wenn sowohl Samstag als auch Sonntag frei sind. Parametername Anteil freier Wochenenden Kurzname AntWoE Dimension --- Wertebereich [0, 1] Voreinst. 50% Tabelle 5 3.2.1.5 Minimale Dienstblocklänge Kategorie: sozialverträgliche Reihenfolgerestriktion Beschreibung: Zwischen zwei Freiblöcken müssen mindestens MinDBL aufeinanderfolgende Tage mit Schichtarten belegt sein. Diese Entscheidungsschranke dient dazu, kurze Dienstblöcke, also einen zu raschen Wechsel von freien Tagen und Arbeitstagen, zu verbieten. Parametername Minimale Dienstblocklänge Kurzname MinDBL Dimension Tage Wertebereich 1,...,12 Voreinst. 2 Tabelle 6 3.2.1.6 Maximale Dienstblocklänge Kategorie: arbeitsmedizinische Reihenfolgerestriktion, auch gesetzliche und sozialverträgliche Aspekte Beschreibung: Über diesen Parameter kann der Benutzer die Anzahl der direkt aufeinander folgenden Arbeitstage begrenzen. 3 Kriterien der Turnusplanung für eine Fahrergruppe Parametername Kurzname Maximale Dienstblocklänge MaxDBL Dimension Tage 20 Wertebereich 1,...,12 Voreinst. 6 Tabelle 7 3.2.1.7 Maximale Freiblocklänge Kategorie: arbeitsmedizinische Reihenfolgerestriktion Beschreibung: Ebenso wie für die Länge eines Dienstblockes kann auch für die Länge der Freiblöcke eine obere Schranke angegeben werden. Parametername Maximale Freiblocklänge Kurzname MaxFBL Dimension Tage Wertebereich 0,1,...,12 Voreinst. 4 Tabelle 8 3.2.1.8 Zulässige Schichtarten Kategorie: wirtschaftliche Kapazitätsrestriktion, auch sozialverträgliche Aspekte Beschreibung: Diese Entscheidungsschranke gibt an, welche Schichtarten in einem Turnus zulässig sein sollen. Der Benutzer legt hier die Menge I aller zulässigen Schichtarten fest. 3.2.1.9 Bedarf Schichtart Kategorie: wirtschaftliche Kapazitätsrestriktion Beschreibung: Der Bedarf einer Schichtart gibt an, wie viele Schichtart-Vorgaben der Schichtart i mindestens auf den Wochentag t verteilt werden sollen. Stehen im Turnus mehr belegbare Matrixeinträge zur Verfügung als für den Bedarf an Schichtarten erforderlich, werden gemäß des Wunschanteils (vgl. 3.2.2.5) weitere Schichtart-Belegungen verteilt, so daß am Ende jeder nicht freie Matrixeintrag eine Schichtart-Belegung hat. Der Bedarf für die einzelnen Schichtarten und Wochentage muß der Benutzer bestimmen, indem er die Dienstmasse bezüglich der Schichtarten auf die einzelnen Fahrergruppen aufteilt. Falls die Fahrergruppe aufgrund ihrer Größe nach mehreren identischen Turnussen arbeitet (vgl. 1.4.7), muß der Bedarf an Schichtarten für die Fahrergruppe entsprechend nach unten angepaßt werden. Diese Probleme werden in Kapitel 8 unter dem Namen „Dienst-Fahrergruppen-Zuordnung“ behandelt. Parametername Bedarf Schichtart für jede Schichtart i∈ I und jeden Wochentag t∈ T Tabelle 9 Kurzname SABedarfit Dimension --- Wertebereich 0,1,...,30 Voreinst. 0 3 Kriterien der Turnusplanung für eine Fahrergruppe 21 3.2.1.10 Schichtartblocklänge Kategorie: arbeitsmedizinische Reihenfolgerestriktion Beschreibung: Für schwere Schichtarten, z.B. Spät- oder Nachtdienste, kann die Zahl der in Folge auszuführenden Dienste der Schichtart durch diesen Parameter begrenzt werden. Für nicht schwere Schichtarten wird dieser Parameter auf 0 gesetzt, d.h. es gibt keine Beschränkung. In diesem Fall wird die entsprechende Schichtart nicht in die Menge Ischwer der schweren Schichtarten aufgenommen. Die Bildung der Menge Ischwer ist also abhängig von den Parametereinstellungen für SABLi. Leider ist der Wert 0 für „keine Beschränkung“ nicht sonderlich suggestiv. Durch diese Vereinbarung wird jedoch kein weiterer Parameter benötigt. Parametername Schichtartblocklänge für jede Schichtart i∈ I Kurzname SABLi Dimension Tage Wertebereich 0,1,...,12 Voreinst. 0 Tabelle 10 3.2.1.11 Nachtruhe Kategorie: gesetzliche Reihenfolgerestriktion Beschreibung: Eine Schichtart darf nur dann auf eine andere folgen, wenn dazwischen die gewünschte Nachtruhe (NR) eingehalten wird. Liegt genau ein freier Tag zwischen zwei nicht freien Tagen, so soll die Ruhezeit mindestens 24 Stunden zuzüglich der gewünschten Nachtruhe betragen. Um die Nachtruhe zu berechnen, benötigt man die Anfangs- und Endzeiten der Schichtarten. Da die Schichtarten jedoch keine festen Anfangs- und Endzeiten haben, sondern vielmehr Dienste mit unterschiedlichen Zeiten derselben Schichtart zugeordnet werden, ist es lediglich möglich für jede Schichtart eine durchschnittliche Anfangs- und Endzeit zu bestimmen. Hier wählt man das arithmetische Mittel der Anfangs- und Endzeiten der der Schichtart zugeordneten Dienste. Diese Berechnung kann automatisch erfolgen, indem der Benutzer eine Dienstmasse angibt, aus der die Zeiten ermittelt werden. Es ist jedoch auch möglich, manuelle Eingaben für die Anfangs- und Endzeiten zu machen. Bei Schichtarten, die bis in den folgenden Tag hinein andauern (Spät- und Nachtschichten), wird die Endzeit relativ zur Uhrzeit des vorherigen Tages berechnet, d.h. die Endzeit einer Spätschicht, die um 2:00 Uhr am folgenden Tag endet, wird auf 1560 Minuten (26:00 Uhr) gesetzt. Parametername Kurzname Nachtruhe NR Anfangszeit für jede AZi Schichtart i∈ I Endzeit für jede Schichtart EZi i∈ I Tabelle 11 Dimension Minuten Minuten Wertebereich 0,1,...,1439 0,1,...,1439 (0:00 bis 23:59) Voreinst. 720 (12Std.) 480 (8:00) Minuten 0,1,...,2000 960 (16:00) 3 Kriterien der Turnusplanung für eine Fahrergruppe 22 3.2.1.12 Wochenruhezeit Kategorie: gesetzliche Kapazitätsrestriktion Beschreibung: Grundsätzlich soll laut der gesetzlichen Regelung in jeder Woche, also in jeder Zeile eines Turnus, ein zusammenhängender Freiblock von 45 Stunden liegen. Da Unterschreitungen um maximal 9 Stunden erlaubt sind, deren Ausgleich jedoch nur sehr ungenau festgelegt ist (vgl. 3.1.2.1), soll von folgender Vereinfachung ausgegangen werden: In jeder Woche soll ein Freiblock der Mindestlänge 36 Stunden liegen. Dies ist meistens automatisch erfüllt, denn bereits durch ein einfaches Frei in jeder Woche ergibt sich bei einer Nachtruhe von 12 Stunden eine Ruhezeit von 24+12 = 36 Stunden. Daß in jeder Woche mindestens ein freier Tag liegt, kann durch eine maximale Dienstblocklänge nicht größer als 6 erreicht werden. Damit die Unterschreitung der 45 Stunden ausgeglichen werden kann, soll in jedem 2-Wochen-Block mindestens eine der Ruhezeiten eine vom Benutzer vorgegebene Länge aufweisen, die über den Parameter „WRZ“ einstellbar ist. Ein Freiblock soll genau dann zu einer Woche zählen, wenn er in ihr beginnt, d.h. jeder Freiblock wird genau der Woche zugeordnet, in der der erste freie Tag des Blockes liegt. Laut der gesetzlichen Regelung wäre es möglich, einen Freiblock, der in einer Woche beginnt und in der folgenden Woche endet, wahlweise einer der beiden Wochen zuzuordnen. Zur Berechnung der Länge eines Freiblockes werden wieder die Anfangs- und Endzeiten der Schichtarten benötigt. Parametername Kurzname Wochenruhezeit Blocklänge WRZ Anfangszeit für jede AZi Schichtart i∈ I Endzeit für jede Schichtart EZi i∈ I Dimension Stunden Minuten Wertebereich 0,1,...72 0,1,...,1439 (0:00 bis 23:59) Voreinst. 54 480 (8:00) Minuten 0,1,...,2000 960 (16:00) Tabelle 12 3.2.1.13 Wochenruhezeit als Doppelfrei Kategorie: sozialverträgliche Kapazitäts- oder Reihenfolgerestriktion Beschreibung: Falls der Freiblock als Wochenruhezeit in jedem Fall ein Doppelfrei sein soll, kann diese Entscheidungsschranke aktiviert werden, die dann in jedem 2Wochen-Block eine Wochenruhezeit als Doppelfrei sichert. Parametername Kurzname Dimension Wertebereich Wochenruhezeit als Doppelfrei ----true, false Tabelle 13 3.2.2 Zielkriterien 3.2.2.1 Freiblockbildung Kategorie: sozialverträgliches Reihenfolgekriterium Voreinst. false 3 Kriterien der Turnusplanung für eine Fahrergruppe 23 Beschreibung: Die freien Tage des Dienstplanes sollen soweit möglich aneinander liegen, so daß größere Freiblöcke entstehen. Dabei sind Einzelfreis nur in soweit erwünscht, wie sie zur Einhaltung der anderen Kriterien erforderlich sind. Alle längeren Freiblöcke sollen von der Optimierung begünstigt werden. Dabei sollen Freiblöcke mit zunehmender Größe stärker bevorzugt werden (ein Freiblock der Länge x+1 soll besser sein als ein Block der Länge x). Andererseits soll es aber auch die Möglichkeit geben, Doppelfreis gegenüber noch längeren Freiblöcken zu bevorzugen, d.h. ein Dreifachfrei soll weiterhin besser sein als ein Doppelfrei, ein Vierfachfrei soll aber nicht besser sein als zwei Doppelfreis. Freiblöcke mit einer Länge größer zwei sollen also nur noch degressiv stärker begünstigt werden. Die Stärke dieses Effektes ist über den Parameter „Degressionsfaktor“ einstellbar. Parametername Gewicht Freiblockbildung Degressionsfaktor Kurname Gew1 DF Dimension ----- Wertebereich Voreinst. 0,1,...,2000000000 10 [0, 1] 0,6 Tabelle 14 3.2.2.2 Vertikale Gleichverteilung freie Tage Kategorie: arbeitsmedizinisches Reihenfolgekriterium Beschreibung: Die freien Tage sollen aus arbeitsmedizinischen Gründen gleichmäßig über die Zeilen verteilt sein. Dabei ist jedoch keine exakte Gleichverteilung erwünscht, sondern es sollen nur grobe "Ungleichverteilungen" verhindert werden. Damit ist gewährleistet, daß die Fahrer während des gesamten Turnus ausreichende Erholungsphasen haben und keine unnötigen Belastungen durch Zeiträume mit nur wenigen freien Tagen entstehen. Diese Nebenbedingung ist vor allem bei großen Turnussen wichtig, während die Gleichverteilung bei kleinen Turnussen noch weitgehend durch die maximale Dienstblocklänge erreicht werden kann. Parametername Gewicht Vertikale Gleichverteilung freie Tage Voreinst. Kurzname Dimension Wertebereich Gew2 --0,1,...,2000000000 800 Tabelle 15 3.2.2.3 Gleichverteilung freie Wochenenden Kategorie: sozialverträgliches Reihenfolgekriterium Beschreibung: Die freien Wochenenden sollen gleichmäßig über die Zeilen verteilt sein. Auch hier ist keine exakte Gleichverteilung erforderlich. 3 Kriterien der Turnusplanung für eine Fahrergruppe Parametername Gewicht Gleichverteilung freie Wochenenden 24 Voreinst. Kurzname Dimension Wertebereich Gew3 --0,1,...,2000000000 2000 Tabelle 16 3.2.2.4 Unterschreitung Schichtart Kategorie: wirtschaftliches Kapazitätskriterium Beschreibung: Für jeden Wochentag t können Unterschreitungen des Schichtart-Bedarfes erlaubt werden, indem „Unterschreitung erlaubt t“ auf „true“ gesetzt wird. In diesem Fall wird also die Entscheidungsschranke 3.2.1.9 „Bedarf Schichtarten“ aufgeweicht und in ein Zielkriterium umgewandelt. Auf diese Weise ist es dem Benutzer möglich, auch dann einen Turnus zu generieren, wenn er nicht sicher ist, ob der Bedarf an Schichtarten in dem Turnus abgedeckt werden kann. Parametername Gewicht Unterschreitung Schichtart Unterschreitung erlaubt für jeden Wochentag t∈ T Kurzname Dimension Gew4 ----- --- Wertebereich Voreinst. 0,1,...,2000000000 3200 true, false false Tabelle 17 3.2.2.5 Wunschanteil Schichtart Kategorie: wirtschaftliches Kapazitätskriterium, auch sozialverträgliche Aspekte Beschreibung: Über den gesamten Turnus kann eine Wunschverteilung der Schichtarten vorgegeben werden. Dieses Kriterium kann einerseits dazu dienen, die Verteilung der Schichtarten, die nicht über „Bedarf Schichtart“ gesteuert werden, zu beeinflussen, andererseits können hiermit die Wünsche der Mitarbeiter der Gruppe berücksichtigt werden, ein Faktor, der in der Literatur oftmals vernachlässigt wird (vgl. Tabelle 22, S.33), für die Akzeptanz des Systems aber von entscheidender Bedeutung ist. Parametername Kurzname Dimension Gewicht Wunschanteil Gew5 --Schichtart Wunschanteil Schichtart für SAAnti --jede Schichtart i∈ I Wertebereich Voreinst. 0,1,...,2000000000 200 [0, 100%] 0 Tabelle 18 3.2.2.6 Spreizung Kategorie: arbeitsmedizinisches Reihenfolgekriterium Beschreibung: Für jede schwere Schichtart sollen die Dienstblöcke der jeweiligen Schichtart möglichst gleichmäßig über den Turnus verteilt werden. Dadurch soll zum Beispiel erreicht werden, daß zwischen zwei Spätdienstblöcken möglichst große Abstände liegen. Auf den idealen Abstand hat einerseits der Wunschanteil der Schichtart und andererseits die Schichtartblocklänge einen Einfluß. Ein Teil dieses Abstandes soll auf jeden Fall eingehalten werden, so daß das Kriterium Spreizung eigentlich aus 3 Kriterien der Turnusplanung für eine Fahrergruppe 25 einer Entscheidungsschranke und einem Zielkriterium besteht. Wie groß der streng einzuhaltende Abstand gemessen am idealen Abstand sein soll, wird durch den Parameter „Einhaltung Idealabstand“ festgelegt. Parametername Kurzname Dimension Gewicht Spreizung Gew6 --Einhaltung Idealabstand EinhAbs --Schichtartblocklänge für SABLi Tage jede Schichtart i∈ I SAAnti --Wunschanteil Schichtart für jede Schichtart i Wertebereich Voreinst. 0,1,...,2000000000 800 [0, 100%] 0,5 0,1,...,12 0 [0, 100%] 0 Tabelle 19 3.2.2.7 Rückwärtsrollierung Kategorie: sozialverträgliches Reihenfolgekriterium Beschreibung: Es soll die Möglichkeit geben, eine Rückwärtsrollierung zu erzeugen. Ziel dabei ist es, die Schichtarten so zu legen, daß die Ruhezeit an Freiblöcken möglichst lang wird. Dies ist jedoch nur an Freiblöcken der Mindestlänge zwei erwünscht. Da die einzelnen Dienste bei einer Rückwärtsrollierung enger zusammenrücken, ist die Berücksichtigung der Rückwärtsrollierung stark von der geforderten Nachtruhe abhängig und wird quantitativ durch diese begrenzt. Parametername Gewicht Rückwärtsrollierung Kurzname Dimension Gew7 --- Wertebereich Voreinst. 0,1,...,2000000000 4 Tabelle 20 3.2.2.8 Standardrollierung Kategorie: arbeitsmedizinisches oder sozialverträgliches Reihenfolgekriterium Beschreibung: Alternativ oder zusätzlich zur Rückwärtsrollierung kann auch ein Wert für die Rollierung vorgegeben werden. Dieser Wert gibt die gewünschte Verschiebung der Schwerpunkte zweier aufeinanderfolgender Schichtarten an. Er kann negativ sein, so daß wie oben eine Rückwärtsrollierung gefördert wird. Durch positive Parameterwerte kann auch eine Vorwärtsrollierung begünstigt werden. Die Quantität der Rollierung kann dabei über den Betrag des Parameters beeinflußt werden. Wird der Parameter auf 0 gesetzt, entspricht dies einer konstanten Rollierung (vgl. 3.1.2.2). Parametername Gewicht Standardrollierung Standardrollierung Schwerpunkt für jede Schichtart i∈ I Tabelle 21 Kurzname Dimension Gew8 --SR Minuten SPi Minuten Wertebereich Voreinst. 0,1,...,2000000000 1 -600,...,600 -80 0,1,...,2000 --- 3 Kriterien der Turnusplanung für eine Fahrergruppe 26 Bei dem Schwerpunkt einer Schichtart handelt es sich nicht um einen Parameter, der vom Benutzer eingestellt werden kann. Der Schwerpunkt einer Schichtart wird als das arithmetische Mittel aus Anfangs- und Endzeit der Schichtart berechnet: SPi = AZi + EZi für alle Schichtarten i∈ I (vgl. 3.2.1.12). 2 Da die Endzeiten mit Bezug zu dem Tag berechnet werden, an dem die Schicht beginnt (vgl. 3.2.1.11), ergibt sich für den Schwerpunkt stets ein positiver Wert. 3.2.3 Mögliche Alternativen und Erweiterungen Nachtruhe: Die vorgestellte Entscheidungsschranke „Nachtruhe“ verbietet nur die Folge zweier Schichtarten, zwischen denen die Nachtruhe nicht eingehalten werden kann, wie zum Beispiel eine Folge „SD, FDS“. Umgekehrte Folgen wie „FDS, SD“ können aber auch unerwünscht sein, weil sich hierdurch lange Ruhezeiten zwischen den Schichten ergeben, ohne daß ein Tag wirklich frei ist. Alternativ gibt es die Möglichkeit, für jedes geordnete Paar zweier Schichtarten festzulegen, ob sie aufeinander folgen dürfen oder nicht. Dies läßt sich sehr anschaulich durch einen gerichteten Graphen, einen so genannten Übergangsgraphen darstellen. Dabei wird für jede Schichtart ein Knoten eingeführt, und der zur Schichtart i1 gehörende Knoten wird genau dann durch eine gerichtete Kante zum Knoten der Schichtart i2 verbunden, wenn i2 auf i1 folgen darf. Diese Darstellung wird von Kleinschmidt et al. ([23], S. 589) vorgeschlagen und ist in Abbildung 6 dargestellt. Zusätzlich sind dort jedem Knoten Werte zugeordnet, die festlegen, wie oft eine Schichtart mindestens auf sich selbst folgen muß und (1, 4) (1, 6) FD MD wie oft eine Schichtart maximal in unmittelbarer Folge auftreten darf. Letzterer Fall entspräche der Entscheidungs(2, 3) ND schranke „Schichtartblocklänge“ (vgl. 3.2.1.10). Abbildung 6: Übergangsgraph Die Entscheidung gegen diese Modellierung ist aufgrund des erhöhten Aufwandes für den Benutzer bei der Eingabe der Daten gefallen, denn aufgrund der unterschiedlichen Wünsche der einzelnen Fahrergruppen müssen diese Angaben für jede Gruppe separat erfolgen. Darüber hinaus wächst bei vielen Schichtarten der Aufwand zur Pflege des Übergangsgraphen deutlich im Vergleich zur Eingabe eines Wertes für die Nachtruhe. Außerdem bestünde nicht mehr die Möglichkeit, zulässige Schichtartfolgen automatisch über die durchschnittlichen Anfangs- und Endzeiten aus den Diensten einer Dienstmasse zu berechnen. Da die Berechnung der Daten aus einer Dienstmasse jedoch wenig transparent für den Benutzer ist, wäre es sinnvoll, den sich dadurch ergebenden Übergangsgraphen anzuzeigen und dem Benutzer nachträglich die Möglichkeit der Manipulation zu geben. Im Rahmen des in Abschnitt 3.2 formulierten Systems lassen sich unerwünschte Schichtartfolgen wie „FDS, SD“ durch eine stärkere Gewichtung der Kostenart Rückwärtsrollierung vermeiden, denn so werden längere Ruhezeiten zwischen den Schichtarten vorwiegend an Doppelfreis plaziert. 3 Kriterien der Turnusplanung für eine Fahrergruppe 27 Bedarf Schichtart: Anstatt den Bedarf der einzelnen Schichtarten pro Tag in absoluten Werten anzugeben, wäre es auch möglich, relative Werte als Vorgaben zu benutzen. Dies wäre insbesondere dann von Vorteil, wenn der Benutzer die Auswirkungen verschiedener Turnusgrößen analysieren möchte. In diesem Fall muß er die absoluten Bedarfe für jede Turnusgröße neu berechnen und eingeben. Horizontale Gleichverteilung: Wenn die konkret angegebenen Bedarfe an Schichtarten nicht die gesamte Turnuskapazität ausfüllen, werden zusätzliche Schichtart-Belegungen vergeben. Dabei wird zwar noch die Wunschverteilung der Schichtarten beachtet, aber es kann geschehen, daß die zusätzlichen Belegungen ungleich über die Wochentage verteilt werden. Es könnten zum Beispiel montags viel mehr Spätdienste als an anderen Tagen vergeben werden. Um hier eine ausgeglichene Verteilung zu erzwingen, können zusätzliche Entscheidungsschranken eingeführt werden, die nur eine maximale Differenz von 1 zwischen den Anzahlen der verteilten Belegungen einer Schichtart an verschiedenen Tagen zulassen. Wenn also montags x Spätdienste verteilt würden, müßten an den anderen Tagen mindestens x–1 und höchstens x+1 Spätdienste verteilt werden. Eine entsprechende Entscheidungschranke kann auch für die Verteilung der freien Tage hinzugefügt werden. Solche Beschränkungen sind jedoch nur für die Tage Montag bis Freitag sinnvoll, da am Wochenende in der Regel mehr freie Tage und weniger Schichtart-Belegungen verteilt werden sollen als an den anderen Tagen. Zum Abschluß des Kapitels soll noch erwähnt werden, daß die beschriebenen Kriterien nicht unabhängig voneinander sind. Zum Beispiel wird es mit stärkerer Freiblockbildung vermutlich immer schwieriger, die freien Tage gleichmäßig über den Turnus zu verteilen. 4 Komplexität und Lösungsansätze 28 4 Komplexität und Lösungsansätze In diesem Kapitel wird der „Schwierigkeitsgrad“ des gerade beschriebenen Problems der Turnusplanung für eine Fahrergruppe untersucht. Dabei stehen drei Fragen im Mittelpunkt: • Existiert überhaupt eine zulässige Lösung? • Wie schwierig ist eine Lösung zu finden (Komplexität)? • Welche Verfahren können angewendet werden? 4.1 Existenz einer zulässigen Lösung Ob das sich aus den Parametereinstellungen ergebende Problem eine zulässige Lösung hat, läßt sich aufgrund der großen Anzahl der Parameter und den vielfältigen gegenseitigen Einflüssen der Entscheidungsschranken nicht auf Anhieb beurteilen. Es gibt jedoch einige Voraussetzungen, die auf jeden Fall erfüllt sein müssen, damit eine zulässige Lösung existiert: • Die Summe aus der Anzahl der zu verteilenden Schichtart-Belegungen und der freien Tage darf pro Wochentag die Zeilenzahl des Turnus nicht übersteigen. • Die Summe der zu verteilenden Schichtart-Belegungen darf die Turnuskapazität nicht übersteigen. • Die gewünschte Nachtruhe muß einen realistischen Wert haben, damit zulässige Schichtartfolgen gebildet werden können. • Die minimale und maximale Dienstblocklänge müssen sinnvoll definiert sein, insbesondere muß MinDBL ≤ MaxDBL gelten. Außerdem müssen genügend freie Tage zu verteilen sein, damit die sich aus der maximalen Dienstblocklänge ergebende Mindestanzahl der Dienstblöcke realisiert werden kann. • Die Schichtartblocklänge muß für alle schweren Schichtarten sinnvoll definiert sein, damit alle schweren Schichtarten auf die Dienstblöcke verteilt werden können. • Wenn der Parameter WRZ einen zu hohen Wert hat, existiert möglicherweise keine zulässige Lösung. • Die Summe der Wunschanteile für die zulässigen Schichtarten muß 100% betragen. Diese Werte haben zwar nur Einfuß auf die Zielkriterien („Wunschanteil Schichtart“ und „Spreizung“) und beeinflussen die Menge der zulässigen Lösungen nicht, aber damit die Umsetzung der Zielkriterien sinnvoll geschehen kann, muß diese Bedingung beachtet werden. Näheres hierzu findet sich in den Abschnitten 5.3.3.5 und 5.3.3.6. Die Einhaltung der genannten Bedingungen wird vom System überprüft, bevor ein Optimierungslauf gestartet wird. Gegebenenfalls wird der Benutzer auf die nicht beachtete Voraussetzung hingewiesen und eine Korrektur der betreffenden Parameter erzwungen. Darum wird einem Benutzer nur selten die Generierung von Parametereinstellungen gelingen, zu denen das System ohne Erfolg versucht, eine zulässige Lösung zu finden. Aufgrund der großen Anzahl von Entscheidungsschranken ist es jedoch nicht in jedem Fall möglich, die Unzulässigkeit a priori zu erkennen. Insbesondere bei kleinen Turnussen kann es Probleme geben, wie das folgende Beispiel zeigt: Gegeben sei ein Turnus mit nur einer Zeile. Am Montag sei ein Spätdienst gefordert und am Dienstag ein Frühdienst. Wenn keine Unterschreitung des Schichtart-Bedarfes erlaubt ist, wird es aufgrund einer Verletzung der Nachtruhe keine zulässige Lösung 4 Komplexität und Lösungsansätze 29 geben. In diesem Fall wird das System die Unzulässigkeit des resultierenden Optimierungsproblems feststellen und eine Fehlermeldung generieren. Wann immer möglich, also insbesondere bei den oben genannten Fällen, sollte die Unzulässigkeit sofort beim Start des Optimierungslaufes angezeigt werden, da sonst zunächst das Problem generiert werden muß. Möglicherweise wird dann erst nach einiger Rechenzeit die Unzulässigkeit sichtbar (zum Beispiel wenn bei Lösung mittels eines LP-Solvers das relaxierte Problem zulässig ist, vgl. Abschnitt 5.1). In diesem Fall geht der Benutzer vielleicht davon aus, den Lauf erfolgreich gestartet zu haben, und ist zum Zeitpunkt der Fehlermeldung gerade nicht an seinem Arbeitsplatz. 4.2 Komplexität des Problems In diesem Abschnitt soll kurz auf die Komplexität des Problems eingegangen werden. Hierzu wird der Begriff der NP-Vollständigkeit kurz erläutert, und anschließend wird gezeigt, daß ein Spezialfall des Problems NP-vollständig ist. 4.2.1 NP-Vollständigkeit In der theoretischen Informatik wird zunächst zwischen der (Laufzeit-)Komplexität eines Algorithmus und eines Problems unterschieden. Die Frage nach der Komplexität eines Problems ist deutlich schwieriger zu beantworten, da eine Aussage über den schnellsten aller möglichen Algorithmen gemacht werden soll. Hierzu hat es sich bewährt, Probleme in die folgenden Klassen einzuteilen: P sei die Menge aller Probleme, für die ein deterministischer Algorithmus existiert, der in polynomialer Laufzeit eine Lösung liefert. NP sei die Menge aller Probleme, für die ein nicht-deterministischer Algorithmus existiert, der in polynomialer Laufzeit eine Lösung liefert. Ein Algorithmus wird dabei als deterministisch bezeichnet, wenn zu jedem Zeitpunkt seiner Ausführung feststeht, was als nächstes zu tun ist. Diese Definitionen sind aus Sedgewick ([36], S.718-719) übernommen und sollen mehr dem allgemeinen Verständnis als einer exakten Definition dienen. Eine formalere Beschreibung mit Hilfe der Turing-Maschine findet sich bei Garey und Johnson ([18], S.17-34). Aufgrund obiger Definition gilt P ⊆ NP. Eine weitere spezielle Teilmenge der Menge NP ist die Menge der NP-vollständigen Probleme. Diese Menge zeichnet sich dadurch aus, daß für keines der zugehörigen Probleme bisher ein Algorithmus mit polynomialer Laufzeit gefunden wurde. Sollte jedoch für eines dieser Probleme ein solcher Algorithmus existieren, so kann er mittels einer geeigneten Transformation für jedes NP-vollständige Problem eine Lösung in polynomialer Zeit liefern. Eine Auflistung der wichtigsten Probleme, von denen bekannt ist, daß sie NP-vollständig sind, findet man bei Garey und Johnson ([18], S.187-284). Eine besondere Rolle spielt dabei das Erfüllbarkeitsproblem, für das als eines der ersten Probleme diese Eigenschaft gezeigt wurde ([18], S.38-44). Diese Eigenschaft wird in vielen Beweisen zur NP-Vollständigkeit weiterer Probleme benutzt. 4.2.2 Komplexität einer vereinfachten Turnusplanung Nun soll wieder das in Abschnitt 3.2 beschriebene Problem betrachtet werden. Dazu seien die Entscheidungsschranken 3.2.1.3 bis 3.2.1.7, 3.2.1.10 und 3.2.1.12 aus dem Problem entfernt. Außerdem seien alle Zielkriterien mit 0 gewichtet, also deaktiviert. 4 Komplexität und Lösungsansätze 30 Die Entscheidungsschranke 3.2.1.11 für die Nachtruhe sei über eine |I|x|I|-Matrix definiert, die an der Stelle (i,k) eine 1 enthält, wenn Schichtart i auf Schichtart j folgen darf und sonst eine 0. Die Anzahl der freien Tage des Turnus sei auf 0 gesetzt. Das resultierende Problem besteht also lediglich noch darin, die Schichtarten auf den Turnus zu verteilen, wobei das Aufeinanderfolgen gewisser Schichtarten verboten ist. Für dieses Problem wurde von Lau ([27], S. 95-97) die NP-Vollständigkeit gezeigt. Das bedeutet: Wenn es gelingt, für das in Abschnitt 3.2 beschriebene Problem einen Algorithmus mit polynomialer Laufzeit zu finden, so könnte dieser Algorithmus auch den gerade beschriebenen Spezialfall lösen und damit alle NP-vollständigen Probleme. Da das Suchen nach einem solchen Algorithmus also nicht sehr aussichtsreich ist, scheint es sinnvoller zu sein, ein Verfahren zu finden, das eine Näherungslösung für unser Problem liefert. 4.3 Lösungsansätze In diesem Abschnitt sollen Lösungsansätze für das geschilderte Problem vorgestellt werden. Hierzu ist zunächst ein Überblick über ähnliche, in der Literatur behandelte Probleme gegeben, und schließlich werden hierauf aufbauend einige Methoden erläutert, die im konkreten Fall Anwendung finden könnten. Eine vereinfachte Version des dargestellten Problems könnte auch als Zuordnungsproblem formuliert werden, wobei jedem Matrixeintrag genau eine Schichtart zugeordnet würde. Im klassischen Zuordnungsproblem ist es jedoch nicht möglich, Reihenfolgebeziehungen, also das Zusammenspiel der Belegungen verschiedener Matrixeinträge abzubilden. Diese Bedingungen sind bei der Turnusplanung von besonderer Relevanz, so daß andere Ansätze zu untersuchen sind. Dabei kann man ganz allgemein zwischen exakten und approximativen Verfahren unterscheiden. Aufgrund der im letzten Abschnitt beschriebenen Komplexität wird es jedoch vermutlich sehr schwierig sein, exakte Algorithmen zu entwickeln. Darum sollen hauptsächlich approximative Verfahren untersucht werden. Diese können in konstruktive Heuristiken, Metaheuristiken und LPbasierte Approximationsverfahren eingeteilt werden. 4.3.1 Konstruktive Verfahren Das Problem der Turnusplanung für eine Fahrergruppe ist in der Literatur oft als „staff scheduling problem“ bezeichnet. Eine ältere Übersicht über die verschiedenen Stufen und Verfahren der Turnusplanung gibt Tien und Kamiyama ([38], S. 279). Dabei wird insbesondere die Möglichkeit dargestellt, Dienst-Frei-Schema- und Schichtart-Planung nacheinander durchzuführen. Für das erste Problem, die Dienst-Frei-Schema-Planung, finden sich bei Baker und Magazine [2] sehr einfache konstruktive Heuristiken, die sowohl einen vorgegebenen Bedarf der Schichtarten an verschiedenen Tagen berücksichtigen als auch eine Gleichverteilung der freien Tage sowie einen Anteil von 50% freier Wochenenden gewährleisten. Eine ausführliche Übersicht verschiedener Dienst-Frei-Schemata, die aus regelmäßigem Wechsel von freien und nicht freien Tagen hervorgehen, findet sich bei Witt [43]. Hier werden zunächst regelmäßige Folgen gebildet, z.B. 6 Arbeitstage – 2 freie Tage oder etwas komplizierter 4 Arbeitstage – 2 freie Tage – 5 Arbeistage – 1 freier Tag. Dieses Schema wird so oft hintereinander gehängt, bis sich eine geschlossene Folge 4 Komplexität und Lösungsansätze 31 für die sieben Wochentage ergibt. Im 4+2, 5+1-Fall ist dies nach 12 Wochen der Fall. Das so erhaltene Schema wird noch derart modifiziert und mit zusätzlichen freien Tagen aufgefüllt, daß sich die gewünschte Verteilung der Turnuskapazität über die Wochentage und ein bestimmter Anteil freier Wochenenden ergibt. Beispiel: Es wird ein 4+2, 5+1-Schema zu Grunde gelegt, das durch die grau schraffierten Felder in der nebenstehenden Abbildung gekennzeichnet ist. Davon ausgehend wird ein Anteil von 50% freier Wochenenden realisiert, indem an einigen schraffierten Positionen ein Frei entfernt und an anderen Positionen neu eingefügt wird. Das resultierende Dienst-Frei-Schema kann an den Tagen Montag bis Freitag jeweils mindestens 9 Dienste und am Wochenende jeweils 6 Dienste aufnehmen. Dieses Schema befindet sich derzeit im Einsatz bei der BSAG. Mo Di Mi Do Fr Sa So Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Frei Abbildung 7: Dienst-Frei-Schema 4+2, 5+1 Eine Trennung von Dienst-Frei-Schema-Generierung und Schichtart-Verteilung wurde auch schon 1968 von Bennett und Potts [4] vorgeschlagen. Das Dienst-Frei-Schema wird dabei mit einem konstruktiven Verfahren erzeugt, bei dem verschiedene Kriterien berücksichtigt werden. Die Kriterien werden dabei allerdings nicht gleichzeitig berücksichtigt, sondern von vornherein in eine Hierarchie gebracht. Ein ähnliches Verfahren wird für die anschließende Verteilung der Schichtarten gewählt. Beachtlich ist, daß in dem relativ alten Modell schon die meisten der heute für wichtig erachteten Kriterien berücksichtigt werden (vgl. Tabelle 22, S. 33). Sogar eine konstante Rollierung ist als Zielkriterium formuliert. Burns und Koop [7] entwickeln ebenfalls ein konstruktives Verfahren, das sogar zusätzlich die optimale Länge des Turnus berechnet. Dann wird ein Schema erzeugt, in dem die Länge der Dienst- und Freiblöcke festgelegt ist. Dabei kann jedem Dienstblock jedoch nur eine Schichtart zugeordnet werden, d.h. jeder Dienstblock besteht aus einer oder mehreren Belegungen der gleichen Schichtart, was die Komplexität erheblich reduziert. 4.3.2 Metaheuristiken Ein für die Turnusplanung recht vielversprechender Ansatz findet sich bei Ernst, Krishnamoorthy und Dowling [15]. Sie benutzen Simulated Annealing zur Turnusplanung für Zugführer in Australien. Dabei generieren sie zunächst eine große Anzahl zulässiger Schichtartfolgen, die jeweils einer Rundreise entsprechen und stets wieder am Startpunkt enden. Diese Schichtartfolgen werden dann mittels des Simulated Annealing in eine Reihenfolge gebracht. Auch wenn im Nahverkehr keine Übernachtungen an fremden Orten nötig sind, ist die Idee übertragbar. 4 Komplexität und Lösungsansätze 32 Über eine andere, der Turnusplanung recht ähnliche Anwendung des Simulated Annealing berichten Dige, Lund und Ravn [11], die Stundenpläne für den Schulunterricht optimieren. Sie formulieren dabei eine Reihe von Kriterien für die Kapazität und die Reihenfolge der Unterrichtseinheiten. Dabei unterscheiden sie in „harte“ (Entscheidungsschranken) und „weiche“ Kriterien (Zielkriterien). 4.3.3 LP-basierte und sonstige Verfahren Belletti und Davini [3] entwickeln einen Ansatz, der die optimale Zuordnung von Schichtartfolgen zu Dienstblöcken über ein Multilevel-Zuordnungsproblem, wie es bei Carraresi und Gallo [8] beschrieben ist, ermöglicht. Dabei wird das Ziel verfolgt, eine ausgeglichene Verteilung der Belastung der Fahrer zu erreichen. Es wird jedoch ein festes Dienst-Frei-Schema vorausgesetzt, z.B. immer fünf Arbeitstage gefolgt von einem freien Tag. Außerdem wird davon ausgegangen, daß die Dienstmasse homogen über alle Tage, einschließlich Samstag und Sonntag, verteilt ist. Dies ist in der Praxis aber nicht der Fall, da am Wochenende in der Regel weniger Dienste anfallen. Belletti und Davini berücksichtigen auch nicht die sich aus der zyklischen Struktur des Turnus ergebende Reduktion des Problems, sondern generieren für jeden Fahrer einzeln einen Turnus. Die negativen Auswirkungen auf die Komplexität beschreibt Hare ([22], S. 5). Er formuliert ein Problem, das auch die meisten der in Kapitel 3.2.1 erwähnten Entscheidungsschranken enthält (vgl. Tabelle 22, S.33). Zusätzlich werden Wünsche der Mitarbeiter berücksichtigt, und es besteht die Möglichkeit, geteilte Wochenenden zu verbieten, so daß entweder Samstag und Sonntag oder keiner der beiden Tage frei sind. Das Problem wird mittels Constraint Programming unter Zuhilfenahme verschiedener Heuristiken gelöst. Hierbei werden keine Zielkriterien berücksichtigt. Das Verfahren beschränkt sich darauf, eine zulässige Lösung zu finden. Kleinschmidt et al. [23] entwickeln ein gemischt ganzzahliges lineares Modell. Dabei werden verschiedene Bedingungen (vgl. Tabelle 22, S.33) eingeführt und mit Hilfe von Schlupfvariablen aufgeweicht, die wiederum mit Kosten bestraft werden. So wird in jedem Fall eine Lösung produziert, die allerdings möglicherweise nicht allen Entscheidungsschranken genügt. Außerdem werden Tests mit nur 3 Schichtarten durchgeführt. Day und Ryan [10] beschäftigen sich mit der Dienstreihenfolgeplanung für nationale Fluggesellschaften. Dabei betrachten sie jedoch nur einen 2-Wochen-Zeitraum, generieren eine Menge zulässiger Dienst-Frei-Schemata und Schichtartfolgen und lösen die beiden Probleme nacheinander als Set-Partitioning-Problem mit einem LP-Solver. Millar und Kiragu [29] modellieren das Problem der Turnusplanung für Krankenschwestern als Netzwerk-Modell. Dabei entspricht jeder Knoten des Netzwerkes einem zulässigen Dienstblock oder einem Freiblock. Jeder Knoten kann mit Kosten bewertet werden. In diese Kosten könnten z.B. Kosten für die Qualität der Rollierung des Dienstblockes einfließen. Zulässige Folgen von Blöcken werden durch Pfeile zwischen den Knoten des Netzwerks gekennzeichnet. Ein Turnus entspricht dann einem Fluß auf diesem Netzwerk. Das Flußproblem ist als lineares Programm formuliert, es sind weitere Entscheidungsschranken ergänzt, die sich nicht durch das Netzwerk-Modell darstellen lassen, und schließlich wird das Problem mit CPLEX gelöst. In dem Modell wären die meisten Kriterien aus Kapitel 3.2 leicht umsetzbar. Lediglich die „Spreizung“ und die Gleichverteilungen würden Probleme bereiten. Zu beachten ist auch, daß die Autoren nur Testergebnisse für zwei Schichtarten präsentieren. Mit der Anzahl der 4 Komplexität und Lösungsansätze 33 Schichtarten wächst aber die Anzahl der möglichen Dienstblöcke und damit auch die Anzahl der Knoten im Netzwerk stark (polynomial) an. Die Anzahl der Pfeile im Netzwerk wächst wiederum quadratisch mit der Anzahl der Knoten. Damit erhöht sich die Anzahl der Variablen in dem zugehörigen linearen Programm bei Betrachtung von mehr als zwei Schichtarten also enorm, so daß fraglich ist, ob in diesem Fall noch Ergebnisse in sinnvoller Zeit erzielt werden können. Die praktische Umsetzung des Netzwerk-Modells ist zudem recht aufwendig. 4.3.4 Vergleich der berücksichtigten Kriterien X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X (X) (X) X X X X X X X X Ernst, et al X Millar, Kiragu X Day, Ryan Burns, Koop X Kleinschmidt Bennett, Potts Kriterien Anzahl freier Tage Bedarf Frei pro Wochentag Mindestanteil freier Wochenenden Minimale Dienstblocklänge Maximale Dienstblocklänge Maximale Freiblocklänge Zulässige Schichtarten Bedarf Schichtarten Schichtartblocklänge Nachtruhe Wochenruhezeit Freiblockbildung Vertikale Gleichverteilung freie Tage Gleichverteilung freie Wochenenden Unterschreitung Schichtart Wunschanteil Schichtart Spreizung Rückwärtsrollierung Standardrollierung Hare Baker X Autoren Belletti, Davini Witt Die folgende Tabelle gibt eine Übersicht über die Berücksichtigung der in Kapitel 3.2 beschriebenen Kriterien in der Literatur. (X) bedeutet dabei, daß das Kriterium zwar nicht modelliert ist, aber das Modell leicht um das Kriterium ergänzt werden könnte. X X X X X X X X X X X X X X (X) (X) (X) (X) (X) X Tabelle 22: Die berücksichtigten Kriterien in der Literatur Aus der Übersicht erkennt man, daß zwar fast alle in Kapitel 3.2 beschriebenen Kriterien bereits von einigen Autoren berücksichtigt, jedoch nie in ihrer Gesamtheit umgesetzt wurden. Die Möglichkeit des Ansatzes dieser Arbeit, gewisse Kriterien zu deaktivieren, erlaubt es, alle oben beschriebenen Probleme abzubilden. Eine Ausnahme bildet lediglich das Problem von Hare [22]. Die nicht abgebildeten Kriterien lassen sich jedoch zumindest bei Verwendung des linearen Ansatzes leicht in das im folgenden Abschnitt vorgestellte Modell ergänzen (siehe 5.3.6). 4 Komplexität und Lösungsansätze 34 4.3.5 Erfolgversprechende Ansätze Da der Ansatz von Kleinschmidt et al. [23] bereits viele der geforderten Kriterien berücksichtigt und die meisten Kriterien ohnehin relativ leicht linear zu formulieren sind, soll das in Kapitel 3.2 geschilderte Problem mit einem linearen Modell gelöst werden. Wenn die optimale Lösung für größere Probleminstanzen nicht in vertretbarer Zeit ermittelt werden kann, besteht die Möglichkeit, das Verfahren nach einer festgelegten Laufzeit abzubrechen und die beste bisher ermittelte Lösung zu benutzen. Um bewerten zu können, wie gut solche suboptimalen Lösungen sind, soll das Problem unabhängig von dem linearen Ansatz auch noch mittels des Simulated Annealing gelöst werden. Dieses Verfahren hat in den letzten Jahren gute Lösungen für verschiedene kombinatorische Optimierungsprobleme gebracht. Bei beiden Ansätzen soll die Generierung von Dienst-Frei-Schema und Schichtart-Belegungen gleichzeitig erfolgen und nicht, wie bei Bennett und Potts [4] und anderen, getrennt werden. Ein optimales Dienst-Frei-Schema hat nämlich keinen optimalen Turnus zur Folge. Es gibt sogar Fälle, in denen sich bestimmte Schichtarten nicht auf ein Dienst-Frei-Schema verteilen lassen. Beispiel: In einem Turnus mit zwei Wochen soll sonntags ein Spätdienst und montags ein Frühdienst verteilt werden. Ist ein Dienst-Frei-Schema mit einem freien Wochenende und einem unmittelbar darauffolgenden freien Montag gewählt (was aus Sicht des Kriteriums „Freiblockbildung“ sinnvoll wäre), so muß der Frühdienst unmittelbar hinter dem Spätdienst plaziert werden. Dadurch entsteht zwangsläufig eine Verletzung der Nachtruhe. Ist der Montag hinter dem freien Wochenende nicht frei, läßt sich der Frühdienst an dieser Stelle problemlos plazieren. Die folgende Abbildung verdeutlicht diesen Fall. (Man beachte die zyklische Gestalt des Turnus!) Abbildung 8: Zusammenspiel von Dienst-Frei-Schema und Schichtart-Bedarf 5 Lösung mittels linearer Programmierung 35 5 Lösung mittels linearer Programmierung In diesem Kapitel soll auf die Lösung der Turnusplanung für eine Fahrergruppe mit Hilfe der linearen Programmierung eingegangen werden. Das beschriebene Problem wird dazu als gemischt ganzzahliges lineares Programm formuliert und mit Hilfe des Solvers CPLEX MIP gelöst. Der Solver verwendet ein Branch-and-Bound-Verfahren, das vorab beschrieben werden soll. Da es in der Regel verschiedene Möglichkeiten gibt, die einzelnen Kriterien in einem linearen Modell zu formulieren, werden in Abschnitt 5.2 einige Hinweise gegeben, wie eine gute Modellierung erfolgen sollte. Die eigentliche Modellbildung erfolgt in Abschnitt 5.3. In den Abschnitt 5.4 und 5.5 wird auf geeignete Strategien eingegangen, die das Branch-and-Bound-Verfahren beschleunigen können. In 5.6 werden abschließend konkrete Ergebnisse vorgestellt. 5.1 Beschreibung des Branch-and-Bound Verfahrens Zunächst soll die Idee des Branch-and-Bound allgemein und anschließend die konkrete Anwendung auf ein gemischt ganzzahliges lineares Problem beschrieben werden. 5.1.1 Allgemeines Prinzip Die Idee des Branch-and-Bound besteht darin, ein Problem, das schwierig zu lösen ist, in mehrere Teilprobleme zu zerlegen, deren Lösung sich einfacher gestaltet. Sei zunächst ein allgemeines Problem der Form (P) min{f(x): x∈ S} gegeben. Dabei sei S eine beliebige Menge. Nun werde die Menge S in mehrere Teilmengen S1,...,Sn zerlegt, so daß S1 ∪ ... ∪ Sn = S. Des weiteren sei zk = min{f(x): x∈ Sk}, also der Optimalwert des k-ten Teilproblems. Dann ist min{f(x): x∈ S} = min{z1,...,zn}, d.h. der optimale Zielfunktionswert des ursprünglichen Problems ergibt sich als Minimum der Optimalwerte der Teilprobleme (vgl. z.B. Nemhauser und Wolsey [30], S.352). Die Zerlegung der Menge S erfolgt im allgemeinen nicht auf einmal, sondern sie findet schrittweise statt. Dabei wird die Menge S zunächst nur in wenige (oftmals zwei) Teilmengen zerlegt, welche dann wiederum zerlegt werden, und so fort. Diese Art der Zerlegung kann als Zerlegungsbaum dargestellt werden (vgl. Abbildung 9, S.37). Zu jedem Zeitpunkt des Verfahrens existieren also Teilmengen Sk von S, die im weiteren Verlauf des Verfahrens noch weiter zu zerlegen sind. Zu jedem Sk gehört das entsprechende Optimierungsproblem (Pk) min{f(x): x∈ Sk}. Pk wird auch als ein Knoten des Zerlegungsbaumes bezeichnet. Eine Menge Sk muß nicht mehr weiter zerlegt werden, wenn einer der folgenden Fälle eintritt: • Es ist eine Lösung des ursprünglichen Problems bekannt, für deren Zielfunktionswert z gilt: z ≤ min{f(x): x∈ Sk} (Dominanz einer bekannten Lösung gegenüber der Lösung von Pk). • Die optimale Lösung des Problems Pk ist gefunden (Optimalität). • Die Menge Sk ist leer, d.h. das Problem Pk ist unzulässig (Unzulässigkeit). Für den ersten der obigen drei Fälle muß das Teilproblem Pk nicht vollständig gelöst werden. Es genügt bereits, wenn erkennbar ist, daß der Zielfunktionswert schlechter 5 Lösung mittels linearer Programmierung 36 als z sein wird. Um eine Abschätzung für den Zielfunktionswert eines Problems Pk zu bekommen, wird eine untere Schranke berechnet, indem ein so genanntes relaxiertes Problem (RPk) gelöst wird. Dieses relaxierte Problem kann aus Pk z.B. durch das Aufweichen der Restriktionsmenge Sk, also durch Weglassen von Nebenbedingungen, entstehen. Wichtig ist dabei lediglich, daß (RPk) schnell und einfach gelöst werden kann. Im folgenden sei x(k) die Optimallösung von (RPk). Dann ist offensichtlich f(x(k)) ≤ min{f(x): x∈ Sk} eine untere Schranke für die Lösung von Pk. Die Ungleichung gilt, weil das relaxierte Problem nur durch Aufweichung der Restriktionsmenge aus Pk entstanden ist. Mit diesen Bezeichnungen läßt sich nun ein allgemeiner Branch-and-Bound-Algorithmus formulieren: Algorithmus „Branch-and-Bound“ Initialisierung Setze IP = {P} und z = ∞ . Schritt 1 Wähle ein Problem Pk∈ IP, löse das entsprechende relaxierte Problem RPk und lösche Pk aus der Menge IP. (k) Die Lösung sei x (falls eine existiert, ansonsten gehe zu Schritt 4. (Unzulässigkeit)) Schritt 2 (k) a) Falls f(x ) ≥ z, dann gehe zu Schritt 4 (Dominanz) (k) b) Falls x ∉ Sk, dann gehe zu Schritt 3. (weitere Zerlegung) (k) c) Falls x ∈ Sk, dann (Optimalität) (k) (k) Falls f(x ) < z, dann setze z := f(x ). (k) Lösche alle Probleme mit f(x ) ≥ z aus IP. Gehe zu Schritt 4. Schritt 3 Bestimme eine Zerlegung Sk1 ∪ ... ∪ Sk n = S k von Sk und füge die entsprechenden Probleme Pk1 ,..., Pkn der Menge IP hinzu. Schritt 4 Falls IP={}, dann Falls z = ∞ , dann existiert keine zulässige Lösung von P. (k) (k) Sonst ist x mit f(x ) = z eine optimale Lösung von P. Sonst Gehe zu Schritt 1. Das z stellt in obigem Algorithmus den Zielfunktionswert der besten bisher bekannten Lösung von P dar. Eine Verallgemeinerung dieses Algorithmus, bei der die untere Schrankenfunktion nicht der Lösung des relaxierten Problems entsprechen muß, findet man bei Nemhauser und Wolsey ([30], S.355). Bei der konkreten Umsetzung eines Branch-and-Bound-Algorithmus sind folgende Freiheiten gegeben: • Welches Problem Pk∈ IP soll als nächstes betrachtet werden? • Wie soll die Restriktionsmenge Sk weiter zerlegt werden? • Wie soll die untere Schranke berechnet werden, bzw. wie wird die Relaxierung von Pk gewählt? 5.1.2 Anwendung auf ein gemischt ganzzahliges lineares Problem Ein gemischt ganzzahliges lineares Programm hat allgemein die Form 5 Lösung mittels linearer Programmierung 37 (MIP) min{cTx: Ax ≤ b, x ≥ 0, xi∈ IN für i∈ K} Dabei seien x, c∈ IRn, A∈ IRmxn, b∈ IRm und K die Menge der Indizes der Variablen, für die Ganzzahligkeit gefordert ist. Für ein solches Problem verwendet der CPLEX MIP-Solver im wesentlichen ein Branch-and-Bound Verfahren. Als relaxiertes Problem wird dabei das Problem gewählt, das sich aus dem ursprünglichen Problem (MIP) durch Weglassen der Ganzzahligkeitsbedingungen ergibt: (RMIP) min{cTx: Ax ≤ b, x ≥ 0} Falls es sich um ein binär-gemischtes lineares Optimierungsproblem der Form (BP) min{cTx: Ax ≤ b, x ≥ 0, xi∈ {0, 1} für i∈ K} handelt, bildet man das relaxierte Problem gemäß (RBP) min{cTx: Ax ≤ b, x ≥ 0, xi ≤ 1 für i∈ K } Es wird also jeweils eine obere Schranke von 1 für alle binären Variablen in das relaxierte Problem aufgenommen. Das relaxierte Problem hat in beiden Fällen die geforderte Eigenschaft, daß es sich verhältnismäßig schnell und einfach lösen läßt, z.B. mit dem Simplex-Algorithmus. Eine genaue Beschreibung des Simplex-Verfahrens findet sich u.a. bei Zionts ([44], insbesondere S.50-65 und 76-86) oder Recht ([32], S.51-59). Zur Zerlegung der Restriktionsmenge Sk wird in der Regel eine Variable xi(k), i∈ K, gewählt, die nicht ganzzahlig belegt ist. Es handelt sich hierbei also um eine Komponente der aktuellen Lösung x(k) von Pk, die die Ganzzahligkeitsbedingung verletzt. Nun werden zwei neue Teilprobleme erzeugt, indem jeweils eine neue Schranke für die Variable xi hinzugefügt wird. Man wählt dabei bzw. x ≥ x . Die aktuelle Lösung wird in xi ≤ x i S x1 = 0 x1 = 1 S1 S2 x2 = 0 S3 x2 = 1 S4 (k ) (k ) i i beiden neuen Teilproblemen unzulässig. Im Fall binärer statt ganzzahliger Variablen entspricht dies der Fixierung der Variablen xi = 0 bzw. xi = 1. Der sich in diesem Fall ergebende Zerlegungsbaum ist in Abbildung 9 beispielhaft dargestellt. Abbildung 9: Zerlegungsbaum Zur konkreten Umsetzung des Branch-and-Bound-Verfahrens sind nun noch zwei Fragen offen: • Welches Problem Pk∈ IP soll als nächstes betrachtet werden? • Welche Variable soll gewählt werden, um die gerade beschriebene Zerlegung der Menge Sk zu realisieren? Zu diesen Fragen wurden eine Reihe verschiedener Strategien entwickelt. Die Auswahl einer solchen Strategie hängt aber stark von der Struktur des Problems ab und wird daher erst nach der Modellierung in Kapitel 5.4 analysiert. 5 Lösung mittels linearer Programmierung 5.2 38 Richtlinien zur Formulierung eines linearen Modells 5.2.1 Allgemeine Aspekte Wertvolle Hinweise, wie ein ganzzahlig lineares Modell formuliert werden sollte, finden sich bei Nemhauser und Wolsey ([30], S.5-17) und bei Williams ([41], S.35-39, 168-190 und besonders 202-224). Dort werden insbesondere die drei folgenden Aspekte genannt: • Möglichkeit einer schnellen Fehlersuche im Modell, • leichte Verständlichkeit des Modells, • effiziente Lösbarkeit des Problems. Das Finden von Fehlern im Modell soll dadurch erleichtert werden, daß das Problem dem Solver CPLEX MIP in Form einer Datei übergeben wird, in der die Zielfunktion und die Nebenbedingungen zeilenweise formuliert sind (sogenanntes LP-Format). Wenn Fehler auftreten, können sie leicht durch „Lesen“ dieser Datei gefunden werden. Das LP-Format ist ein verbreitetes Format zur Formulierung linearer Modelle, so daß auch die meisten anderen LP-Solver eingesetzt werden können. In diesem Fall muß nicht die gesamte Problemdatei, sondern nur die Steuerung des Solvers angepaßt werden. Das LP-Format wird deshalb gewählt, weil andere Datei-Formate, die das Problem spaltenweise formulieren (z.B. MPS-Format), weit weniger übersichtlich sind. Alternativ könnte das Problem auch direkt im Hauptspeicher des Computers übergeben werden. Dies ist unter zeitlichen Gesichtspunkten sicherlich die effizienteste Lösung, hat aber einen enormen Aufwand bei der Suche von Fehlern zur Folge, weil das übergebene Modell nicht „sichtbar“ ist. Die Verständlichkeit des nun als Datei vorliegenden Problems läßt sich durch die Benennung der Konstanten und Variablen beeinflussen. Bei den verwendeten Konstanten handelt es sich im wesentlichen um die bereits in Abschnitt 3.2 eingeführten Parameter. Hierfür werden sprechende Bezeichnungen verwendet, die grundsätzlich mit einem Großbuchstaben beginnen. Für die Variablen werden dagegen Namen gewählt, die sich aus einem oder mehreren Kleinbuchstaben zusammensetzen. Da die Variablen oft in der Formulierung längerer Formeln auftreten, wird hierbei aus Gründen der Übersichtlichkeit darauf geachtet, möglichst kurze Namen zu verwenden. Bei der Effizienz der Lösbarkeit ist zwischen dem ursprünglichen Problem (MIP) bzw. (BP) und dem relaxierten Problem (RMIP) bzw. (RBP) zu unterscheiden. Beim relaxierten Problem handelt es sich um ein reines lineares Problem, dessen Schwierigkeit im wesentlichen von der Anzahl der Variablen und der Anzahl der Nebenbedingungen abhängt. Hierfür gibt es Algorithmen, die in polynomialer Laufzeit zu einer optimalen Lösung gelangen. Auch wenn der verwendete Simplex-Algorithmus exponentielle worstcase-Komplexität hat, liefert er in der Praxis meist schnell die optimale Lösung. Schwieriger als die Lösung des relaxierten Problems gestaltet sich jedoch die Lösung des Gesamtproblems. Da für jedes im Rahmen des Branch-and-Bound-Verfahrens betrachtete Teilproblem ein lineares Problem ganz oder wenigstens teilweise zu lösen ist, ist es von entscheidender Wichtigkeit, die Anzahl zu betrachtender Teilprobleme möglichst gering zu halten. Dies kann einerseits durch adäquate Strategien im Laufe des Verfahrens realisiert werden (Abschnitt 5.4). Andererseits hat aber auch die Wahl der in der Regel nicht eindeutigen Formulierung des linearen Programms Einfluß auf die Anzahl der benötigten Schritte beim Branch-and-Bound. Dabei ist es wichtig, den Lösungsraum des 5 Lösung mittels linearer Programmierung 39 relaxierten Problems möglichst stark einzuschränken, also die Nebenbedingungen so restriktiv wie möglich zu formulieren, um Teilprobleme, die keine ganzzahlige Lösung haben, von vornherein aus den Betrachtungen auszuschließen. CPLEX MIP erzeugt zu diesem Zweck standardmäßig zusätzliche Nebenbedingungen durch Anwendung des Schnittebenenverfahrens. Ziel dabei ist es, den Lösungsraum so weit einzuschränken, daß die Lösung des relaxierten Problems bereits ganzzahlig ist. Dieses Vorgehen beschleunigt die Lösungsfindung zwar, ist jedoch kein wesentlicher Bestandteil des Branch-and-Bound-Verfahrens. Darum wird hierzu auf die Literatur, z.B. Nemhauser und Wolsey ([30], S. 367ff), verwiesen. 5.2.2 Verwendung binärer Variablen Um Entscheidungen aus der Realität zu modellieren, werden oft binäre Variablen als Entscheidungsvariablen verwendet. Diese Variablen können nur die Werte 0 oder 1 annehmen und werden daher auch als 0-1-Variablen bezeichnet. Die Belegung mit dem Wert 1 entspricht dabei zum Beispiel der Entscheidung für und die Belegung mit 0 der Entscheidung gegen eine Alternative. Stehen mehr als zwei Entscheidungsalternativen zur Auswahl, so kann dies entweder durch eine ganzzahlige Variable (IntegerVariable), die die Werte 0,1,...,n annehmen kann, oder durch mehrere binäre Variablen modelliert werden. Da im folgenden Modell keine solchen Integer-Variablen verwendet werden, wird hier nur auf die Literatur verwiesen, z.B. Williams ([41], S.168-174). Allgemeiner können 0-1-Variablen auch als sogenannte Indikatorvariablen verwendet werden. Ähnlich wie oben entspricht die Belegung mit 1 dann wieder dem Eintreten eines Ereignisses und 0 dem Nicht-Eintreten des Ereignisses. Im Zusammenhang mit solchen Ereignissen treten oftmals logische Bedingungen für diese Ereignisse auf, die mit Hilfe der binären Variablen modelliert werden müssen. Zur einfachen Notation und zur Erklärung der Modellierungstechniken seien X1, X2,... Ereignisse und x1, x2,... die zugehörigen Indikatorvariablen. Bezeichnung logische Bedingung Modellierung „Oder“ X1 oder X2 „Exklusiv-Oder“ „Und“ „Nicht“ Implikation entweder X1 oder X2 X1 und X2 nicht X1 X1 ⇒ X2 X1 ó X2 x1 + x 2 ≥ 1 x1 + x 2 = 1 x1 = 1, x2 = 1 x1 = 0 (bzw. 1 – x1 = 1) x1 – x2 ≤ 0 x1 - x2 = 0 Äquivalenz Tabelle 23 Die Modellierung von „Und“- und „Oder“-Beziehungen läßt sich natürlich auch anwenden, falls mehr als zwei Ereignisse verknüpft werden sollen. Ein einfaches Beispiel stellt die Nebenbedingung 5.3.2.1 dar. Bei der Implikation müssen die Ereignisse X1 und X2 nicht streng binär modelliert sein. Es genügt, wenn die folgenden Bedingungen gelten: (1) x1 = 1, falls das Ereignis X1 eintritt, (2) x1 ≤ 0, falls das Ereignis X1 nicht eintritt, (3) x2 ≥ 1, falls das Ereignis X2 eintritt und (4) 0 ≤ x2 < 1, falls das Ereignis X2 nicht eintritt. 5 Lösung mittels linearer Programmierung 40 Daß das Ereignis X1 ⇒ X2 auch in diesem Fall durch x1 – x2 ≤ 0 modelliert werden kann, macht man sich einfach durch die Überprüfung aller vier Fälle klar. Damit muß nun also nicht mehr für jedes Ereignis eine Indikatorvariable eingeführt werden, sondern die Ereignisse X1 und X2 bei einer Implikation können auch bereits Verknüpfungen verschiedener anderer Ereignisse sein, ohne daß zusätzliche Variablen benötigt werden, die das Modell nur unnötig vergrößern würden. Die Anwendung einer solchen Implikation findet sich z.B. in Abschnitt 5.3.2.5 und ist dort auch ausführlich beschrieben. Um kompliziertere Verknüpfungen der Beziehungen aus Tabelle 23 zu vereinfachen, existieren einige Regeln, auf die hier jedoch nicht eingegangen werden soll. Sie sind zum Beispiel bei Williams ([41], S.174-179) erläutert. Eine Beschreibung komplexerer Modellierungstechniken für logische Beziehungen findet sich bei Williams und Brailsford ([42], insbesondere S.253-258 und 262-264). 5.2.3 Modellierung der Betragsfunktion Häufig tritt bei der Aufstellung eines linearen Programms das Problem auf, die Betragsfunktion zu modellieren, um zum Beispiel die betragsmäßige Abweichung von einem vorgegebenen Wert zu messen. Sei hierzu x ≥ 0 die Variable, die den Betrag eines beliebigen Ausdrucks A messen soll (|A|). Dann ergänzt man die Nebenbedingungen (5) x ≥ A und (6) x ≥ –A und fügt das x in die Zielfunktion ein: (7) Minimiere x. Im Optimum nimmt x dann den kleinstmöglichen Wert an, der gerade noch die beiden Nebenbedingungen erfüllt, also den Wert der Betragsfunktion. 5.3 Formulierung des Modells Zunächst werden einige neue Indexmengen benötigt. Die Menge T der Tage und die Menge I der Schichtarten werden weiterhin benutzt. Eine vollständige Auflistung der verwendeten Indexmengen findet sich im Symbolverzeichnis. Indexmenge Beschreibung Indexmenge über alle Matrixeinträge des Turnus, wobei der Turnus zeilenweise durchlaufen wird. W = {w: w=0,..., Wochen–1} Indexmenge über die Zeilen eines Turnus. J = {j: j=0,..., 7⋅Wochen–1} Tabelle 24 Im folgenden Modell ist darauf geachtet worden, bei allen auftretenden Formeln die gewählte Indizierung so weit wie möglich einzuhalten. Der Index i steht in der Regel für eine Schichtart, j für einen Matrixeintrag, t für einen Tag und w für eine Woche. Die Indizes k und m werden für verschiedene Kategorien verwendet, meist als zusätzliche Indizes für die Summenbildung. Bei mehrfach indizierten Variablen werden die Indizes genau dann durch ein Komma getrennt, wenn mindestens einer der Indizes eine Formel ist. Bei der Indexmenge J wird (auch wenn dies in der Formel nicht explizit erwähnt ist) jeweils „mod (7⋅Wochen)“ gerechnet, so daß sich stets ein zulässiger Matrixeintrag ergibt und die zyklische Gestalt des Turnus berücksichtigt wird. Für j = (7⋅Wochen–1) 5 Lösung mittels linearer Programmierung 41 gilt also j + 1 = 0. Damit folgt hinter dem letzten Matrixeintrag wieder der erste Matrixeintrag des Turnus. Ebenso wird bei der Indexmenge W „mod Wochen“ gerechnet, d.h. (Wochen–1) +1 = 0. Zusammenfassend ist die Verwendung der Indizes für einen Turnus in dem folgenden Schaubild dargestellt: t=0 t=1 t=2 t=3 t=4 t=5 t=6 w=0 j=0 j=1 j=2 j=3 j=4 j=5 j=6 w=1 j=7 j=8 j=9 j=10 j=11 j=12 j=13 w = Wochen–1 j = 7⋅(Wochen–1) j = 7⋅Wochen–1 Abbildung 10: Indizes eines Turnus Nun werden alle Kriterien aus Abschnitt 3.2 wieder aufgegriffen und in einem linearen Modell formuliert. Dabei werden aus den Entscheidungsschranken Nebenbedingungen, und zu jedem Zielkriterium wird eine Kostenfunktion formuliert. Der Bestimmung einer optimalen Lösung entspricht dann die Lösung des linearen Programms, wobei die Zielfunktion aus der gewichteten Summe der einzelnen Kostenfunktionen besteht und minimiert werden soll. 5.3.1 Variablen Die Codierung der Belegungen eines Turnus kann am einfachsten über binäre Entscheidungsvariablen erfolgen, wobei für jeden Matrixeintrag und für jede mögliche Belegung eine eigene Variable existiert. Dazu sei für alle i∈ I, j∈ J 1, falls Matrixeintrag j mit Schichtart i belegt ist x ij = 0, sonst. 1, falls Matrixeintrag j frei ist x0j = 0, sonst. Die Belegung „Frei“ wird also formal genau wie eine Schichart behandelt. Alternativ wäre auch die von Hare ([22], S.5) vorgeschlagene Repräsentation jedes einzelnen Matrixeintrages durch eine ganzzahlige Variable anstatt durch mehrere binäre möglich. Dadurch ist zwar automatisch gesichert, daß jeder Matrixeintrag nur einmal belegt ist, es ergeben sich aber enorme Probleme bei der Modellierung der Kriterien, die die Reihenfolge der Schichtarten bewerten, z.B. Schichtartblocklänge (vgl.5.3.2.10) oder Standardrollierung (vgl.5.3.3.8). Im Laufe der Modellierung werden noch weitere binäre und reellwertige Variablen eingeführt. Für diese Variablen gilt stets die Nichtnegativitätsbedingung, auch wenn sie nicht jedesmal explizit angegeben wird. 5 Lösung mittels linearer Programmierung 42 5.3.2 Nebenbedingungen 5.3.2.1 Genau eine Belegung Jedem Matrixeintrag im Turnus darf nur eine Belegung zugeordnet werden, nämlich eine Schichtart oder Frei. Es handelt sich hierbei um eine Exklusiv-Oder-Verknüpfung von mehreren Entscheidungsvariablen, die durch die folgende Nebenbedingung repräsentiert wird. (8) ∑x x0j + = 1 ∀ j ∈ J. ij i∈ I 5.3.2.2 Anzahl freier Tage Die Anzahl der freien Tage ist durch die Summe der Entscheidungsvariablen für „Frei“ beschrieben, wobei über alle Matrixeinträge summiert wird. (9) ∑x 0j = AnzFrei j∈ J 5.3.2.3 Bedarf Frei pro Wochentag Die Frei-Bedarfe pro Wochentag werden genauso wie die Gesamtzahl freier Tage in eine Ungleichung umgesetzt. Summiert wird hierbei jedoch nur über die zu einem bestimmten Wochentag t gehörenden Matrixeinträge. Da Überschreitungen des FreiBedarfes pro Wochentag erlaubt sind, wird das „=“ durch „≥“ ersetzt. (10) ∑x w∈ W 0, 7⋅w + t ≥ FreiBedarft ∀ t∈ T 5.3.2.4 Mindestanteil freier Wochenenden Um den Anteil der freien Wochenenden zu sichern, wird eine Indikatorvariable für jedes Wochenende eingeführt, die genau dann den Wert 1 annimmt, wenn das Wochenende frei ist, und den Wert 0, wenn mindestens ein Tag des Wochenendes nicht frei ist. Hierzu können die gleichen Indikatorvariablen dofj verwendet werden, die auch von der Kostenart Freiblockbildung benutzt werden. Diese werden allerdings erst in Abschnitt 5.3.3.1 definiert. Da durch den reellwertigen Parameter „AntWoE“ nicht ganzzahlige Anzahlen für die freien Wochenenden entstehen können, wird jeweils der nächstgrößere ganzzahlige Wert gefordert, was auch schon durch den Begriff „Mindestanteil“ zum Ausdruck kommt. (11) ∑ dof w∈ W 7⋅w + 5 ≥ Wochen ⋅AntWoE Auf der linken Seite der Ungleichung steht dabei die (aktuelle) Anzahl der freien Wochenenden und auf der rechten Seite der sich aus der Anzahl der Wochen und dem Anteil der freien Wochenenden ergebende Soll-Wert, der aufgerundet wird. Das Aufrunden des Wertes stellt eine nicht-lineare Operation dar. Diese Operation wird aber nur auf Parameter angewendet, die zwar flexibel vom Benutzer definierbar sind, zum Zeitpunkt der Aufstellung des linearen Programms jedoch als Konstanten feststehen, so daß der Wert der nicht-linearen Funktion im Voraus berechnet werden kann. Ähnliche nicht-lineare Funktionen werden auch in den folgenden Abschnitten verwendet. Durch die unterschiedliche Schreibweise von Parametern, Konstanten (Großbuchstaben) und Variablen (Kleinbuchstaben) kann man jedoch leicht überprüfen, daß die 5 Lösung mittels linearer Programmierung 43 nicht-linearen Funktionen keine Variablen enthalten und somit die Linearitätsbedingung des Modells nicht verletzen. 5.3.2.5 Minimale Dienstblocklänge Wenn auf einen mit Frei belegten Matrixeintrag ein nicht freier Matrixeintrag folgt, dann dürfen auch die MinDBL–1 folgenden Matrixeinträge nicht frei sein. Bei dieser Entscheidungsschranke handelt es sich um eine Kombination von UndVerknüpfung, Nicht-Verknüpfung und Implikation. Das Ereignis X1 := „Matrixeintrag j frei und Matrixeintrag j+1 nicht frei“ läßt sich mit den oben eingeführten Entscheidungsvariablen als x0j + (1 – x0,j+1) – 1 modellieren. Dann gilt (12) x0j + (1–x0,j+1) – 1 = 1, falls das Ereignis eintritt und (13) x0j + (1–x0,j+1) – 1 ≤ 0 sonst. Man beachte das „≤“! Hierbei handelt es sich um die Modellierung einer UndVerknüpfung, denn das Ergebnis ist nur dann 1, wenn beide Teilereignisse eintreten. Das Ereignis X2 := „Matrixeintrag j+2 nicht frei und ... und Matrixeintrag j+MinDBL nicht frei“ kann durch die Gleichungen (14) 1 – x0,j+2 = 1, ..., 1 – x0,j+MinDBL = 1 modelliert werden. Dies ist aufgrund der Nichtnegativität der Entscheidungsvariablen gleichbedeutend mit MinDBL (15) ∑ 1− k =2 x 0, j+ k = MinDBL – 1, d.h. alle Summanden auf der linken Seite der Gleichung müssen 1 sein. Umgeformt ergibt sich unter der Annahme MinDBL ≥ 2: (16) MinDBL 1 ⋅ 1 − x 0, j + k = 1 MinDBL − 1 k = 2 ∑ Wegen x0j∈ {0, 1} gilt stets (17) 0≤ MinDBL 1 ⋅ 1 − x 0, j + k ≤ 1. MinDBL − 1 k = 2 ∑ Damit sind die in Abschnitt 5.2 genannten Voraussetzungen (vgl. (1)-(4), S.39) erfüllt, und die Implikation X1 ⇒ X2 läßt sich wie in Tabelle 23 modellieren: (18) x0j + (1 – x0,j+1) – 1 – MinDBL 1 ⋅ 1 − x 0 , j+ k ≤ 0 MinDBL − 1 k =2 ∑ Falls X1 nicht eintritt, ist (18) wegen (13) und (17) stets erfüllt, unabhängig von X2. Falls das Ereignis X1 jedoch eintritt, ergibt sich aus (18) und (12) sofort (19) MinDBL 1 ⋅ 1 − x 0, j + k ≥ 1, MinDBL − 1 k = 2 ∑ woraus zusammen mit (17) unmittelbar (16) folgt, also wie gewünscht das Ereignis X2. Aus (18) ergibt sich nach einigen Äquivalenzumformungen die folgende Ungleichung, die nun als Nebenbedingung für alle Matrixeinträge j∈ J formuliert ist: MinDBL (20) (MinDBL–1)⋅x0j + (1–MinDBL)⋅x0j+1 + ∑x k =2 0, j+ k ≤ MinDBL – 1 ∀ j∈ J (MinDBL ≥ 2) 5 Lösung mittels linearer Programmierung 44 Die obige Annahme MinDBL ≥ 2 ist weiterhin wichtig, obwohl der Term MinDBL – 1 nicht mehr im Nenner auftaucht. Für den Fall MinDBL = 1 werden die Nebenbedingungen (20) einfach weggelassen, da dies der kleinstmögliche Wert ist, und somit keine Einschränkungen für die minimale Dienstblocklänge vorliegen (vgl. Tabelle 6 in Abschnitt 3.2.1.5). Die Modellierung der Verknüpfung logischer Beziehungen wurde hier am Beispiel der minimalen Dienstblocklänge sehr ausführlich erläutert. Entsprechende Techniken werden im folgenden immer wieder verwendet, ohne sie jedesmal explizit und mit dieser Ausführlichkeit zu beschreiben. Eine alternative, recht aufwendige Möglichkeit, die minimale Dienstblocklänge zu realisieren, ist es, alle kürzeren Dienstblöcke zu verbieten: m− 1 (21) x0j + x0,j+m – ∑x k =1 0 , j+ k ≤ 1 ∀ j∈ J, m = 2,..., MinDBL (falls MinDBL ≥ 2). Durch diese Nebenbedingungen werden zwei freie Einträge (x0j + x0,j+m) verboten (≤ 1), zwischen denen die Anzahl der Matrixeinträge kleiner als MinDBL ist, außer wenn dazwischen weitere freie Belegungen liegen. Die zweite Variante ist zwar auf den ersten Blick einfacher, benötigt jedoch (MinDBL – 1)⋅Wochen Nebenbedingungen (falls MinDBL ≥ 2), während die erste Variante mit „Wochen“ Nebenbedingungen auskommt. Im folgenden soll an einem einfachen, sehr speziellen Beispiel dargestellt werden, wie sich der Lösungsraum des relaxierten Problems entwickelt: Sei MinDBL = 3. Dann ergeben sich am Matrixeintrag j die Nebenbedingungen: 1.Variante 2.Variante (22) 2⋅xoj–2⋅x0,j+1+x0,j+2+x0,j+3 ≤ 2 (23) x0j+x0,j+2–x0,j+1 ≤ 1 x0j+x0,j+3–x0,j+1–x0,j+2 ≤ 1 Sei nun z = x0j–x0j+1. Dann sind die obigen Nebenbedingungen jeweils äquivalent zu : (24) 2⋅z+x0,j+2+x0,j+3 ≤ 2 (25) z+x0,j+2 ≤ 1 z+x0,j+3–x0,j+2 ≤ 1 Die zulässigen Bereiche sind in Abhängigkeit von z∈ [0, 1] in der folgenden Abbildung skizziert. Für z∈ [–1, 0[ stellen die Nebenbedingungen keine weitere Einschränkung des zulässigen Bereiches dar. x0,j+3 x0,j+3 1 2⋅(1–z) 1 1–z x0,j+2 0 1 Abbildung 11: Zulässige Bereiche x0,j+2 0 1–z 1 5 Lösung mittels linearer Programmierung 45 Die zulässigen Bereiche sind verschieden, und es ist auf Anhieb nicht ersichtlich, welche Variante für die Lösung des Problems besser geeignet ist. Hierüber brachten auch Testläufe keinen Aufschluß. Es wurde also Variante 1 gewählt, weil sie mit weniger Nebenbedingungen auskommt. 5.3.2.6 Maximale Dienstblocklänge Um die Länge eines Dienstblockes auf MaxDBL zu begrenzen, wird jeweils eine Folge von Matrixeinträgen der Länge MaxDBL+1 betrachtet. Die maximale Dienstblocklänge ist genau dann eingehalten, wenn in jeder dieser Folgen mindestens eine Belegung mit Frei auftritt. MaxDBL (26) ∑x k =0 0, j+ k ≥ 1 ∀ j ∈ J. 5.3.2.7 Maximale Freiblocklänge Es werden alle Folgen von freien Matrixeinträgen der Länge MaxFBL+1 verboten. MaxFBL (27) ∑x k =0 0 , j+ k ≤ MaxFBL ∀ j ∈ J. 5.3.2.8 Zulässige Schichtarten Um einzelne Schichtarten in einem Turnus nicht zuzulassen, gibt es zwei Möglichkeiten. Man kann die verbotenen Schichtarten gar nicht in die Menge I der Schichtarten aufnehmen, was sicherlich die beste Lösung darstellt. Um aber nicht bei jedem Optimierungslauf die Schichtarten neu numerieren zu müssen, ist es auch möglich, eine verbotene Schichtart i an jedem Matrixeintrag explizit zu verbieten. Dies kann zum Beispiel geschehen durch Nebenbedingungen der Form (28) xij = 0 ∀ j∈ J. Ein guter LP-Solver erkennt automatisch, daß diese fixierten Variablen xij nicht relevant sind, und entfernt sie aus dem Modell, bevor die eigentliche Optimierung gestartet wird. 5.3.2.9 Bedarf Schichtarten Die Schichtart-Belegungen müssen an jedem Wochentag t∈ T die Bedarfe für die einzelnen Schichtarten i∈ I erfüllen. (29) ∑x w∈ W i, 7⋅w + t ≥ SABedarfit ∀ i∈ I, t∈ T Auf der linken Seite der Ungleichung steht dabei der aktuelle Istwert und auf der rechten Seite der Bedarf. 5.3.2.10 Schichtartblocklänge Die Nebenbedingung ist genau dann erfüllt, wenn es keine Folge von Matrixeinträgen der Länge SABL+1 gibt, die alle mit der gleichen, schweren Schichtart belegt sind. Also werden solche Folgen verboten. Die Modellierung entspricht genau der für die maximale Freiblocklänge (vgl. 5.3.2.7). SABL i (30) ∑x k =0 i , j+ k ≤ SABL i ∀ j ∈ J , i ∈ Ischwer . Man beachte, daß SABLi ≥ 1 für alle i∈ Ischwer gilt (vgl. 3.2.1.10). 5 Lösung mittels linearer Programmierung 46 5.3.2.11 Nachtruhe Zur Überprüfung, ob die Nachtruhe zwischen zwei Schichtarten i und k eingehalten ist, wird die Bedingung (31) 1440 – EZi + AZk ≥ NR geprüft. 1440 = 24⋅60 entspricht dabei 24:00 Uhr, so daß 1440 – EZi die Ruhezeit bis 24:00 Uhr beschreibt. Diese kann bei einem Nachtdienst auch negativ werden. Für jede Schichtart i wird anhand deren Anfangs- und Endzeiten überprüft, welche Schichtarten nicht auf die Schichtart i folgen dürfen, weil sie die Nachtruhe verletzen würden. Seien diese Schichtarten mit I(i) bezeichnet. Dann sichert die folgende Nebenbedingung die Nachtruhe: x ij + (32) ∑x k∈I(i) k , j+ 1 ≤ 1 ∀ j∈ J, i∈ I Man beachte, daß der Parameter „Nachtruhe“ (NR) zwar nicht explizit in der Formel auftaucht, jedoch über die Bildung der Mengen I(i) implizit berücksichtigt wird. Verändert der Benutzer den Parameter, ändern sich die Mengen I(i) und damit auch das Modell. In den Ungleichungen (32) ist wieder die Implikation wie in Tabelle 7, Abschnitt 5.2.2 umgesetzt. Deutlicher wird dies, wenn man die 1 auf die linke Seite bringt: x ij − 1 − x k , j+ 1 ≤ 0 ∀ j∈ J, i∈ I k∈I(i) Die Ungleichungen (33) lassen sich wie folgt lesen: „Wenn Matrixeintrag j die Schichtart i enthält, dann darf Matrixeintrag j+1 nicht die Schichtart k∈ I(i) enthalten.“ Schichtarten, zwischen denen die Nachtruhe nicht eingehalten wird, dürfen auch nicht mit einem Frei dazwischen auftreten: (33) ∑ (34) x ij + x 0,j+ 1 + ∑x k∈ I( i ) k, j + 2 ≤ 2 ∀ j∈ J, i∈ I Alternativ wäre es auch möglich, für jedes verbotene Paar von Schichtarten (i, k) das Aufeinanderfolgen zu verbieten. Dann hätte man (35) x ij + x k , j+ 1 ≤1 ∀ j∈ J, i∈ I, k∈ I(i) bzw. x ij + x 0, j+ 1 + x k , j+ 2 ≤ 2 ∀ j∈ J, i∈ I, k∈ I(i). (36) Dadurch würde sich aber die Zahl der Nebenbedingungen und auch die Zahl der Elemente ungleich 0 in der Matrix, die die Nebenbedingungen repräsentiert, unnötig erhöhen. Außerdem schränkt diese Variante den Lösungsraum des relaxierten Problems weniger ein, ist also in jeder Hinsicht ungünstiger als die erste Version. Ein Punkt des Lösungsraumes mit xij = 0,5 und xk,j+1 = 0,5 für alle k∈ I(i) würde nämlich die Ungleichungen (35) erfüllen, während er nach Ungleichung (33) für |I(i)| ≥ 2 unzulässig wäre (vgl. Williams [41], S.209). Eine dritte Möglichkeit der Modellierung käme sogar mit zwei Nebenbedingungen pro Matrixeintrag aus. Die Ungleichungen (32) könnten dann z.B. durch (37) − ∑ EZ i∈ I i ⋅x ij + 1440 + ∑ AZ i∈ I i ( ) ⋅x i, j+ 1 + max {EZ i } − 1440 − min { AZ i } + NR ⋅x i, j+ 1 ≥ NR i∈I i∈I ∀ j∈ J ersetzt werden. Dabei wird mit den ersten drei Summanden die Nachtruhe berechnet (vgl. (31)). Diese soll größer als die rechte Seite sein. Der Term in Klammern 5 Lösung mittels linearer Programmierung 47 sorgt dafür, daß die Nebenbedingung auch dann erfüllt ist, wenn der Matrixeintrag j+1 frei ist. Ähnlich könnten auch die Ungleichungen (34) ersetzt werden. 5.3.2.12 Wochenruhezeit Die geforderte Ruhezeit in jedem 2-Wochen-Block kann auf verschiedene Arten gewährleistet werden. Da der Parameter WRZ maximal auf 72 Stunden gesetzt werden kann, genügt ein Dreifachfrei immer, wobei unterstellt wird, daß die späteste Schichtart (also in der Regel die Nachtschicht) nicht später endet als die frühste Schichtart (FDF) beginnt. Dies ist normalerweise erfüllt. Bei einem Einzel- oder Doppelfrei hängt die Einhaltung der Wochenruhezeit von den Schichtarten vor und nach dem Frei ab. Für diesen Fall wird für jeden Matrixeintrag j∈ J eine neue binäre Variable wrzj∈ {0, 1} eingeführt, die den Wert 0 annehmen soll, wenn die Wochenruhezeit an dem entsprechenden Matrixeintrag nicht eingehalten wird. Dabei ist zu beachten, daß eine Ruhezeit immer zu der Woche gehört, in der das erste Frei liegt. Die Variable wrzj (j∈ J) darf also nur dann den Wert 1 annehmen, wenn der Matrixeintrag j Frei ist und der Matrixeintrag j–1 nicht. Diese Implikation wird durch (38) wrzj – (1 – x0,j-1) ≤ 0 ∀ j∈ J und (39) wrzj – x0j ≤ 0 ∀ j∈ J modelliert. Nun wird ähnlich wie bei der Nachtruhe für jede Schichtart i geprüft, ob die Wochenruhezeit eingehalten wird, wenn auf die Schichtart i zunächst ein einzelnes Frei und schließlich die Schichtart k folgt. Es sei I (i) ⊆ I die Menge aller Schichtarten, für die dies nicht gilt. Betrachtet werden also Folgen von Belegungen der Form Schichtart i – Frei – Schichtart k, wobei k∈ I (i) . x i, j− 1 + wrz j + (40) ∑x k , j+ 1 ≤ 2 ∀ j∈ J, i∈ I k∈I(i) Wie schon bei der Nachtruhe (vgl. 5.3.2.11) fließt der Parameter WRZ wieder über die Menge I (i) in (40) ein. Wenn der Matrixeintrag j–1 mit der Schichtart i belegt ist und der Matrixeintrag j+1 mit einer Schichtart k∈ I (i), so daß die Wochenruhezeit an dieser Stelle nicht gewährleistet werden kann, so ist x i, j− 1 + ∑x k , j+ 1 = 2, womit aus (40) wie gewünscht wrzj = 0 folgt. Da k∈I(i) x i , j− 1 + ∑x k , j+ 1 ≤ 2 stets erfüllt ist, stellen die Ungleichungen (40) ansonsten keine k∈I(i) weitere Einschränkung dar. Wenn auch der Matrixeintrag j+1 frei ist, folgt wegen ∑x k , j+ 1 = 0 aus (40) nur wrzj ≤ 1. In diesem Fall ist noch zu prüfen, ob die k∈I(i) Wochenruhezeit durch ein Doppelfrei erfüllt ist. Dies geschieht ganz analog zu (40), wobei die Menge I (i) ⊆ I die Menge aller Schichtarten sei, die durch eine Folge Schichtart i – Frei – Frei – Schichtart k∈ I (i) die Wochenruhezeit nicht erfüllen. (41) x i, j− 1 + wrz j + ∑x k , j+ 2 ≤ 2 ∀ j∈ J, i∈ I k∈ I(i) In den Zeilen der folgenden Tabelle sind die verschiedenen möglichen Belegungen der Matrixeinträge mit ihren Auswirkungen auf die Variable wrzj systematisch dargestellt. 5 Lösung mittels linearer Programmierung 48 Dabei sei Matrixeintrag j–1 mit der Schichtart i belegt. Ein „?“ bedeutet, daß die Belegung keine Auswirkung hat. Matrixeintrag j Matrixeintrag j+1 Matrixeintrag j+2 maximal möglicher Wert für wrzj nicht Frei Frei ? ∈ I (i) ? ? 0, wegen (39) 0, wegen (40) Frei ∈ I \ I (i) ? Frei Frei ∈ I (i) 1, Wochenruhezeit durch Einzelfrei erfüllt 0, wegen (41) Frei Frei ∈ I \ I (i) Frei Frei Frei 1, Wochenruhezeit durch Doppelfrei erfüllt 1, Wochenruhezeit durch Dreifachfrei erfüllt Tabelle 25 Die Anforderung, in jedem 2-Wochen-Block mindestens eine Ruhezeit der geforderten Länge zu haben, ergibt sich dann aus den folgenden Nebenbedingungen: 13 (42) ∑ wrz j =0 7⋅w + j ≥ 1 ∀ w∈ W 5.3.2.13 Wochenruhezeit als Doppelfrei Soll der Fall ausgeschlossen werden, daß eine Wochenruhezeit durch ein Einzelfrei gewährleistet wird, kann dies modelliert werden, indem die Ungleichungen (39) durch die folgenden Nebenbedingungen ergänzt werden: (43) wrzj – x0,j+1 ≤ 0 ∀ j∈ J In Verbindung mit (39) wird so gesichert, daß wrzj nur dann den Wert 1 annehmen kann, wenn sowohl Matrixeintrag j als auch j+1 mit Frei belegt sind. Die Ungleichungen (40) sind in diesem Fall nicht mehr nötig. Aus Gründen der Vollständigkeit werden wieder alle Fälle tabellarisch dargestellt, wobei wie zuvor vorausgesetzt sei, daß Matrixeintrag j–1 mit Schichtart i belegt ist. Matrixeintrag j Matrixeintrag j+1 Matrixeintrag j+2 maximal möglicher Wert für wrzj nicht Frei ? Frei ? nicht Frei Frei ? ? Frei Frei ∈ I \ I (i) Frei Frei Frei ∈ I (i) 0, wegen (39) 0, wegen (43) 0, wegen (41) 1, Wochenruhezeit durch Doppelfrei erfüllt 1, Wochenruhezeit durch Dreifachfrei erfüllt Tabelle 26 5.3.3 Kostenfunktionen Im folgenden wird nun für jedes Zielkriterium aus Kapitel 3.2.2 eine Kostenfunktion definiert. Die Kosten sollen stets nicht negativ sein, und ihre Höhe soll ein Maß dafür 5 Lösung mittels linearer Programmierung 49 darstellen, wie gut das entsprechende Kriterium eingehalten wurde, wobei geringere Kosten eine bessere Einhaltung bedeuten. Man könnte die Kosten also auch als „Strafkosten“ bezeichnen, deren Wert im Idealfall gleich 0 ist. Die Kostenfunktionen werden jeweils zunächst verbal formuliert, dann mit Hilfe einer Formel ausgedrückt und schließlich in das lineare Programm eingebaut. Die Werte der einzelnen Kostenfunktionen im linearen Programm werden dabei durch eine Summe von Variablen repräsentiert. Damit die entsprechenden Variablen in der abschließenden Lösung auch den gewünschten Wert annehmen, genügt es in der Regel, untere Schranken zu formulieren. Da die Zielfunktion minimiert wird, nehmen die Variablen im Optimum genau den Wert der größten unteren Schranke an. Für Variablen, die mit negativem Vorzeichen in die Zielfunktion eingehen, sind entsprechend obere Schranken zu formulieren. Um die Nebenbedingungen lesbar zu gestalten, steht bei größeren Formeln die Variable, die die Kosten mißt, auf der linken und die untere Schranke auf der rechten Seite der Ungleichung. Hier wird von dem üblichen Vorgehen abgewichen, Variablen nach links und Konstanten nach rechts zu schreiben. 5.3.3.1 Freiblockbildung Kostenfunktion: Um die Freiblockbildung zu begünstigen, genügt es, das Auftreten von Doppelfreis (vgl. 1.4.11) zu belohnen. Da Freiblöcke mit einer Länge größer als 2 aus mehreren Doppelfreis bestehen, werden diese dann automatisch mit zunehmender Länge stärker belohnt. Ein Dreifachfrei besteht entsprechend aus 2 Doppelfreis, wird also zweimal so stark belohnt wie ein Doppelfrei. Falls bei der Begünstigung von größeren Freiblöcken ein Degressionseffekt auftreten soll, besteht eine einfache Möglichkeit darin, Dreifachfreis zu bestrafen, und zwar mit Kosten, die betragsmäßig um den Faktor DF („Degressionsfaktor“) geringer sind als die Kosten, mit denen ein Doppelfrei belohnt wird. Beispiel: Jedes Doppelfrei werde mit 1 belohnt. Der Degressionsfaktor sei auf DF = 0,75 gesetzt. In einem Dreifachfrei treten zwei Doppelfreis auf, also beträgt die Summe der Belohnungen 2. Gleichzeitig wird das Dreifachfrei jedoch mit Kosten von 0,75 bestraft. Ein Dreifachfrei hätte also negative Kosten von 1,25. Weitere Kostenwerte für dieses Beispiel sind in der folgenden Tabelle dargestellt: negative Freiblocklänge Anzahl der Anzahl der enthaltenen enthaltenen Kosten Doppelfreis Dreifachfreis (Belohnung) 2 3 4 5 6 1 2 3 4 5 0 1 2 3 4 1 1,25 1,5 1,75 2 Tabelle 27 Damit keine negativen Kosten entstehen, wird zu der Kostenfunktion die Anzahl freier Tage im Turnus (AnzFrei) addiert. 5 Lösung mittels linearer Programmierung 50 „Kosten Freiblockbildung“ = AnzFrei + DF ⋅" Anzahl Dreifachfreis" − " Anzahl Doppelfreis" Modellierung: Für jeden Matrixeintrag wird eine binäre Indikatorvariable „dofj“ eingeführt, die genau dann den Wert 1 annehmen soll, wenn der Matrixeintrag j und der folgende Matrixeintrag j+1 beide frei sind: 1, falls Matrixeintrag j und der folgende Matrixeintrag j + 1 beide frei sind dof j = 0, sonst. Dies wird durch die folgenden Nebenbedingungen realisiert: (44) dofj – x0j ≤ 0 ∀ j∈ J (45) dofj – x0,j+1 ≤ 0 ∀ j∈ J (46) x0j + x0,j+1 – 1– dofj ≤ 0 ∀ j∈ J Die ersten beiden Nebenbedingungen repräsentieren dabei die Implikationen „Wenn Doppelfrei, dann auch entsprechender Matrixeintrag frei“, und die letzte Nebenbedingung steht für die umgekehrte Richtung „Wenn beide Matrixeinträge frei, dann Doppelfrei“. Ebenso gibt es eine Variable drfj, die wie folgt definiert wird: 1, falls die Matrixeinträge j, j + 1 und j + 2 alle frei sind drf j = 0, sonst. Die Modellierung erfolgt analog zu der obigen. (47) drfj – x0j ≤ 0 ∀ j∈ J (48) drfj – x0,j+1 ≤ 0 ∀ j∈ J (49) drfj – x0,j+2 ≤ 0 ∀ j∈ J (50) x0j + x0,j+1 + x0,j+2 – 2 – drfj ≤ 0 ∀ j∈ J. Die Kostenfunktion lautet dann: (51) „Kosten Freiblockbildung“ = AnzFrei+ ∑ (DF ⋅drf j∈ J j − dofj ) Eigentlich sollen die Variablen dofj und drfj binär definiert sein. Man macht sich jedoch schnell klar, daß sie automatisch binäre Werte annehmen, wenn die x0j binär und die Ungleichungen (44) bis (50) erfüllt sind. Damit können die {0,1}-Bedingungen entfallen, d.h. die Anzahl der binären Variablen im Modell läßt sich reduzieren. Die Bedingungen werden durch obere Schranken der Form dofj ≤ 1 bzw. drfj ≤ 1 ersetzt. Diese Schranken sind jedoch bereits implizit in den Nebenbedingungen (44) bzw. (47) enthalten und daher auch nicht nötig. Außerdem können die Nebenbedingungen (46) entfallen. Sie stellen eine untere Schranke für die dofj dar. Da diese aber in der Zielfunktion maximiert werden, ist die untere Schranke nicht relevant. Es ist aber Vorsicht beim Entfernen solcher Nebenbedingungen geboten, da die Variablen dofj auch von der Nebenbedingung für den Anteil der freien Wochenenden (5.3.2.4) und der Kostenfunktion für die Gleichverteilung der freien Wochenenden (5.3.3.3) benutzt werden. Wenn das Zielkriterium Freiblockbildung mit 0 gewichtet ist, sind die dofj nicht mehr zwangsläufig mit maximalen Werten belegt, werden aber trotzdem noch an anderer Stelle verwendet. Außerdem hat auch die möglicherweise stärker gewichtete Kostenfunktion für die Gleichverteilung der freien Wo- 5 Lösung mittels linearer Programmierung 51 chenenden einen Einfluß, könnte also bezüglich der Kostenfunktion Freiblockbildung suboptimale Belegungen der dofj zur Folge haben. Dies tritt jedoch nicht ein, da die Modellierung der Kostenfunktion „Gleichverteilung freier Wochenenden“ ebenfalls tendenziell eine Maximierung der dofj bewirkt. Da außerdem die maximalen Belegungen zulässig bleiben, ist das Entfernen der Nebenbedingungen (46) möglich, wenn auch nicht zwangsläufig sinnvoll. Die Belegung der Variablen dofj ist allerdings in diesem Fall nicht mehr automatisch binär. Konkret kann z.B. der Fall auftreten, daß ein Wochenende frei ist, die zugehörige Variable dofj aber „nur“ den Wert 0,5 annimmt. Dies stört zwar nicht bei der Lösung, man sollte es jedoch bedenken, wenn man die Bedingungen (46) entfernt. Entsprechend können auch die oberen Schranken (47) bis (49) für die drfj entfernt werden, denn ihre Summe wird in der Zielfunktion minimiert. Da die drfj an anderer Stelle nicht verwendet werden, ist das Entfernen der Nebenbedingungen unproblematisch. 5.3.3.2 Vertikale Gleichverteilung freie Tage Kostenfunktion: Um leichte Abweichungen von der Gleichverteilung zuzulassen, werden jeweils 2-Wochen-Blöcke betrachtet. Aufgrund der gegebenen Anzahl freier Tage 2 ⋅AnzFrei freie Tage pro 2-Wochen-Block geben ergibt sich, daß es durchschnittlich Wochen soll. Diese Zahl muß nicht immer ganzzahlig sein, was zur Folge hat, daß der Idealwert in einer möglichen Lösung nicht realisiert werden kann. Eine Möglichkeit, eine Kostenfunktion zu definieren, besteht nun darin, sowohl Unterschreitungen des nächstkleineren als auch Überschreitungen des nächstgrößeren ganzzahligen Wertes zu bestrafen, wobei natürlich nur jeweils eines von beiden eintreten kann. „Kosten Vertikale Gleichverteilung freie Tage“ = 2 ⋅AnzFrei 2 ⋅AnzFrei max ist _ wert w − , − ist _ wert w , Wochen Wochen w∈ W ∑ wobei ist_wertw = „Anzahl freier Tage in den Wochen w und w+1“. Modellierung: Es wird für jede Woche w∈ W eine neue Variable fvw ≥ 0 benötigt, die das Maximum der beiden Werte in der obigen Formel mißt. Dies wird durch zwei neue Nebenbedingungen realisiert: (52) fv w ≥ ∑x t∈ T (53) 0,7⋅w + t 2 ⋅AnzFrei − ∀ w∈ W Wochen 2 ⋅AnzFrei fv w ≥ − Wochen ∑x t∈ T 0,7⋅w + t ∀ w∈ W Die Summe der fvw wird in die Zielfunktion aufgenommen: (54) „Kosten Vertikale Gleichverteilung freie Tage“ = ∑ fv w w∈ W Da die Zielfunktion minimiert wird, nehmen die fvw im Optimum genau das Maximum der jeweiligen beiden Werte an. 5 Lösung mittels linearer Programmierung 52 5.3.3.3 Gleichverteilung freie Wochenenden Kostenfunktion: Zunächst wird berechnet, wie groß der durchschnittliche Abstand zwischen den freien Wochenenden sein muß. Der aufgerundete Wert wird in einer Konstanten namens BL gespeichert. Da der Wert aufgerundet ist, sollte in jedem BLWochen-Block dann mindestens ein freies Wochenende liegen. Wenn dies nicht der Fall ist, werden Strafkosten in Höhe von 1 berechnet. „Kosten Gleichverteilung freie Wochenenden“ = ∑ 1 − " Anzahl freier Wochenenden in Wochen ( w, w + 1,..., w + w∈ W BL − 1)" + , 1 wobei BL = AntWoE Modellierung: Für jede Woche w∈ W wird eine neue Variable wvw ≥ 0 eingeführt, die den Wert 1 − " Anzahl freier Wochenende n in Wochen ( w , w + 1, ..., w + BL − 1)" + messen soll. Außerdem werden wieder die in Abschnitt 5.3.3.1 definierten Indikatorvariablen dofj verwendet. Mit ihrer Hilfe kann erkannt werden, ob das Wochenende in Woche w frei ist, was einem am Samstag beginnenden Doppelfrei entspricht: (55) wvw ≥ 1 – BL − 1 ∑ dof k =0 (56) 7⋅( w + k ) + 5 ∀ w∈ W. „Kosten Gleichverteilung freie Wochenenden“ = ∑ wv w w∈ W 5.3.3.4 Unterschreitung Schichtart Kostenfunktion: Falls Unterschreitungen der Schichtart-Bedarfe erlaubt sind, wird jede Unterschreitung eines Schichtart-Bedarfes mit Kosten bestraft. Da die Werte der anderen Kostenarten in der Regel mit zunehmender Turnusgröße linear wachsen, Unterschreitungen der Schichtart-Bedarfe jedoch nur in Ausnahmefällen auftreten sollen, und die Kosten folglich nicht abhängig von der Turnusgröße sind, werden die Kosten außerdem noch mit der Turnusgröße (Wochen) multipliziert. So bleibt die relative Gewichtung der Kostenart für die verschiedenen Turnusgrößen etwa gleich. Der Grund für das Wachsen der anderen Kosten mit der Turnusgröße ist auf die Lokalität der Kosten zurückzuführen. Sie fallen lokal an, d.h. je größer der Turnus, desto mehr Kosten treten auf. Die Kostenart Unterschreitung Schichtart tritt jedoch nur einmal für den Turnus insgesamt auf. „Kosten Unterschreitung Schichtart“ = ∑ ∑ Wochen ⋅SABedarf t∈ T i∈ I it − sa _ ist it + ⋅(max {SABedarf kt + 1} − SABedarf it ) , k∈ I wobei sa_istit = „Anzahl der verteilten Schichtart-Belegungen der Schichtart i am Tag t“ 5 Lösung mittels linearer Programmierung 53 Der letzte Faktor in der Formel bewirkt, daß Unterschreitungen um so mehr bestraft werden, je weniger Belegungen der entsprechenden Schichtart (verglichen mit den anderen Schichtarten) zu verteilen sind. Es wird also die relative Abweichung bestraft. Wegen der „+1“ ist der letzte Faktor stets ungleich 0. Modellierung: Um die Kostenfunktion zu modellieren, werden Variablen uit ≥ 0 für jede Schichtart i∈ I und für jeden Wochentag t∈ T eingeführt. Die Variablen sollen die Unterschreitung der jeweiligen Schichtart-Bedarfe messen. Wenn Unterschreitungen der Schichtart-Bedarfe an einem Tag t∈ T erlaubt sind, werden die entsprechenden Nebenbedingungen (29) aus Abschnitt 5.3.2.9 wie folgt modifiziert: ∑x (57) w∈ W i, 7⋅w + t + u it ≥ SABedarfit ∀ i ∈ I Die uit nehmen ggf. die Unterschreitungen auf und führen dazu, daß die Ungleichung trotzdem erfüllt ist. Die entstehenden Kosten gehen in die Zielfunktion ein, nachdem sie wie oben gewichtet wurden: (58) „Kosten Unterschreitung Schichtart“ = ∑ ∑ Wochen ⋅u it ⋅(max {SABedarfkt + 1} − SABedarfit ) t∈ T i∈ I k∈ I 5.3.3.5 Wunschanteil Schichtart Kostenfunktion: Um aus den relativen Wunschanteilen absolute Werte zu berechnen, multipliziert man die Wunschanteile der Schichtarten mit der Turnuskapazität. Dabei können sich jedoch nicht-ganzzahlige Werte ergeben. Da keine gesplitteten Schichtarten vergeben werden können, soll eine ganzzahlige Verteilung (GZVi, i∈ I) berechnet werden, die möglichst nahe an der idealen, eventuell nicht-ganzzahligen Verteilung liegt, und für die ∑ GZV i = TK gilt. Der folgende Algorithmus übernimmt diese Berech- i∈I nung: Algorithmus „Optimale ganzzahlige Wunschverteilung“ GZVi := SAAnt i ⋅TK ∀ i∈ I Solange ∑ GZV i < TK i∈I Berechne max{SAAnt i ⋅TK − GZVi }, wähle ein i, bei dem das Maximum angenommen i∈I wird, und setze GZVi := GZVi + 1. Die Anzahl der Schritte, die im Rahmen des Algorithmus durchgeführt werden, steht bereits nach der Initialisierung der GZVi fest. Sie ist gleich TK − ∑ GZV i . Bei dem i∈I Algorithmus handelt es sich um einen „greedy-Algorithmus“, denn das GZVi wird immer für die Schichtart i erhöht, für die der aktuelle ganzzahlige Wert GZVi die größte Differenz zu dem nicht-ganzzahligen Idealwert aufweist. Da also in einer festen Anzahl von Schritten jeweils die maximale Verbesserung der Verteilung gewählt wird, ist am Ende des Algorithmus eine optimale ganzzahlige Verteilung (GZVi) ermittelt. Abweichungen von dieser Verteilung sollen bestraft werden, was durch die folgende Kostenfunktion realisiert wird. Wie bei der Kostenart „Unterschreitung Schichtart“ wird 5 Lösung mittels linearer Programmierung 54 auch hier mit dem Faktor „Wochen“ multipliziert, um die Höhe der entstehenden Kosten an die Größenordnung der Gesamtkosten anzupassen. „Kosten Wunschanteil Schichtart“ = ∑ Wochen⋅GZV − sa _ ist i i i∈I wobei sa_isti die Anzahl der verteilten Belegungen der Schichtart i im Turnus sei. Modellierung: Die Variable, die die Abweichung für die Schichtart i, also den in der obigen Kostenfunktion enthaltenen Betrag messen soll, sei awi ≥ 0 ∀ i∈ I. Wie in Abschnitt 5.2.3 beschrieben, werden zwei neue Nebenbedingungen aufgestellt und die Summe der Abweichungen, also die Summe der Kosten, in die Zielfunktion aufgenommen: (59) aw i ≥ ∑x ij − SAAnt i ∀ i ∈ I j∈ J (60) aw i ≥ SAAnt i − ∑x ij ∀ i∈ I j∈ J (61) „Kosten Wunschanteil Schichtart“ = ∑ Wochen ⋅aw i i∈I 5.3.3.6 Spreizung Kostenfunktion: Aus der Schichtartblocklänge einer schweren Schichtart i (SABLi > 0) und der oben berechneten optimalen ganzzahligen Verteilung der Schichtarten (GZVi) kann die Anzahl der Blöcke einer Schichtart bestimmt werden, die minde GZVi stens in dem Turnus auftreten sollen. Diese Anzahl ist . Der maximal mögSABL i liche Idealabstand Idi zwischen zwei Blöcken der schweren Schichtart i ergibt sich dann, indem die Anzahl der noch anderweitig zu belegenden Matrixeinträge durch die Zahl dieser Blöcke dividiert wird. Der entstehende Wert wird auf die nächstkleinere ganze Zahl abgerundet: (62) 7 ⋅Wochen − GZVi Id i = GZVi SABL i Der Idealabstand ist, wie der Name bereits sagt, ein idealer Wert, der in der Regel aufgrund der anderen Nebenbedingungen nicht eingehalten werden kann. Darum soll ein Anteil des Abstandes, der durch den Parameter EinhAbs bestimmt wird, fest eingehalten werden, d.h. er wird als Nebenbedingung formuliert. Die Nebenbedingung wird dabei wie folgt aufgestellt: Wenn vor einer Belegung mit einer schweren Schichtart i eine andere Schichtart oder ein freier Tag liegt, so dürfen die Idi ⋅EinhAbs–1 Matrixeinträge davor nicht die schwere Schichtart i enthalten. Der restliche Teil des Idealabstandes darf unterschritten werden, in dem Fall werden jedoch Kosten berechnet. Die Höhe der Kosten wird durch die Höhe der Unterschrei- 5 Lösung mittels linearer Programmierung 55 tung des Idealabstands ermittelt. Wenn eine Schichtart-Belegung diesen Abstand um 1 unterschreitet, werden also Kosten von 1 berechnet, wird der Abstand durch eine Schichtart-Belegung um j Matrixeinträge unterschritten, werden Kosten in Höhe von j berechnet, usw. Dies geschieht für alle Matrixeinträge, die innerhalb des Idealabstandes liegen, und für die die Schichtart-Belegung nicht ohnehin schon durch die obige Nebenbedingung streng untersagt ist. Unterschreiten mehrere SchichtartBelegungen den Idealabstand vor dem nächsten Block der schweren Schichtart i, so werden die anfallenden Kosten summiert. Die Formulierung der Kostenfunktion ist bereits stark an das lineare Modell angelehnt, und in der folgenden Formel werden Entscheidungsvariablen benutzt. Dies ist im Fall der Spreizung notwendig, da sich andere, auf den ersten Blick vielleicht einfachere Kostenfunktionen, nicht oder nur mit extremem Aufwand linear formulieren lassen. „Kosten Spreizung“ = ∑ ∑ i∈ Ischwer j∈ J Idi ⋅(1− EinhAbs i ) x ij ⋅(1 − x i, j− 1 ) ⋅ ∑ k ⋅x k =1 i, j− Idi + k − 1 Die folgenden Graphik verdeutlicht die Kostenart Spreizung. Dabei sei eine beliebige Folge von Matrixeinträgen des Turnus betrachtet: Idi Kosten 1, Kosten 2, falls =i falls =i Kosten..., falls =i Idi ⋅(1 − EinhAbs) ≠i ≠i falls ≠i i∈ Ischwer Idi ⋅EinhAbs–1 Abbildung 12: Zielkriterium Spreizung Beispiel: Ein Spätdienst sei eine schwere Schichtart. Der Idealabstand für diese Schichtart sei Idi = 7. Mit EinhAbs = 0,5 ergibt sich Idi ⋅(1 − EinhAbs) = 4 und Idi ⋅EinhAbs = 3. Weiter sei die folgende Belegungsfolge gegeben: Frei, SD, SD, MD, MD, MD, Frei, SD Diese Belegungsfolge ist zulässig, denn vor dem letzten Spätdienst liegt kein Spätdienst, woraus sich die Forderung ergibt, daß die 2 (= 3–1) Matrixeinträge davor auch mit einer anderen Schichtart oder Frei zu belegen sind. Dies ist durch die hinteren zwei Mitteldienste eingehalten. Nun werden die ersten 4 Einträge der Belegungsfolge betrachtet. Jeder Spätdienst wird mit Kosten bestraft. An der ersten und vierten Position liegt kein Spätdienst. An der zweiten und dritten Position liegen Spätdienste, die mit Kosten 2 und 3 bestraft werden. Insgesamt hat obige Belegungsfolge also Kosten für die Spreizung der Spätdienste in Höhe von 5. Zusammen mit der Nebenbedingung Schichtartblocklänge wird durch die Spreizung auch der unerwünschte Fall vermieden, daß innerhalb eines Dienstblockes die Schichtartblocklänge nur dadurch eingehalten wird, daß die schweren Schichtarten nicht direkt 5 Lösung mittels linearer Programmierung 56 aufeinander folgen, sondern durch eine nicht schwere Schichtart getrennt sind. Ein Beispiel hierfür wäre eine Schichtartfolge SD, SD, SD, MD, SD, SD. Die Schichtartblocklänge von 4 ist zwar eingehalten, aber es liegen trotzdem mehr als 4 Spätdienste in einem Dienstblock. Modellierung: Zunächst soll die Nebenbedingung für den fest einzuhaltenden Teil der Spreizung formuliert werden. Die Nebenbedingung besagt, daß eine Anzahl von Idi ⋅EinhAbs–1 Matrixeinträgen vor der Position j-1 für die schwere Schichtart i gesperrt sein soll. Dies kann durch j− 2 (63) ∑ x ik ≤ 0 k = j− Idi ⋅EinhAbs modelliert werden. Falls der Matrixeintrag j nicht mit Schichtart i belegt ist, oder der Matrixeintrag j–1 auch mit Schichtart i belegt ist, soll die Nebenbedingung inaktiv werden. Um diese Implikation abzubilden, wird ganz ähnlich wie in Abschnitt 5.3.2.5 bei der minimalen Dienstblocklänge verfahren: (64) − Idi ⋅EinhAbs − 1⋅(1 − x ij ) − Idi ⋅EinhAbs − 1⋅x i, j − 1 + j− 2 ∑ x i,k ≤ 0 k = j − Id i ⋅EinhAbs In den beiden Fällen, in denen die Nebenbedingung inaktiv werden soll, wird auf der linken Seite Idi ⋅EinhAbs − 1 subtrahiert, wodurch die Ungleichung erfüllt wird. Nun muß noch die obige Kostenfunktion linear formuliert werden. Die am Matrixeintrag j entstehenden Kosten sollen von einer Variablen szj ≥ 0 gemessen werden. Da der Matrixeintrag mit höchstens einer Schichtart belegt sein kann, ist es nicht nötig, für jede schwere Schichtart eine neue Variable einzufügen. Für die Höhe der Kosten am Matrixeintrag j gilt: (65) 0 ≤ Idi ⋅(1− EinhAbs i ) ∑ k ⋅x k =1 i, j− Idi + k − 1 ≤ Idi ⋅(1− EinhAbs ) ∑k =: GS k =1 Dabei ist GS (Gauss-Summe) eine obere Schranke für die am Matrixeintrag j anfallenden Kosten. Mit Hilfe dieser Schranke kann die Kostenfunktion analog zu (64) formuliert werden: (66) − GS ⋅(1 − x ij ) − GS ⋅x i, j− 1 − sz j + Idi ⋅(1− EinhAbs ) ∑ k ⋅x k =1 i, j− Idi + k − 1 ≤0 Die Nebenbedingung ist genau dann aktiv, wenn auch (64) aktiv ist und impliziert dann (67) sz j ≥ Idi ⋅(1− EinhAbs ) ∑ k ⋅x k =1 i, j− Idi + k − 1 , d.h. alle Kosten werden in der Variablen szj aufgenommen. Durch Umformung von (64) und (66) sowie deren Anwendung auf alle Matrixeinträge ergeben sich folgende Nebenbedingungen: (68) Idi ⋅EinhAbs − 1⋅x ij − Idi ⋅EinhAbs − 1⋅x i,j− 1 + j− 2 ∑ x i,k ≤ k = j− Idi ⋅EinhAbs Idi ⋅EinhAbs − 1 ∀ j ∈ J, i ∈ Ischwer 5 Lösung mittels linearer Programmierung (69) sz j ≥ GS ⋅x ij − GS ⋅x i, j− 1 + 57 Idi ⋅(1− EinhAbs ) ∑ k ⋅x k =1 − GS ∀ j ∈ J, i ∈ Ischwer i, j− Idi + k − 1 Die Kosten ergeben sich als (70) „Kosten Spreizung“ = ∑ sz . j j∈J 5.3.3.7 Rückwärtsrollierung Kostenfunktion: Für Freiblöcke der Länge größer oder gleich zwei wird die Differenz zwischen spätester Anfangszeit (Anfangszeit der Schichtart mit der spätesten Anfangszeit) und Anfangszeit der Schichtart nach dem Freiblock bestimmt. Ebenso wird für die Schichtart davor die Differenz aus Endzeit und frühester Endzeit (Endzeit der Schichtart mit der frühesten Endzeit) ermittelt. Diese Werte werden für alle Freiblöcke summiert, die aus mehr als einem Frei bestehen. Die geringsten Kosten fallen also bei einem frühen Schichtende vor und bei einem späten Schichtbeginn nach dem Freiblock an. „Kosten Rückwärtsrollierung“ = ∑ (max{AZ }− AZ i i∈I f∈ F f ≥2 n(f) + EZ v ( f ) − min{EZ i }) i∈ I Dabei sei F die Menge der Freiblöcke im Turnus, |f| die Länge des Freiblockes, v(f) = Index der Schichtart vor dem Freiblock f, n(f) = Index der Schichtart nach dem Freiblock f. Modellierung: Die Kosten für die Rückwärtsrollierung am Matrixeintrag j sollen von einer Variablen rrj gemessen werden. Betrachtet werde ein Freiblock der Länge m ≥ 2, der am Matrixeintrag j+1 beginne. Dann ist ∑ EZ ⋅x ij die Endzeit der Schichtart vor i i∈I dem Freiblock, denn wegen (8) aus Abschnitt 5.3.2.1 kann nur eines der xij (i∈ I) ungleich 0 sein. Ebenso ist ∑ AZ i i∈I ⋅x i, j+ m+ 1 die Anfangszeit der Schichtart nach dem Freiblock. Zur Messung der Kosten muß also gelten: (71) rrj ≥ ∑ EZ i ⋅x ij − min{EZ i }+ max{AZ i }− i∈I i∈I i∈I ∑ AZ i∈I i ⋅x i, j+ m+ 1 Diese Bedingung soll jedoch nur dann aktiv sein, wenn am Matrixeintrag j+1 ein Freiblock der Länge m beginnt, d.h. wenn die Matrixeinträge j+1 bis j+m alle frei sind und die Matrixeinträge j und j+m+1 nicht. Diese Implikation wird wie folgt realisiert: Der maximale Wert, den die rechte Seite von (71) annehmen kann ist (72) MaxRR := max{EZ i }− min{EZ i }+ max {AZ i }− min{AZ i }. i∈I i∈I i∈I i∈ I Falls also der Matrixeintrag j frei ist, oder einer der Matrixeinträge j+1 bis j+m nicht frei ist, wird MaxRR von der rechten Seite von (71) subtrahiert, wodurch die Ungleichung stets auch mit rrj = 0 erfüllt ist. Falls der Matrixeintrag j+m+1 frei ist, muß sogar MaxRR+ min{AZ i }subtrahiert werden, um die Ungleichung zu deaktivieren. i∈ I 5 Lösung mittels linearer Programmierung 58 Nun wird die resultierende Nebenbedingung für alle Matrixeinträge und für alle möglichen Freiblocklängen m ≥ 2 aufgestellt: (73) rrj ≥ ∑ EZ i ⋅x ij − min{EZ i } + max {AZ i }− i∈ I i∈I − m ∑ MaxRR ⋅(1 − k =1 i∈I ∑ AZ i∈ I ( i ⋅x i,j+ m+ 1 − MaxRR ⋅x 0 j ) x 0, j+ k ) − MaxRR + min{AZ i }⋅x 0, j+ m+ 1 ∀ j∈ J, m = 2,...,MaxFBL i∈ I Da ein Freiblock nur eine Länge haben kann, sind jeweils mindestens MaxFBL–2 der MaxFBL–1 Nebenbedingungen an jedem Matrixeintrag j ohne Wirkung auf rrj. Darum ist es nicht nötig, für jede mögliche Freiblocklänge eine eigene Variable einzuführen. Die Summe der rrj wird in die Zielfunktion aufgenommen: (74) „Kosten Rückwärtsrollierung“ = ∑ rr j j∈J 5.3.3.8 Standardrollierung Kostenfunktion: Für jedes Paar von Schichtart-Belegungen innerhalb eines Dienstblockes wird zunächst der Schwerpunkt der ersten Schichtart betrachtet. Dann wird der Abstand zum zweiten Matrixeintrag berechnet, mit SR multipliziert und zum ersten Schwerpunkt addiert. Es ergibt sich der bei idealer Einhaltung der Standardrollierung erwartete Schwerpunkt der zweiten Schichtart. Der Absolutbetrag der Abweichung des tatsächlichen Schwerpunktes der zweiten Schichtart von diesem erwarteten Wert wird mit Kosten bestraft. Diese Kosten werden für alle Paare von Schichtarten innerhalb eines Dienstblockes summiert, und schließlich werden die Summen aller Blöcke addiert. „Kosten Standardrollierung“ = ∑ db∈ DB ∑ SP i1 + Abs tan d(i1 , i 2 ) ⋅SR − SPi 2 , Schichtartpaar (i1 ,i 2 )∈ db wobei DB die Menge aller Dienstblöcke des Turnus sei. Modellierung: Analog zu den Anfangs- und Endzeiten (vgl. 5.3.3.7) ergibt sich der Schwerpunkt der Schichtart eines Matrixeintrag j als ∑ SP ⋅x i∈ I i ij , denn höchstens ein Summand kann ungleich 0 sein. Für jeden Matrixeintrag j und jeden möglichen Abstand k = 1,..., MaxDBL–1 zweier Belegungen innerhalb eines Dienstblockes wird eine neue Variable strjk eingeführt. Die durch zwei Belegungen innerhalb eines Dienstblockes entstehenden Kosten ergeben sich als ∑ SP ⋅x i∈ I i ij + k ⋅SR − ∑ SP ⋅x i i∈ I i , j+ k . Der Betrag wird wie folgt linear gemessen (vgl. 5.2.3): (75) strjk ≥ ∑ SP ⋅x i ij + k ⋅SR − i∈I (76) strjk ≥ ∑ SP ⋅x i i∈I ∑ SP ⋅x i i∈I i, j+ k − ∑ SP ⋅x i ij i , j+ k und − k ⋅SR i∈I Nun ist noch zu sichern, daß die beiden betrachteten Belegungen innerhalb eines Dienstblockes liegen, d.h. dazwischen darf kein Frei sein. Anderenfalls muß die Neben- 5 Lösung mittels linearer Programmierung 59 bedingung deaktiviert werden. Dies kann durch Subtrahieren der maximal möglichen Differenz zweier Schwerpunkte geschehen. Außerdem muß in diesem Fall noch k⋅SR subtrahiert werden, falls dieser Term mit positivem Vorzeichen in die rechte Seite eingeht. Es ergeben sich (77) strjk ≥ ∑ SPi ⋅x ij + k ⋅SR − ∑ SPi ⋅x i,j+ k − i∈ I k− 1 SPi ⋅x i, j+ k – {SPi1 − SPi2 } + k ⋅SR + ⋅ x 0,j+ m max m=1 i1,i2∈I ∑ ∑ i∈ I und (78) strjk ≥ i∈I Auch wenn die + ∑ i∈I k− 1 SPi ⋅x ij − k ⋅SR – {SPi1 − SPi2 } + − k ⋅SR + ⋅ x 0, j+ m max m=1 i1,i2 ∈I ∑ –Funktion in (77) zunächst unnötig erscheint, ist sie doch sehr wichtig, denn zwischen den Matrixeinträgen j und j+k können mehrere Freis liegen, so daß mehrmals k⋅SR subtrahiert wird. Der Ausdruck k⋅SR kann jedoch negativ sein, so daß bei einer relativ geringen maximalen Schwerpunktdifferenz etwas addiert würde anstatt zu subtrahieren. Der gleiche Fall mit umgekehrten Vorzeichen könnte in (78) auftreten. Da die Schwerpunkte stets positiv sind, ist also gesichert, daß der Term max {SP − SP } + ± k ⋅SR jeweils positiv ist. i ,i ∈I i1 i2 + 12 Falls einer der Matrixeinträge j und j+k frei ist, müssen die Nebenbedingungen (77) und (78) ebenfalls deaktiviert werden. Im letzten Fall (j+k frei) wird max{SPi }+|k⋅SR|+ von i∈I der rechten Seite von (77) subtrahiert. Sonst steht auf der rechten Seite von (77) nur noch ein (möglicherweise) positiver Summand, nämlich k⋅SR. Dieser muß also subtrahiert werden, falls der Matrixeintrag j frei ist. Um die Nebenbedingung möglichst restriktiv zu formulieren, wird in diesem Fall auch noch min{SPi }addiert. Dies wird ohnehin i∈I wieder subtrahiert, da der Matrixeintrag j+k entweder frei oder mit einer Schichtart belegt sein muß. Die Nebenbedingung (78) wird entsprechend ergänzt , nur daß die Matrixeinträge j und j+k umgekehrt behandelt werden. Die entstehenden Nebenbedingungen werden nun wieder für alle Matrixeinträge und alle möglichen Abstände formuliert: (79) strjk ≥ ( ∑ i∈ I SPi ⋅x ij + k ⋅SR − ( ) ∑ i∈ I k− 1 SPi ⋅x i, j+ k – {SPi1 − SPi2 } + k ⋅SR + max ⋅ x 0,j+ m i1,i2∈I m=1 ∑ ) + min {SPi } − k ⋅SR ⋅x 0 j – max {SPi } + k ⋅SR + ⋅x 0, j+ k ∀ j∈ J, k = 1,...,MaxDBL–1 i∈I i∈I und (80) strjk ≥ ( ∑ i∈I SPi ⋅x i,j+ k − ∑ i∈I k− 1 SPi ⋅x ij − k ⋅SR – {SPi1 − SPi2 } + − k ⋅SR + max ⋅ x 0, j+ m i1,i2 ∈I m=1 ) ( ) ∑ – max {SPi } + − k ⋅SR + ⋅x 0 j + min {SPi } + k ⋅SR ⋅x 0, j+ k ∀ j∈ J, k = 1,...,MaxDBL–1 i∈I i∈I Die Summe der strjk wird in die Zielfunktion aufgenommen: MaxDBL − 1 (81) „Kosten Standardrollierung“ = ∑ ∑ str j∈ J jk k =1 Leider sind die zu dieser Kostenart gehörenden Nebenbedingungen sehr komplex. Natürlich lassen sich die Nebenbedingungen auch einfacher aufstellen, indem jeweils 5 Lösung mittels linearer Programmierung 60 ein konstanter, sehr großer Wert von der rechten Seite subtrahiert wird, falls einer der Matrixeinträge j bis j+k frei ist. Dadurch würde die Ungleichung zwar sicher erfüllt, aber im Hinblick auf die Lösung des Problems ist es wichtig, den subtrahierten Wert so gering wie möglich zu wählen. Sonst können die Nebenbedingungen (75) und (76) im relaxierten Problem nämlich dadurch deaktiviert werden, daß die Variablen x0j einen sehr kleinen Wert annehmen, viele Matrixeinträge also „ein wenig frei“ sind, und dadurch keine Kosten für die Standardrollierung anfallen. So werden viele Teilprobleme in den Branch-and-Bound-Baum aufgenommen, die eigentlich sehr weit von zulässigen Lösungen entfernt sind oder extrem schlechte Kosten haben, sobald man Ganzzahligkeit fordert. Auf das Problem, die Größe solcher Koeffizienten zu wählen, wird auch bei Williams ([41], S.211) eingegangen. 5.3.4 Gesamtmodell Aufgrund der Größe des ganzzahlig linearen Modells ist es im folgenden noch einmal insgesamt dargestellt und die Bedeutung der Variablen ist kurz erklärt. Eine Auflistung aller verwendeten Parameter findet sich im Symbolverzeichnis, da diese im Gegensatz zu den Variablen auch später beim Simulated Annealing verwendet werden. Gew1 ⋅100 ⋅AnzFrei+ Minimiere ∑∑u + Gew4 ⋅ it ∑ (DF ⋅drf − dof )+ Gew ⋅ ∑ fv j j j∈J 2 w + Gew3 ⋅ w∈ W ∑ wv w w∈ W ⋅Wochen ⋅(max {SABedarfkt + 1} − SABedarfit ) k∈ I t∈ T i∈ I ∑ Wochen ⋅aw + Gew5 ⋅ i ∑ sz + Gew6⋅ i∈I j∈J j ∑ rr + Gew7 ⋅ j j∈J MaxDBL − 1 ∑ ∑ str + Gew8 ⋅ j∈ J jk k =1 unter den Nebenbedingungen (82) ∑x ij = 1 ∀ j ∈ J. 0j = AnzFrei i∈ Io (83) ∑x j∈ J (84) ∑x w∈ W (85) 0, 7⋅w + t ∑ dof w∈ W ≥ FreiBedarft ∀ t∈ T 7⋅w + 6 ≥ Wochen ⋅AntWoE MinDBL (86) (MinDBL–1)⋅x0j + (1–MinDBL)⋅x0j+1 + ∑x k =2 MaxDBL (87) ∑x k =0 0, j+ k ≥ 1 ∀ j ∈ J. 0, j+ k ≤ MaxFBL ∀ j ∈ J. MaxFBL (88) ∑x k =0 (89) ∑x w∈ W i, 7⋅w + t ≥ SABedarfi,t ∀ i∈ I bzw. ∑x w∈ W 0, j+ k i, 7⋅w + t ≤ MinDBL – 1 ∀ j∈ J (MinDBL ≥ 2) + u it ≥ SABedarfit ∀ i ∈ I ∀ t∈ T 5 Lösung mittels linearer Programmierung SABL i ∑x (90) k =0 (91) x ij + i , j+ k ≤ SABL i ∀ j ∈ J , i ∈ Ischwer . ∑x k∈I( i ) (92) 61 k , j+ 1 ≤ 1 ∀ j∈ J, i∈ I ∑x x ij + x 0, j+ 1 + ≤ 2 ∀ j∈ J, i∈ I k, j + 2 k∈I(i ) (93) (94) wrzj – (1 – x0,j-1) ≤ 0 ∀ j∈ J wrzj – x0j ≤ 0 ∀ j∈ J (95) x i, j− 1 + wrz j + ∑x k , j+ 1 und ∀ j∈ J, i∈ I (falls Wochenruhezeit nicht als Doppelfrei) ≤2 k∈I(i) (96) ∑x x i, j− 1 + wrz j + k , j+ 2 ≤ 2 ∀ j∈ J, i∈ I k∈ I(i) 13 (97) ∑ wrz j =0 ∀ w∈ W ≥1 7⋅w + j (98) (99) (100) (101) wrzj – x0,j+1 ≤ 0 ∀ j∈ J (falls Wochenruhezeit als Doppelfrei) dofj – x0j ≤ 0 ∀ j∈ J dofj – x0,j+1 ≤ 0 ∀ j∈ J x0j + x0,j+1 + x0,j+2 – 2 – drfj ≤ 0 ∀ j∈ J. (102) fv w ≥ ∑x t∈ T (103) 2 ⋅AnzFrei − ∀ w∈ W Wochen 0,7⋅w + t 2 ⋅AnzFrei fv w ≥ − Wochen (104) wvw ≥ 1 – aw i ≥ t∈ T BL − 1 ∑ dof k =0 (105) ∑x ∑x 7⋅( w + k ) + 5 ∀ w∈ W 0,7⋅w + t ∀ w∈ W. − SAAnt i ∀ i ∈ I ij j∈ J (106) ∑x aw i ≥ SAAnt i − ij ∀ i∈ I j∈ J (107) j− 2 ∑ Idi ⋅EinhAbs − 1⋅x ij − Idi ⋅EinhAbs − 1⋅x i, j− 1 + (108) sz j ≥ GS ⋅x ij − GS ⋅x i, j− 1 + (109) rrj ≥ ∑ EZ i i∈ I m ∑ MaxRR ⋅(1 − k =1 (110) strjk ≥ ( ∑ SP ⋅x i i∈ I Idi ⋅(1− EinhAbs ) ∑ k ⋅x k =1 ij i∈I ∑ AZ i∈ I ( Idi ⋅EinhAbs − 1 ∀ j ∈ J, i ∈ Ischwer − GS ∀ j ∈ J, i ∈ Ischwer i, j− Idi + k − 1 ⋅x ij − min{EZ i } + max {AZ i }− i∈I − x i,k ≤ k = j− Idi ⋅EinhAbs i ⋅x i,j+ m+ 1 − MaxRR ⋅x 0 j ) x 0, j+ k ) − MaxRR + min{AZ i }⋅x 0, j+ m+ 1 ∀ j∈ J, m = 2,...,MaxFBL + k ⋅SR − ) ( i∈ I ∑ SP ⋅x i i∈ I k− 1 i, j + k – {SPi1 − SPi2 } + k ⋅SR + max ⋅ x 0,j+ m i , i ∈ I 12 m=1 ) ∑ + min {SPi } − k ⋅SR ⋅x 0 j – max {SPi } + k ⋅SR + ⋅x 0, j+ k ∀ j∈ J, k = 1,...,MaxDBL–1 i∈I i∈I 5 Lösung mittels linearer Programmierung (111) strjk ≥ ( ∑ i∈I SPi ⋅x i,j+ k − ∑ i∈I 62 k− 1 SPi ⋅x ij − k ⋅SR – {SPi1 − SPi2 } + − k ⋅SR + ⋅ x 0, j+ m max m=1 i1,i2 ∈I ) ( ) ∑ – max {SPi } + − k ⋅SR + ⋅x 0 j + min {SPi } + k ⋅SR ⋅x 0, j+ k ∀ j∈ J, k = 1,...,MaxDBL–1. (112) (113) (114) (115) (116) (117) (118) i∈I i∈I xij ∈ {0,1} ∀ i∈ I, j∈ J wrzj ∈ {0,1} ∀ j∈ J fvw, wvw ≥ 0 ∀ w∈ W uit ≥ 0 ∀ i∈ I, t∈ T awi ≥ 0 ∀ i∈ I dofj, drfj, szj, rrj ≥ 0 ∀ j∈ J strij ≥ 0 ∀ i∈ I, j∈ J Variable Beschreibung awi∈ IN dofj drfj fvw∈ IN Mißt die Abweichung vom Wunschanteil der Schichtart i im Turnus =1 ó Matrixeintrag j und j+1 beide frei (Doppelfrei) =1 ó Matrixeintrag j, j+1 und j+2 alle frei (Dreifachfrei) Mißt die Abweichung von der gewünschten Anzahl freier Tage in dem 2Wochen-Zeitraum, der in Woche w beginnt (Kostenart „Vertikale Gleichverteilung freie Tage“) Mißt die Unterschreitung der optimalen Freiblocklänge, falls am Matrixeintrag j ein Freiblock der Mindestlänge 2 beginnt (Kostenart „Rückwärtsrollierung“) Mißt die Abweichung von der gewünschten Rollierung zwischen den Belegungen der Matrixeinträge j und j+k, falls keiner der Matrixeinträge j, j+1, ...j+k frei ist (Kostenart „Standardrollierung“) Mißt die am Matrixeintrag j entstehenden Kosten der Kostenart Spreizung Mißt die Unterschreitung des Bedarfs der Schichtart i am Tag t im Turnus, falls Unterschreitungen erlaubt sind (Kostenart Unterschreitung Schichtart) =1, falls am Matrixeintrag j eine angerechnete Wochenruhezeit beginnt Mißt die Abweichung von der Gleichverteilung der freien Wochenenden (Kostenart Gleichverteilung freie Wochenenden) Repräsentant der Belegung des Matrixeintrages j (=1, falls mit Schichtart i belegt bzw. frei (i=0), sonst 0) rrm,j∈ IN strjk∈ IN szj∈ IN uit∈ IN wrzj∈ {0,1} wvw∈ IN xij∈ {0,1} Tabelle 28 Dieses Modell läßt sich einfach auf die Form T (MIP) min{c x: Ax ≤ b, x ≥ 0, xi∈ IN für i∈ K} bringen. Hierzu sind lediglich die Variablen auf die linke und die Konstanten auf die rechte Seite zu bringen, die „=“-Bedingungen in eine „≤“- und eine „≥“-Bedingung zu zerlegen und schließlich die „≥“-Bedingungen mit –1 zu multiplizieren. Näheres zu diesen Umformungen findet sich u.a. bei Recht ([32], S.49-50). Man beachte auch, daß der Vektor x alle in der obigen Tabelle aufgeführten Variablen enthält. Er ist dabei nicht mit den Variablen xij zu verwechseln, die nur einen Teil von x bilden. 5 Lösung mittels linearer Programmierung 63 An dieser Stelle soll noch einmal darauf hingewiesen werden, daß die verwendeten nicht linearen Funktionen (|.|+, ., . , min{}, max{}) nur auf Konstanten angewendet werden, also im wesentlichen auf Parameter, die der Benutzer vorgegeben hat und die zum Zeitpunkt der Generierung des linearen Programms festgelegt sind. Die entsprechenden Terme können also vor der Optimierung berechnet werden und sind danach konstant. 5.3.5 Statistik der Variablen In der folgenden Tabelle ist für alle Kriterien der zur Modellierung im linearen Programm benötigte Aufwand in Form von Variablen, Nebenbedingungen und Koeffizienten ungleich 0 in der Matrix, die die Nebenbedingungen angibt, berechnet. Auf die Berechnung soll nicht im einzelnen eingegangen werden. Es handelt sich dabei im wesentlichen um das „Zählen“ aller Gleichungen, Variablen und Koeffizienten des Modells. Lediglich zur Berechnung der Anzahl der Koeffizienten der Kostenarten „Rückwärtsrollierung“ und „Standardrollierung“ ist jeweils eine Gauss-Summe zu berechnen. Die hierzu verwendeten Nebenbedingungen enthalten nämlich unterschiedlich viele Koeffizienten. Anzahl Koeffizienten für die Rückwärtsrollierung pro Matrixeintrag: MaxFBL (MaxFBL–1)⋅(3+2⋅|I|)+ ∑m m=2 = (MaxFBL–1)⋅(3+2⋅|I|)+0,5⋅(MaxFBL–1)⋅(MaxFBL+2) = (MaxFBL–1)⋅(4+2⋅|I|+0,5⋅MaxFBL) Anzahl Koeffizienten für die Standardrollierung pro Matrixeintrag: MaxDBL − 2 2⋅(MaxDBL–1)⋅(3+2⋅|I|)+2⋅ ∑m m =1 = 2⋅(MaxDBL–1)⋅(3+2⋅|I|)+(MaxDBL–2)⋅(MaxDBL–1) = (MaxDBL–1)⋅(4+4⋅|I|+MaxDBL) In der ersten Zeile der obigen Berechnungen steht dabei jeweils: „Anzahl Ungleichungen“ ⋅„konstante Anzahl Koeffizienten“ + „gesamte variable Anzahl Koeffizienten“ 5 Lösung mittels linearer Programmierung 64 Kriterium Anzahl Spalten (Variablen) Anzahl Zeilen Anzahl Elemente (Nebenbedingungen) ungleich 0 Genau eine Belegung Anzahl freier Tage Bedarf Frei pro Wochentag Mindestanteil freier Wochenenden Minimale Dienstblocklänge Maximale Dienstblocklänge Maximale Freiblocklänge Zulässige Schichtarten Bedarf Schichtarten Schichtartblocklänge 7⋅Wochen⋅(|I|+1) 7⋅Wochen (binär) 0 1 7⋅Wochen⋅(|I|+1) 0 7 7⋅Wochen 0 1 Wochen 0 7⋅Wochen 7⋅Wochen⋅(MinDBL+1) 0 7⋅Wochen 7⋅Wochen⋅(MaxDBL+1) 0 7⋅Wochen 7⋅Wochen⋅(MaxFBL+1) 0 0 0 0 7⋅|I| 7⋅Wochen⋅|I| 0 7⋅Wochen⋅|Ischwer| 7⋅Wochen⋅ Nachtruhe Wochenruhezeit 0 7⋅Wochen ∑ 1+ SABL i i∈ Ischwer 14⋅Wochen⋅|I| ≤ 14⋅Wochen⋅|I|² 7⋅Wochen (binär) Wochen⋅(14⋅(|I|+1)+1) ≤ 14⋅Wochen⋅(|I|²+4⋅|I|+7) „ Wochen⋅(7⋅(|I|+3)+1) ≤ 7⋅Wochen⋅(|I|²+4⋅|I|+12) Wochenruhezeit durch Doppelfrei Freiblockbildung Vertikale Gleichverteilung freie Tage Gleichverteilung freie Wochenenden Unterschreitung Schichtart Wunschanteil Schichtart Spreizung Rückwärtsrollierung 7⋅Wochen⋅|Ischwer| 14⋅Wochen⋅|Ischwer| 7⋅Wochen 7⋅Wochen ⋅(MaxFBL–1) < 49⋅Wochen2⋅|Ischwer| ≈7⋅Wochen⋅(MaxFBL–1) ⋅(4+2⋅|I|+0,5⋅MaxFBL) Standardrollierung 7⋅Wochen ⋅(MaxDBL–1) 7⋅Wochen⋅(MaxDBL–1) ⋅(4+4⋅|I|+MaxDBL) Tabelle 29 14⋅Wochen Wochen 49⋅Wochen 2⋅Wochen 119⋅Wochen 16⋅Wochen Wochen Wochen ≈3⋅Wochen 7⋅Wochen⋅|I| 0 7⋅Wochen⋅|I| |I| 2⋅|I| 2⋅(7⋅Wochen+1)⋅|I| 14⋅Wochen ⋅(MaxDBL–1) 5 Lösung mittels linearer Programmierung 65 Summiert man die Spalten der Tabelle auf, so erhält man, daß das Modell bei Verwendung aller Kriterien |I| + Wochen⋅(14⋅|I| + 7⋅|Ischwer| + 7⋅MaxDBL + 23) Variablen, davon 7⋅Wochen⋅(|I|+2) binär, und 9(|I|+1) + Wochen⋅(28⋅|I| + 21⋅|Ischwer| + 7⋅MaxFBL + 14⋅MaxDBL + 74) Nebenbedingungen hat (ohne Aktivierung der Wochenruhezeit durch Doppelfrei). Beispiel: Sei ein Turnus mit fünf zulässigen Schichtarten gegeben, von denen zwei schwer sind. Die maximale Freiblocklänge sei vier und die maximale Dienstblocklänge sechs. Dann ergibt das 5+149⋅Wochen Variablen (davon 49⋅Wochen binär) und 54+368⋅Wochen Nebenbedingungen. Die Problemgröße hängt also linear von der Anzahl der Fahrer eines Turnus ab. Lediglich die Anzahl der Elemente ungleich 0, die für die Spreizung benötigt werden, kann quadratisch wachsen. Dies tritt jedoch nur dann ein, wenn sich der Wunschanteil mindestens einer schweren Schichtart antiproportional zur Turnusgröße verhält, d.h. wenn die absolut zu verteilenden Schichten einer schweren Schichtart bei wachsender Turnusgröße konstant bleiben. Dies ist ein eher unrealistischer Fall. Allerdings wächst die Anzahl der Elemente ungleich 0 quadratisch mit der Anzahl der Schichtarten. Es ist also darauf zu achten, die Anzahl der Schichtarten nicht zu groß werden zu lassen. Außerdem sollte der Benutzer Schichtarten, die im Turnus nicht zulässig sind, auch wirklich explizit verbieten. 5.3.6 Alternativen und Erweiterungen des Modells Falls ein Freiblock „in der Nähe“ eines Wochenendes (z.B. Freitag und Samstag oder Sonntag und Montag frei) höher bewertet werden soll als ein Freiblock an Werktagen, können die zu diesen Blöcken gehörenden Variablen dofj stärker gewichtet werden. Zur Wahrung der Nichtnegativität der Zielfunktion muß dann ein höherer Wert als bisher addiert werden. Auch die von Hare [22] vorgeschlagene Idee, Wochenenden entweder ganz oder gar nicht frei zu belegen, kann einfach in das Modell ergänzt werden, indem man x0,w+5 = x0,w+6 für alle Wochen w∈ W fordert. Hierbei können sogar noch binäre Variablen eingespart werden. Das gleiche gilt, wenn einzelne Matrixeinträge durch den Benutzer vorbelegt werden können (xij = 1). Die Variablen sind dann fixiert und müssen bei der Lösung des Modells nicht mehr betrachtet werden. 5.4 Strategien bei der Lösung mit Hilfe eines LP-Solvers In diesem Abschnitt soll auf die Strategien bei der Lösung des gemischt ganzzahligen Problems mit CPLEX MIP eingegangen werden. Dabei werden verschiedene Strategien zur Auswahl einer Variable und eines Knotens für das in Abschnitt 5.1 beschriebene Branch-and-Bound-Verfahren aufgezeigt und anhand eines kleinen Beispiels verglichen. Es werden die bereits in Abschnitt 5.1 eingeführten Bezeichnungen verwendet. Außerdem sei x(k) = (x1(k), ..., xn(k))T eine Lösung des relaxierten Problems (RMIP)k am Knoten k des Verzweigungsbaums. 5 Lösung mittels linearer Programmierung 66 5.4.1 Auswahl einer Variable Bei der Auswahl der Verzweigungsvariable aus der Menge der in der Lösung des relaxierten Problems nicht ganzzahlig belegten Variablen gibt es grundsätzlich zwei Möglichkeiten, nämlich statische und dynamische Prioritätslisten. Bei statischen Prioritätslisten ist von vornherein festgelegt, in welcher Reihenfolge die Variablen zur Verzweigung benutzt werden. Dies kann am einfachsten geschehen, indem die Relevanz der Variablen durch einen Experten festgelegt wird. Hierzu kann man sich an den ökonomischen Bedeutungen der Variablen orientieren. Je einflußreicher eine Entscheidung (im konkreten Fall für oder gegen eine Belegung) auf das Ergebnis ist, desto früher sollte sie im Rahmen des Branch-and-Bound getroffen werden. Um eine statische Prioritätsliste festzulegen, kann man darüber nachdenken, wie man von Hand einen Turnus generieren würde. Zunächst würde man die Tage betrachten, an denen die Bedarfe der Kapazität des Turnus am nächsten kommen, d.h. an denen die Entscheidungsschranken am engsten formuliert sind. Dies sind in der Regel die Wochenenden, da hier nur so viele Fahrer wie unbedingt nötig eingesetzt werden. Außerdem sind die freien Tage im Dienstplan von besonderer Relevanz. Während das Austauschen einer Schichtart-Belegung gegen eine andere nur geringe Auswirkungen auf die Gesamtstruktur des Turnus hat, wird beim Hinzufügen oder Entfernen eines freien Tages das gesamte Dienst-Frei-Schema verändert. Dadurch sind eventuell bereits getroffene Schichtart-Belegungen nicht mehr optimal. Es ist also wichtig, die Entscheidung, ob ein Tag frei sein soll oder nicht, mit höherer Priorität zu treffen als die Entscheidung mit welcher Schichtart er belegt werden soll (falls er nicht frei ist). Damit ergibt sich folgende Prioritätsliste: 1. Verteilung der Freis für die Wochenenden. Dabei werden die Wochenenden zunächst abwechselnd frei und nicht frei belegt. Damit ist ein Kompromiß zwischen Turnussen mit vielen und wenigen freien Wochenenden gewählt. 2. Verteilung der Schichtarten am Wochenende 3. Belegung der übrigen Matrixeinträge Bei dieser Prioritätsliste macht man sich die schon von Benett und Potts ([4], S.16) verfolgte Idee zu Nutze, erst ein Dienst-Frei-Schema zu generieren, und dann die Schichten zu verteilen. Der LP-Ansatz mit Prioritätsliste überwindet diese Trennung, versucht also eine optimale Lösung für das Gesamtproblem zu finden, berücksichtigt bei der Suche jedoch die Idee, freie Tage zuerst festzulegen. Eine Alternative zu statischen Prioritätslisten stellen dynamische Prioritätslisten dar. Hierbei wird die Variable, die zur Verzweigung benutzt werden soll, abhängig von der Lösung des aktuellen relaxierten Problems (RMIP)k festgelegt. Sei nun Kk die Menge der Indizes der in der Lösung x(k) nicht ganzzahlig belegten Variablen. Aus dieser Menge ist nun ein Element auszuwählen, und es ist festzulegen, in welcher Richtung die zugehörige Variable zuerst fixiert werden soll (xi(k) = 0 oder xi(k) = 1). Dazu werden Strafkosten berechnet, die sich ergeben, wenn xi(k) in einen ganzzahligen Wert übergeht. Seien upi(k) und dni(k) die Kosten, die entstehen, wenn xi(k) um eine „Einheit“ erhöht bzw. erniedrigt wird. Dann ergeben sich die Strafkosten zu (119) Dup,i(k) = upi(k)⋅(1– xi(k)) bzw. (120) Ddn,i(k) = dni(k)⋅xi(k) und man wählt die Variable und die Verzweigungsrichtung gemäß 5 Lösung mittels linearer Programmierung { { (k ) max min D up,i , D dn,i i∈ K k (k ) 67 }}. Damit wird das Ziel verfolgt, die Variablen, deren Verletzungen der Ganzzahligkeitsbedingungen am „teuersten“ sind, zuerst zu fixieren, d.h. es werden die Variablen zuerst fixiert, bei denen die größten Auswirkungen auf die Zielfunktion erwartet werden. Dabei wird natürlich die Richtung zuerst gewählt, in der die geringeren Strafkosten anfallen (vgl. Nemhauser und Wolsey ([30], S.361)). (k) (k) Nun stellt sich die Frage, wie die upi und dni ermittelt werden. Hier stehen verschiedene Möglichkeiten zur Verfügung. (k) (k) Setzt man upi = dni = 1 so ergibt sich die Priorität der „Maximalen Unzulässigkeit“, d.h. es wird nach der Variable verzweigt, die die Ganzzahligkeitsbedingung am stärksten verletzt. Genauere Schätzer ergeben sich, wenn man das Simplex-Tableau einbezieht, also berechnet, wie sich die Werte der übrigen Variablen und der Zielfunktion verändern, (k) wenn xi manipuliert wird. Dieses Vorgehen ist unter dem Begriff „penalties“ bei Walukiewicz ([40], S.83-85) oder Garfinkel ([19], S.6-9) beschrieben. Speziell im Fall binärer Variablen können die reduzierten Kosten im Simplex-Tableau verwendet werden. Wenn die nicht ganzzahlig belegte Variable xi(k) = 0 gesetzt wird, muß nämlich zwangsläufig eine Nichtbasisvariable in die Basis aufgenommen werden (außer bei Degeneriertheit). Das gleiche tritt ein, wenn xi(k) = 1 gesetzt wird, also die obere Schranke erreicht. Damit wird eine Schlupfvariable zu 0 und muß ebenfalls durch eine Nichtbasisvariable ersetzt werden. Die entstehenden Kosten können durch die reduzierten Kosten der neuen Variable geschätzt werden. Diese Idee ist auch bei Nemhauser und Wolsey ([30], S.363) beschrieben. Eine weitere Möglichkeit, upi(k) und dni(k) zu schätzen, ist unter dem Namen „pseudo costs“ bekannt. Dabei wird nach einer Verzweigung mittels einer Variablen xi am Knoten k die Kostenveränderung gemäß der folgenden Formel berechnet: (121) upi = f ( x (k + 1) ) − f ( x (k ) ) (122) dni(k) = 1− xi (k ) f ( x (k + 2 ) ) − f ( x (k ) ) xi (k ) Dabei sei f(x(k+1)) der Zielfunktionswert des relaxierten Problems nach der Verzweigung gemäß xi = 1 und f(x(k+2)) der Zielfunktionswert des relaxierten Problems nach der Verzweigung gemäß xi = 0. Die so berechneten upi(k) und dni(k) können nun im weiteren Verlauf des Verfahrens als Schätzer für die Verzweigung mittels der Variablen xi verwendet werden. Ist bereits in mehreren Ästen des Verzweigungsbaumes mittels xi verzweigt worden, können auch Durchschnittswerte berechnet werden. Näheres hierzu findet man z.B. bei Forrest, Hirst und Tomlin ([17], S.757 und S.760). Bezogen auf das Problem der Turnusplanung ergeben sich aus den beschriebenen Verzweigungsstrategien die Nachteile, daß die Menge Sk recht ungleichmäßig geteilt wird. Die Verzweigung nach xi = 0 stellt i.d.R. kaum eine Einschränkung für das Problem dar, denn es entspricht der Nicht-Belegung eines Matrixeintrages des Turnus, so daß noch alle weiteren Belegungen in Betracht kommen. Demgegenüber entspricht die Fixierung xi = 1 der Belegung eines Matrixeintrages, der dann im weiteren nicht mehr betrachtet werden muß. 5 Lösung mittels linearer Programmierung 68 Dieses unerwünschte Verhalten ist auf eine Nebenbedingung der Form ∑x i = 1 zu- i∈ Q rückzuführen. Eine solche Bedingung existiert im Modell der Turnusplanung für jeden Matrixeintrag, also die meisten binären Variablen (vgl. x 0 j + ∑x ij = 1 aus Abschnitt i∈I 5.3.2.1). In solchen Fällen kann man versuchen, die Menge Q anders zu teilen und gemäß ∑x i∈ Q1 i = 0 bzw. ∑x i = 0 zu verzweigen, wobei Q1 und Q2 eine geeignete Zerle- i∈ Q 2 gung von Q bilden: Q = Q1∪ Q2 und Q1∩ Q2 = {} . Man mache sich klar, daß sich auch die übliche Verzweigung auf diese Weise darstellen läßt (Q1 = {xi}). Betrachtet man eine Lösung des relaxierten Problems der Turnusplanung, so sind die Matrixeinträge in der Regel mit mehreren Schichtarten belegt, also z.B. mit einer halben Frühschicht und einer halben Tagesschicht. Möglicherweise wird so ein günstigerer Schwerpunkt (als Konvexkombination der Schwerpunkte der einzelnen Schichtarten) realisiert, wodurch weniger Kosten für die Standardrollierung entstehen. Eine Möglichkeit, die Menge Q sinnvoll zu teilen, besteht nun darin, den sich bei Belegung mit mehreren Schichtarten ergebenden durchschnittlichen Schwerpunkt zu berechnen. Dann werden alle Variablen, die eine Schichtart mit kleinerem Schwerpunkt repräsentieren, in die Menge Q1 aufgenommen, während alle Variablen, die eine Schichtart mit größeren Schwerpunkt repräsentieren, in die Menge Q2 kommen. Danach wird gemäß der oben beschriebenen Regel verzweigt und in beiden Fällen kann der vorherige durchschnittliche Schwerpunkt nicht mehr realisiert werden, d.h. die aktuelle Lösung wird unzulässig. Das gerade am Beispiel der Schichtarten beschriebene Prinzip wird auch als Formulierung von „special ordered sets“ bezeichnet und ist bei Forrest, Hirst und Tomlin ([17], S.767) und Garfinkel ([19], S.16-17) erläutert. Voraussetzung ist lediglich, daß die Gewichte der einzelnen Variablen, in unserem Fall also die Schichtartschwerpunkte, paarweise verschieden sind. Da ein Frei in unserem Modell genau wie eine Schichtart behandelt wird, kann einem Frei z.B. der Schwerpunkt 0 zugewiesen werden. Damit sind die wichtigsten Strategien zur Auswahl einer Verzweigungsvariablen beschrieben. Nun soll auf die Knotenwahl eingegangen werden. 5.4.2 Auswahl eines Problems (Knotenwahl) Es gibt verschiedene Strategien, ein Problem Pk∈ IP, also einen Knoten aus der Menge der aktuellen Knoten auszuwählen. Eine häufig verwendete einfache Strategie orientiert sich an dem LIFO-Prinzip (Last In First Out). Dabei wird immer das Problem weiter zerlegt, das als letztes in die Menge IP aufgenommen wurde. Dies entspricht einer Tiefensuche im Baum. Der Vorteil einer solchen Tiefensuche ist, daß i.d.R. schnell eine zulässige Lösung gefunden wird, da mit zunehmender Tiefe immer mehr Variablen fixiert werden. Außerdem ergibt sich das neue Problem Pk meist direkt aus dem aktuellen Problem, indem eine zusätzliche Nebenbedingung ergänzt wird. Dadurch wird die aktuelle Lösung zwar primal unzulässig, bleibt jedoch dual zulässig, was bei Verwendung des dualen Simplex-Algorithmus ausgenutzt werden kann. Näheres hierzu findet man bei Nemhauser und Wolsey ([30], S.30-41). 5 Lösung mittels linearer Programmierung 69 Die der Tiefensuche entgegengesetzte Strategie ist die Breitensuche (First In First Out), die jedoch in kommerziellen Programmen kaum Anwendung findet. Statt dessen wird oftmals die best-bound Strategie verwendet. Diese wählt jeweils das Problem aus der Menge IP für die weitere Betrachtung aus, das die geringste mit Hilfe des relaxierten Problems berechnete Schranke hat. Diese Strategie bietet sich besonders dann an, wenn die Lösung des relaxierten Problems bereits nahezu ganzzahlig ist. Aufbauend auf den bereits im letzten Abschnitt beschriebenen Strafkosten kann auch für jedes Problem Pk∈ IP ein Schätzer ek (estimate) berechnet werden. Hierzu werden für alle Variablen die Kosten zu der unteren Schranke addiert, die bei Fixierung der Variablen auf den günstigsten ganzzahligen Wert anfallen: (123) ek = f(x(k)) + ∑ min{D (k ) up,i , D dn,i i∈ K k (k ) } Es wird also jeweils das Pk∈ IP gewählt, das die geringsten geschätzten Kosten ek aufweist. Dies führt zu der Knotenwahl gemäß der „best-estimate“-Regel (vgl. z.B. Forrest, Hirst und Tomlin ([17], S.757)). 5.4.3 Vergleich der Strategien Jetzt werden die oben beschriebenen Strategien anhand eines kleinen Beispiels getestet. Bei dem Beispiel handelt es sich um einen 5-Wochen-Turnus, der aufgrund seiner geringen Größe den Vorteil bietet, daß das Verfahren nur wenige Minuten benötigt. So können die verschiedenen Strategien ohne großen Zeitaufwand verglichen werden. Kosten 36000 34000 CPLEX Standard 32000 30000 28000 mit ORD, PC, EST, SOS 26000 24000 22000 20000 00:00 02:00 04:00 06:00 08:00 Zeit [Minuten] Abbildung 13: Verschiedene Lösungsstrategien In der Abbildung ist einerseits die Lösung mit der CPLEX-Standardstrategie und andererseits die Lösung bei Verwendung der im letzten Abschnitt beschriebenen Prioritätslisten (statisch und dynamisch), Knotenwahl gemäß „best-estimate“ und Verwendung von special ordered sets verglichen. Jede einzelne dieser Strategien trägt ein wenig zur Verbesserung des Laufzeitverhaltens bei. Aus Gründen der Übersichtlichkeit sind nicht alle möglichen Kombinationen der Strategien in die Graphik aufgenommen. Jede Lösung, die im Laufe des Lösungsprozesses entstanden ist, ist im Diagramm durch einen Punkt gekennzeichnet. Der Lösungsprozeß ist durch eine Linie dargestellt, was allerdings nicht bedeuten soll, daß sich die Lösung kontinuierlich entwickelt hat. Der letzte, besonders markierte Punkt bedeutet das Ende des Branch-and-Bound- 5 Lösung mittels linearer Programmierung 70 Prozesses, also den Zeitpunkt, an dem die Optimalität der aktuellen Lösung gezeigt ist. Es handelt sich nicht um eine neue Lösung. Man erkennt deutlich, daß die optimale Lösung durch die verbesserte Strategie bereits nach einem Bruchteil der Zeit gefunden wird. Natürlich ist die Aussagefähigkeit dieser Abbildung begrenzt, da sie nur die Entwicklung der Lösung an einem konkreten (recht kleinen) Beispiel, beschreibt. Den günstigeren Verlauf der Kurve findet man jedoch in fast allen getesteten Beispielen. Zunächst wird in relativ kurzer Zeit eine gute Lösung gefunden, die dann auch nach längerer Rechenzeit nur noch geringfügig verbessert werden kann. 5.5 Generierung von Wochenendverteilungen zur Laufzeitverbesserung Im letzten Abschnitt wurde die Rechenzeit des Verfahrens bereits deutlich gegenüber der CPLEX-Standardstrategie verbessert, so daß sich für kleine Turnusse vertretbare Laufzeiten ergeben. Für größere Beispiele von 12 Wochen und mehr wächst die Anzahl der im Laufe des Branch-and-Bound-Verfahrens untersuchten Knoten und damit auch die Zeit zur Ermittlung einer Lösung jedoch stark an. Da die Anzahl der binären Entscheidungsvariablen linear mit der Turnusgröße wächst, erhöht sich gleichzeitig die Menge aller möglichen Lösungen exponentiell. Beispiel: Es seien fünf verschiedene Schichtarten gegeben. Berücksichtigt man die freien Tage, so hat jeder Matrixeintrag sechs mögliche Belegungen. Damit gibt es abhängig von der Turnusgröße im schlimmsten Fall 57⋅Wochen verschiedene Turnusse, die natürlich in der Regel nicht alle zulässig sind. Im worst-case müssen alle Möglichkeiten im Laufe des Branch-and-Bound untersucht werden. Damit würde die Anzahl der im Laufe des Verfahrens untersuchten Knoten exponentiell mit der Turnusgröße wachsen. Der Vorteil des Branch-and-Bound ist jedoch, daß in den meisten Fällen nicht alle Knoten untersucht werden müssen. Statt dessen kann die Suche in einem Zweig des Baumes insbesondere dann abgebrochen werden, wenn eine ganzzahlige Lösung gefunden wurde oder wenn der Zielfunktionswert schlechter als der einer bisher bekannten Lösung wird (vgl. Abschnitt 5.1). Je früher einer dieser Fälle im Zerlegungsbaum eintritt, desto geringer ist die Anzahl der insgesamt betrachteten Knoten und damit die Laufzeit. Demnach ist es also von besonderer Relevanz, die Verzweigungen sinnvoll zu wählen, die zu Beginn, also in den höchsten Ebenen des Zerlegungsbaumes stattfinden. Hierzu soll wieder die im letzten Abschnitt entwickelte Prioritätsliste betrachtet werden. Dort wurde festgelegt, daß zunächst über die Variablen verzweigt werden soll, die die freien Tage an den Wochenenden repräsentieren (außer natürlich, wenn diese Variablen in der Lösung des relaxierten Problems bereits ganzzahlig belegt sind). Die Verzweigung über diese Variablen weist folgende schwere Nachteile auf: • Es werden viele Wochenendverteilungen generiert, die so schlecht sind, daß sie für eine gute Lösung ohnehin nicht in Frage kommen. • Es werden keine Symmetrien berücksichtigt: Aufgrund der zyklischen Struktur eines Turnus ergibt sich stets eine gleichwertige Lösung, wenn alle Belegungen um eine oder mehrere Wochen nach unten verschoben werden. So sind die folgenden Tur- 5 Lösung mittels linearer Programmierung 71 nusse durch zyklische Verschiebung auseinander hervorgegangen. Entsprechend haben sie identische Kosten. Im Rahmen des Branch-and-Bound werden die Turnusse jedoch separat untersucht, da sie bezüglich der Modellierung, die sich an den einzelnen Matrixeinträgen orientiert, verschieden sind. Abbildung 14: Zyklisches Verschieben von Turnussen Um diese Nachteile zu beheben, sollen nun alle sinnvollen Verteilungen der freien Wochenenden vorab generiert und über neue Entscheidungsvariablen in das Modell integriert werden. Konkret werden zunächst mit Hilfe eines rekursiven Algorithmus alle möglichen Wochenendverteilungen erzeugt und in eine Menge V aufgenommen. Nachfolgend werden alle Verteilungen entfernt, die nicht dem vorgeschriebenen Anteil freier Wochenenden genügen oder die sich durch zyklische Verschiebungen aus anderen ergeben. Damit ist das Problem der Symmetrien zumindest dann weitgehend behoben, wenn der Turnus freie Wochenenden enthalten soll, was in der Regel der Fall ist. Um die Anzahl der Wochenendverteilungen weiter sinnvoll einzuschränken, werden zwei neue Parameter zur Verfügung gestellt: Parametername Maximale Folge freier Wochenenden Maximale Folge nicht freier Wochenenden Kurzname MaxfWoEiF Dimension --- Wertebereich 1,...,30 Voreinst. 2 MaxnfWoEiF --- 1,...,30 2 Tabelle 30 Mit Hilfe dieser Parameter kann festgelegt werden, wie viele aufeinanderfolgende Wochenenden höchstens frei bzw. nicht frei sein dürfen. Wie bereits in Abschnitt 3.2.1.4 definiert, ist ein Wochenende genau dann frei, wenn sowohl Samstag als auch 5 Lösung mittels linearer Programmierung 72 Sonntag frei sind. Entsprechend ist ein Wochenende genau dann nicht frei, wenn mindestens einer der beiden Tage nicht frei ist. Alle Wochenendverteilungen, die den Einstellungen dieser neuen Parameter nicht genügen, werden nun ebenfalls aus der Menge V entfernt. Die folgende Tabelle zeigt, wie sich die Anzahl möglicher Wochenendverteilungen für einen 12-Wochen-Turnus entwickelt: Sukzessive Einschränkungen bei den Wochenendverteilungen Alle Möglichkeiten Alle Möglichkeiten mit 50% freier Wochenenden Entfernen von Verteilungen, die durch zyklisches Verschieben aus anderen hervorgehen Außerdem MaxfWoEiF = 2 Außerdem MaxnfWoEiF = 2 Anzahl möglicher Verteilungen (|V|) 212 = 4096 12 6 = 925 80 20 13 Tabelle 31 Die Generierung der Verteilungen der freien Wochenenden ist folgendermaßen realisiert: Es wird in der ersten Woche des Turnus gestartet und ein rekursiver Algorithmus aufgerufen, der zunächst einen Block nicht freier und dann einen Block freier Wochenenden einfügt. Mit der entstandenen (halbfertigen) Verteilung ruft sich der Algorithmus solange selbst wieder auf, bis der gesamte Turnus durchlaufen ist. Sobald eine Verteilung unzulässig wird, wird sie nicht weiter betrachtet. Weitere Details finden sich im Programmcode (Klasse TP_Optimierer). Für jede der möglichen Wochenendverteilungen v∈ V wird nun eine neue binäre Entscheidungsvariable in das Modell eingeführt: 1, falls die freien Wochenend en gemäß Verteilung v angeordnet sind wof v = 0, sonst. Da jeweils genau eine Wochenendverteilung aktiv sein muß, wird die folgende Nebenbedingung in das Modell aufgenommen: (124) ∑ wof v =1 v∈ V Seien k1(v),...,kn(v)(v)∈ {0,1,...,Wochen} die Nummern der Wochenenden, die gemäß Wochenendverteilung v∈ V frei sein sollen. Dann wird dies durch die folgenden Nebenbedingungen gesichert: (125) wofv – x0,7⋅k ≤ 0 ∀ k = k1(v),...,kn(v)(v), v∈ V Da alle v∈ V den Mindestanteil der freien Wochenenden gewährleisten, kann die vorher hierfür vorgesehene Nebenbedingung 5.3.2.4 entfallen. Mit dieser neuen Modellierung wird nun noch einmal das Beispiel aus dem letzten Abschnitt gerechnet und in das gleiche Schaubild ergänzt: 5 Lösung mittels linearer Programmierung 73 Kosten 36000 CPLEX Standard 34000 32000 mit ORD, PC, EST, SOS 30000 28000 zusätzlich Wochenenden generiert 26000 24000 22000 20000 00:00 02:00 04:00 06:00 08:00 Zeit [Minuten] Abbildung 15: Verschiedene Lösungsstrategien Man erkennt die deutliche Verbesserung der Laufzeit. Die beste Lösung wurde bereits nach 9 Sekunden gefunden. Dies ist besonders für größere Beispiele von Vorteil, bei denen nicht bis zum Ende gerechnet werden kann. Für ein anderes Beispiel mit 6 Wochen konnte die Laufzeit von etwa 29 Stunden auf weniger als 4,5 Stunden reduziert werden. Außerdem wurde auch hier die beste Lösung bereits deutlich früher gefunden. 5.6 Ergebnisse In diesem Abschnitt soll nun ein konkreter Turnus berechnet werden. Aufgrund der Überlegungen der vorangegangenen zwei Abschnitte ergibt sich die folgende Branchand-bound-Strategie, die für diese und alle weiteren Auswertungen benutzt wurde: Prioritätsliste zur Variablenwahl: 1. Verzweigung über die Variablen für die Wochenendverteilungen (wofv) 2. Verzweigung über die Variablen für Belegungen (xij) gemäß special ordered sets Weitere Einstellungen: • Knotenwahl gemäß „best-estimate“ • Variablenwahl mittels obiger Prioritätsliste und dann gemäß „pseudo reduced costs“ • Backtrack-Faktor 0,85 (Ziel: Speicher sparen und möglichst schnell zulässige Lösungen erzeugen, näheres hierzu bei Walukiewicz ([40], S.85) Zur Implementierung ist noch zu erwähnen, daß die Prioritätsliste als ORD-Datei und die special ordered sets als SOS-Datei an CPLEX übergeben werden und daher ebenso leicht auf Fehler überprüft werden können wie die LP-Datei, in der das lineare Programm übergeben wird. Bei allen nicht erwähnten Einstellungen wurden die Standards der CPLEX-Version 6.5.1 verwendet. Weitere Informationen hierzu finden sich im CPLEX Reference Manual [9]. 5 Lösung mittels linearer Programmierung 74 Nun soll der folgende Turnus betrachtet werden, der sich derzeit bei der BSAG im Einsatz befindet: Abbildung 16: Alter Turnus mit Rückwärtsrollierung In dem Turnus tritt ein Dienstblock der Länge 1 auf. Nun sei angenommen, die zu dem Turnus gehörende Fahrergruppe wolle einen neuen Turnus, der keinen solchen Dienstblock enthält, sonst aber etwa die gleichen Eigenschaften wie der alte Turnus aufweist. Es soll also automatisch ein neuer Turnus generiert werden, der die gleichen Schichtart-Belegungen enthält, die gleiche Anzahl freier Tage, die gleichen Nachtruhen, usw.. Nach etwa 30 Stunden wurde der folgenden Abbildung 17 dargestellte Turnus im Rahmen des Branch-and-Bound gefunden. 5 Lösung mittels linearer Programmierung 75 Abbildung 17: Neuer Turnus mit minimaler Dienstblocklänge 2 In der folgenden Tabelle sind die gewählten Gewichte der einzelnen Kostenarten dargestellt und die Kosten der beiden Turnusse werden verglichen. Die Kostenarten „Unterschreitung Schichtart“ und „Wunschanteil Schichtart“ weisen jeweils Kosten von 0 auf, weil alle Schichtart-Belegungen durch den alten Turnus vorgegeben wurden. Sie sind darum nicht in der Tabelle aufgeführt. Kostenart Freiblock- Vertikale bildung GV freie Gew./Kosten Tage Gewicht Alter Turnus Neuer Turnus 220 369600 387200 900 3600 1800 GV freie Wochenenden 1000 2000 1000 Spreizung RückStandard- Gesamtwärtsrollierung kosten rollierung 400 34000 21600 20 59380 60480 2 34166 29720 --502746 501800 Tabelle 32 Man erkennt, daß die einzelnen Kostenarten des neuen Turnus zumeist geringere Werte aufweisen als beim alten Turnus. Lediglich die Kosten zur „Freiblockbildung“ und „Rückwärtsrollierung“ sind geringfügig schlechter. D.h., daß der neue Turnus alle definierten Zielkriterien fast genauso gut oder sogar besser erfüllt wie der ursprüngliche. Außerdem realisiert er die gewünschte minimale Dienstblocklänge von 2. 6 Lösung mittels Simulated Annealing 76 6 Lösung mittels Simulated Annealing In diesem Kapitel soll die Turnusoptimierung für eine Fahrergruppe mit Hilfe des Simulated Annealing gelöst werden. Zunächst wird das allgemeine Konzept des Verfahrens kurz dargestellt, wobei die Beschreibung eng an Eglese [14] angelehnt ist. In den darauffolgenden Abschnitten wird auf die Maßnahmen zur konkreten Umsetzung des Verfahrens für die Turnusplanung eingegangen. Eine kurze Beschreibung des Simulated Annealing und eine Übersicht über weitere Metaheuristiken findet sich bei Osman und Kelly [31]. Ausführlicher ist das Verfahren bei Aarts, Korst und van Laarhoven [1] beschrieben. 6.1 Das Konzept des Simulated Annealing Simulated Annealing ist ein Verfahren, das auf einer endlichen Menge S von Lösungen eines kombinatorischen Optimierungsproblems arbeitet. Sei dieses nun o.B.d.A. ein Problem von der Form (P) min{f(x): x∈ S}. Es wird versucht, ausgehend von einer bestehenden Lösung durch geeignete Übergänge eine neue Lösung zu generieren. Damit basiert das Simulated Annealing auf dem Prinzip der lokalen Suche. Eine einfacher Algorithmus, dem die gleiche Idee zu Grunde liegt, ist der folgende: Algorithmus „Lokale Verbesserung“ Initialisierung: Bestimme eine Startlösung i∈ S. Wiederhole Generiere einen Nachbarn j von i. Berechne die Kostendifferenz δ:= f(j)–f(i). Falls δ< 0, Dann i := j. Bis f(j) ≥ f(i) für alle j in der Nachbarschaft von i. Die Nachbarschaft NB(i, o) einer Lösung i sei dabei die Menge aller Lösungen, die erzeugt werden können, indem auf der Lösung i eine Operation vom Typ o ausgeführt wird. Die Nachbarschaft NB(i, o) wird also durch die Menge der möglichen Operationen definiert, die auch moves oder Übergänge genannt werden. Eine Lösung i heißt „lokal optimal“ bezüglich der Nachbarschaft, wenn sich in N(i, o) keine bessere Lösung befindet (vgl. Reeves [34], S. 5). Der oben beschriebene Algorithmus, der auch als Abstiegsverfahren bezeichnet wird, terminiert also stets in einem lokalen Minimum. Ob es sich dabei auch um ein globales Minimum handelt, hängt zum einen von der gewählten Startlösung und zum anderen von der Definition der Nachbarschaft, also von den zur Verfügung gestellten moves, ab. In der Regel existieren jedoch viele lokale Optima. Eine einfache Möglichkeit, verschiedene lokale Optima zu finden, besteht darin, eine lokale Suche von unterschiedlichen Startlösungen aus zu beginnen (vgl. Aarts, Korst und van Laarhoven [1], S.93). Dann kann das beste lokale Optimum verwendet werden. Das Simulated Annealing erweitert nun die lokale Verbesserung, indem es mit einer gewissen Wahrscheinlichkeit auch moves zuläßt, die zu einer Lösung mit höheren Kosten führen. Diese Wahrscheinlichkeit wird jedoch im Laufe des Verfahrens abgesenkt, so 6 Lösung mittels Simulated Annealing 77 daß in einem späten Stadium fast nur noch moves zugelassen werden, die zu einer Lösung mit geringeren Kosten führen. Dadurch besteht die Möglichkeit, lokale Minima in einer frühen Phase des Verfahrens wieder zu verlassen. Das Verfahren wurde erstmals 1983 erfolgreich umgesetzt. Die Idee des Simulated Annealing („simuliertes Abkühlen“) stammt aus der Thermodynamik. Betrachtet man das Abkühlen eines flüssigen Kristalls, so erstarren die Moleküle in einem Zustand minimaler Energie, wenn man den Abkühlungsprozeß hinreichend langsam vollzieht. Analog zu den verschiedenen Zuständen eines Kristalls werden beim Simulated Annealing die Lösungen i∈ S betrachtet. Für jede Lösung hat man Kosten f(i), die dem Energieniveau des Kristalls entsprechen. In beiden Fällen gibt es die Temperatur T, die Einfluß darauf hat, mit welcher Wahrscheinlichkeit Übergänge in einen Zustand mit höherer Energie bzw. zu Lösungen mit höheren Kosten angenommen werden können. Wie beim physikalischen Abkühlen wird die Temperatur auch beim Simulated Annealing in mehreren Schritten, sogenannten Leveln, reduziert. Sei T(t) die Temperatur zum Zeitpunkt t, d.h. im t-ten Temperaturlevel. Außerdem gelte T(t)→ 0, für t→ ∞ . N(t) sei die Länge eines Levels. Dann läßt sich das Optimierungsverfahren durch den folgenden Algorithmus darstellen: Algorithmus „Simulated Annealing“ Initialisierung: Bestimme eine Startlösung i∈ S. Wähle eine Starttemperatur T = (0). Setze Zeit t = 0. Wiederhole Für k = 1 bis N(t) Generiere einen Nachbarn j von i. Berechne die Kostendifferenz δ:= f(j)–f(i). Falls δ≤ 0, Dann i := j. Sonst Falls random(0,1) < exp(–δ /T), Dann i := j. t := t+1 T := T(t) Bis das Abbruchkriterium erfüllt ist. Dabei sei random(0,1) eine Funktion, die eine Zufallszahl zwischen 0 und 1 liefert. Bei sehr hoher Temperatur T ist exp(–δ /T) ≈1, d.h. fast alle moves werden akzeptiert. Für T nahe bei 0 werden entsprechend fast nur noch die moves akzeptiert, die zu verringerten Kosten führen. Aarts, Korst und van Laarhoven ([1], S.98-109) zeigen, daß sich ein Temperaturlevel als homogene Markovkette darstellen läßt. Ebenso modellieren sie das gesamte Verfahren als inhomogene Markovkette und zeigen die Konvergenz gegen das globale Minimum unter der Voraussetzung, daß unendlich viele Schritte durchgeführt werden ([1], S.111). Da dies jedoch in der Praxis nicht realisiert werden kann, begnügt man sich damit, jedes Level nach einer endlichen Zahl von Schritten abzubrechen. Die Qualität der dadurch erzeugten Näherungslösung hängt stark von einigen Entscheidungen ab, die im Rahmen der konkreten Implementierung zu treffen und in der folgenden Tabelle dargestellt sind. 6 Lösung mittels Simulated Annealing Problemspezifische Entscheidungen 78 Allgemeine Entscheidungen • Wie soll die Startlösung generiert • Wie soll die Starttemperatur gewählt werden? werden? • Welche Nachbarschaft NB(i, o) wird • Wie soll die Temperatur verringert gewählt, d.h. wie sehen die werden, d.h. wie sieht die Funktion T(t) Operationen aus? aus? • Wie werden die Kosten berechnet und • Wie viele moves sollen jeweils bei aktualisiert? gleicher Temperatur ausgeführt werden, d.h. wie lang soll ein Temperaturlevel N(t) gewählt werden? • Wie soll das Abbruchkriterium formuliert werden? Tabelle 33 Auf die problemspezifischen Entscheidungen wird in den folgenden Unterkapiteln 6.2 bis 6.4 eingegangen. Die allgemeinen Entscheidungen werden in 6.5.1 beschrieben. Ein besonderer Aspekt ergibt sich noch, wenn das Problem (hier die Turnusplanung) ein restringiertes Problem ist. Die Entscheidungsschranken können einerseits durch Kostenfunktionen umgesetzt werden, so daß jede Verletzung einer Entscheidungschranke mit Kosten bestraft wird. Alternativ können auch die Startlösung und die Nachbarschaft so definiert werden, daß von vornherein nur zulässige Lösungen betrachtet werden. Da speziell in der Turnusplanung jedoch bereits das Finden einer zulässigen Lösung nicht trivial ist, soll die erste Möglichkeit umgesetzt werden. Diese Vorgehensweise wird auch von Ernst, Krishnamoorthy und Dowling ([15], S.8) und Eglese ([14], S.274) als die in solchen Fällen vielversprechendere bezeichnet. Was dabei im einzelnen zu beachten ist, wird in Abschnitt 6.5.2 beschrieben. 6.2 Bestimmung einer Startlösung Um das Simulated Annealing durchzuführen, muß zunächst eine Startlösung erzeugt werden. Dabei ist jeder Matrixeintrag des Turnus mit einer Belegung zu versehen. Hierzu gibt es verschiedene Möglichkeiten. 6.2.1 Benutzerdefinierte Startlösung Falls gewünscht kann der Benutzer eine Startlösung vorgeben, die er von Hand nach seinen eigenen Vorstellungen erzeugt. Auf diese Weise ist es auch möglich, einen bestehenden Turnus als Startlösung zu wählen, also den Status quo zu verbessern. 6.2.2 Zufällige Belegungen Eine einfache Möglichkeit, eine Startlösung zu erzeugen, besteht darin, jeden Matrixeintrag mit einer zufälligen Belegung zu versehen. Dabei soll jede Schichtart mit der gleichen Wahrscheinlichkeit ausgewählt werden, und auch eine Belegung mit Frei soll die gleiche Wahrscheinlichkeit haben wie eine einzelne Schichtart. 6.2.3 Dienst-Frei-Blöcke Eine andere Möglichkeit, eine Startlösung zu generieren, besteht darin Dienst-Frei-Blöcke zufällig auszuwählen und nacheinander in den Turnus einzufügen. Dabei besteht i i Frei 1 Frei n 6 Lösung mittels Simulated Annealing 79 ein Dienst-Frei-Block aus einem Dienstblock mit gegebenenfalls verschiedenen Schichtart-Belegungen i1 bis ik und einem Freiblock, wie die folgende Abbildung verdeutlicht: Abbildung 18: Dienst-Frei-Block Ein solcher Dienst-Frei-Block kann sich natürlich auch über ein Zeilenende eines Turnus hinaus bewegen. Durch Aneinanderreihen solcher Dienst-Frei-Blöcke läßt sich der Turnus vollständig belegen. Zunächst ist es aber erforderlich, solche Dienst-Frei-Blöcke zu generieren. Da es sinnvoll ist, nur zulässige Blöcke zu betrachten, sind die folgenden Nebenbedingungen zu beachten: • Minimale Dienstblocklänge • Maximale Dienstblocklänge • Maximale Freiblocklänge • Zulässige Schichtarten • Schichtartblocklänge • Nachtruhe Ein Algorithmus, der die Menge aller zulässigen Dienst-Frei-Blöcke (DFB) generiert, läßt sich rekursiv formulieren. Die Idee dabei ist die folgende: Erzeuge ein Objekt Dienstblock (db), das sich solange durch das Anfügen neuer Schichtarten selbst verlängert bis die maximale Länge (MaxDBL) erreicht ist. Dabei werden bei jedem Schritt alle zulässigen Zwischenergebnisse der Menge DFB hinzugefügt, und zwar mit allen erlaubten Freiblocklängen (1 bis MaxFBL). Zur Realisierung werden die folgenden Funktionen benötigt: Funktion „Dienstblock verlängern(db)“ Für alle k∈ I, die ohne Verletzung der Nachtruhe an db angehängt werden können db := db + k (Schichtart an bestehenden Block anhängen) Falls |db| ≥ MinDBL Dienstblock aufnehmen(db) Falls |db| < MaxDBL Dienstblock verlängern(db) (weiteres Anhängen von Schichtarten) Funktion „Dienstblock aufnehmen(Dienstblock db)“ Falls keine Schichtartblocklänge in db verletzt Für freiblocklänge = 1 bis MaxFBL db := db + Frei DFB := DFB + db Man setzt nun DFB ={} und ruft die Funktion „Dienstblock verlängern“ nacheinander für alle möglichen Schichtarten auf, mit denen ein Dienstblock beginnen darf. Die Funktion verlängert den übergebenen Dienstblock, der zunächst nur aus einer Schichtart besteht, indem sie sich selbst wieder aufruft (Rekursion). Diese Verlängerung erfolgt so lange, bis die maximale Dienstblocklänge erreicht ist. 6 Lösung mittels Simulated Annealing 80 Die Funktion „Dienstblock aufnehmen“ fügt an alle im Laufe der Rekursion entstehenden zulässigen Dienstblöcke ein oder mehrere Freis an und nimmt die entstehenden Dienst-Frei-Blöcke in die Menge DFB auf. Bei Aufruf beider Funktionen wird jeweils der aktuelle Dienstblock db übergeben. Der übergebene Dienstblock db wird dabei nur temporär verändert, d.h. die Änderung ist für die aufrufende Funktion nicht sichtbar (Parameterübergabe mittels „call by value“). Am Ende besteht die Menge DFB aus allen zulässigen Dienst-Frei-Blöcken. Es hat sich als sinnvoll erwiesen, nicht alle zulässigen Dienst-Frei-Blöcke aufzunehmen, weil ihre Zahl zu groß ist. Es können anhand der Standardrollierung, deren Kosten sich für jeden Dienstblock berechnen lassen, nur die bezüglich dieser Kostenart besten Dienst-Frei-Blöcke, zum Beispiel die besten 5 %, gewählt werden. Diese Auswahl kann jedoch erst erfolgen, nachdem alle möglichen Dienst-Frei-Blöcke generiert wurden. Wie viele solcher zulässigen Dienst-Frei-Blöcke es gibt, hängt stark von den Parametern MinDBL, MaxDBL, MaxFBL, NR und SABLi (i∈ I) ab. Sind durch Nachtruhe und Schichtartblocklänge keine Einschränkungen gemacht, ergeben sich |I|(MaxDBL-MinDBL+1)⋅MaxFBL verschiedene Dienst-Frei-Blöcke. Da der Parameter MaxDBL nicht größer als 6 gewählt werden sollte (siehe arbeitsmedizinische Kriterien 3.1.2.2), kann diese Zahl zwar groß werden, bleibt jedoch für eine realistische Anzahl von Schichtarten überschaubar. Nachdem die Menge DFB festgelegt ist, soll nun wieder das Problem der Erzeugung einer Folge von Dienst-Frei-Blöcken betrachtet werden. Um den Turnus vollständig zu füllen, wird eine Folge der Gesamtlänge 7⋅Wochen benötigt. Hier soll jedoch etwas allgemeiner ein Algorithmus entwickelt werden, der eine zufällige Folge von Dienst-Frei-Blöcken der Gesamtlänge m∈ IN generiert. Durch diese Verallgemeinerung kann der Algorithmus in Abschnitt 6.3.3 wiederverwendet werden. Als Ergebnis soll der Algorithmus einen Vektor mit den Belegungen der Dienst-Frei-Blöcke liefern. Dieser Belegungsvektor (bf) repräsentiert die Folge von Belegungen, die in den Turnus eingefügt werden sollen. Die geforderte Anzahl der Elemente des Vektors ist also gleich m. Die Länge eines Dienst-Frei-Blockes kann zwischen MinDBL + 1 (Dienstblock mit minimaler Länge und Freiblock aus nur einem Frei) und MaxDBL + MaxFBL (Dienst- und Freiblocklänge jeweils maximal) schwanken. Damit für jedes m ≥ MinDBL+1 auch ein Dienst-Frei-Block mit Länge m gefunden werden kann, muß (126) MaxDBL + MaxFBL ≥ 2⋅(MinDBL + 1) – 1 gelten. Andernfalls existiert zum Beispiel keine Folge von Dienst-Frei-Blöcken der Länge 2⋅(MinDBL + 1) – 1. Der Algorithmus arbeitet in zwei Phasen. Zunächst werden in Phase 1 Dienst-FreiBlöcke zufälliger Länge hinten an den Belegungsvektor angefügt und die verbleibende Länge (m) jeweils entsprechend verringert. Dies geschieht, solange (127) m > MinDBL + MaxDBL + MaxFBL gilt. Selbst wenn in einem Schritt die maximale Länge (MaxDBL + MaxFBL) gewählt wird, bleibt noch die Mindestlänge (MinDBL+1) übrig, um die geforderte Länge des Belegungsvektors einzuhalten. 6 Lösung mittels Simulated Annealing 81 Falls m ≤ MinDBL + MaxDBL + MaxFBL beginnt Phase 2. Jetzt muß die Länge des nächsten einzufügenden Dienst-Frei-Blockes entweder gleich m sein (falls m ≤ MaxDBL + MaxFBL) oder sie muß kleiner oder gleich m–(MinDBL+1) sein, damit die restliche Länge nicht unter MinDBL + 1 sinken kann. Aus diesen Möglichkeiten wird eine zufällig gewählt. Algorithmus „Dienst-Frei-Blöcke(Länge m, Belegungsfolge bf)“ Falls (MaxDBL + MaxFBL ≥ 2⋅(MinDBL + 1) – 1) oder (m ≤ MinDBL) Fehler zurückgeben. Solange (m > MinDBL + MaxDBL + MaxFBL) Wähle zufällige Länge k∈ {MinDBL+1, ..., MaxDBL + MaxFBL}. Füge die Belegungen eines zufälligen Dienst-Frei-Blockes der Länge k an bf an. Setze m = m – k. Solange (m > 0) Falls (m < 2⋅(MinDBL + 1)) Setze k = m Sonst Falls m ≤ MaxDBL + MaxFBL Wähle zufällige Länge k∈ {MinDBL + 1, ..., m – (MinDBL + 1), m} Sonst Wähle zufällige Länge k∈ {MinDBL + 1, ..., m – (MinDBL + 1)} Füge die Belegungen eines zufälligen Dienst-Frei-Blockes der Länge k an bf an. Setze m = m – k. Dem Algorithmus wird die gewünschte Länge (hier 7⋅Wochen) und eine leere Belegungsfolge übergeben. Die vom Algorithmus zurückgegebene Belegungsfolge bf kann als Startlösung für die Turnusoptimierung mittels Simulated Annealing verwendet werden. 6.2.4 Vergleich der Startlösungen Die drei vorgestellten Möglichkeiten zur Erzeugung einer Startlösung sind grundsätzlich verschieden. Einen Vergleich bezüglich des Aufwandes, der Rechenzeit und der Qualität der erzeugten Startlösung ermöglicht die folgende Tabelle. Startlösung Benutzerdefinierte Startlösung Zufällige Belegungen Dienst-Frei-Blöcke Aufwand liegt beim Benutzer Rechenzeit keine sehr geringer Aufwand sehr gering zur Implementierung hoher Aufwand zur Implementierung Qualität abhängig vom Benutzer in der Regel schlecht mittel, abhängig von befriedigend den Parametern Tabelle 34 In die Überlegungen, wie die Startlösung erzeugt werden soll, sollte man auch schon die Starttemperatur mit einbeziehen. Dabei kann zwischen den beiden Möglichkeiten unterschieden werden, eine gute Startlösung zu erzeugen und dann bei relativ niedriger Temperatur das Simulated Annealing zu starten oder irgendeine (möglicherweise schlechte) Startlösung zu erzeugen, um dann bei hoher Temperatur zu starten. In letz- 6 Lösung mittels Simulated Annealing 82 terem Fall wird die Startlösung durch die hohe Akzeptanzrate der moves ohnehin schnell verändert, so daß die Qualität keine große Rolle spielt. Beim ersten Ansatz ist es dagegen wichtig, die Startlösung zufällig zu erzeugen, damit das Simulated Annealing bei mehreren Läufen nicht stets im gleichen lokalen Minimum terminiert. Bei der konkreten Implementierung sind alle drei vorgestellten Verfahren zur Gewinnung einer Startlösung berücksichtigt. Wenn der Benutzer Belegungen in der Matrix angibt, werden diese als Startlösung verwendet. Sind die Belegungen nicht vollständig, d.h. sind nicht alle Matrixeinträge belegt, so werden die fehlenden Belegungen zufällig aufgefüllt. Sind keine Belegungen vom Benutzer vorgegeben, wird automatisch eine neue Startlösung erstellt. Aufgrund der besseren Qualität wird die Startlösung mittels der Dienst-Frei-Blöcke gewählt, falls die Dienst-Frei-Blöcke ohnehin für die Nachbarschaft „Ersetzen von Blöcken“ generiert werden müssen. Andernfalls wird die Startlösung mittels zufälliger Belegungen erzeugt. 6.3 Definition einer Nachbarschaft In den folgenden Abschnitten sollen einige Nachbarschaften vorgestellt werden. Sie können entweder einzeln oder in Kombination verwendet werden. Bei einer Kombination von Nachbarschaften müssen vorher Wahrscheinlichkeiten festgelegt werden, mit denen ein move aus einer der Nachbarschaften gewählt wird. Die moves der einzelnen Nachbarschaften bestehen aus der Manipulation eines oder mehrerer Matrixeinträge. Dabei wird die neue Belegung jeweils zufällig aus einer Menge von möglichen Belegungen ausgewählt. 6.3.1 Ändern von Belegungen Bei der einfachsten denkbaren Nachbarschaft besteht ein move aus dem Ändern einer Belegung, d.h. eine Schichtart-Belegung oder ein Frei wird durch eine andere Schichtart-Belegung oder ein Frei ersetzt. Dabei wird der zu ändernde Matrixeintrag zufällig aus der Menge aller Matrixeinträge gewählt. 6.3.2 Tauschen von Belegungen Bei dieser Nachbarschaft besteht die Operation in dem Vertauschen der Belegungen zweier Matrixeinträge. Dabei wird der erste Matrixeintrag zufällig aus der Menge aller Einträge und der zweite auf die gleiche Weise aus den verbleibenden Matrixeinträgen des gleichen Wochentages gewählt. Da sich die Anzahl der freien Tage und die Anzahl der Belegungen pro Schichtart insgesamt über den Turnus durch diese Operationen nicht ändern kann, ist diese Nachbarschaft nur in Kombination mit anderen Nachbarschaften sinnvoll. Lediglich wenn gewährleistet ist, daß die Menge der Belegungen in der Startlösung bereits den Bedarfen entspricht, kann diese Nachbarschaft auch eigenständig verwendet werden. 6.3.3 Ersetzen von Blöcken Es ist zu erwarten, daß die Optimierung mit den bisher vorgestellten Nachbarschaften oftmals nur lokale Optima liefert, die aufgrund der geringen Größe der Nachbarschaften weit vom globalen Optimum entfernt liegen. Darum soll eine komplexere Nachbarschaft beschrieben werden. 6 Lösung mittels Simulated Annealing 83 Der Grundgedanke ist zunächst, nicht einzelne Belegungen, sondern ganze Blöcke zu ändern. So könnte zum Beispiel ein Frühdienst-Block durch einen Spätdienst-Block ersetzt werden, was sicher eine sinnvolle Operation darstellt. Eine solche Operation wäre auch durch eine Folge von Operationen der anderen Nachbarschaften möglich (z.B. durch sukzessives Ändern der Belegung der einzelnen Matrixeinträge des Blockes). Sie dürfte jedoch in der Praxis kaum durchgeführt werden, da die Zwischenlösungen dann einen Block enthalten, der sowohl aus Früh- als auch aus Spätdiensten aufgebaut ist. Ein solcher Block verursacht jedoch aufgrund verletzter Nachtruhen und einer schlechten Rollierung hohe Kosten, so daß die notwendige Folge von Operationen kaum akzeptiert werden dürfte. Beim Ersetzen eines Blockes stellt sich nun die Frage „Was ist ein Block?“ Wenn nur das Ersetzen von Dienstblöcken zugelassen wird, bleibt die Position der Freis unverändert, hängt also nur von der Startlösung ab. Wird unter einem Block ein Dienstblock und der unmittelbar folgende Freiblock verstanden, so könnte durch das Ersetzen zwar die Länge des Freiblockes variiert werden, nicht jedoch das Ende. Die Endpositionen der Freiblöcke wären also fix und damit auch die Anfangspositionen der Dienstblöcke. Das gleiche Problem würde auch beim Tauschen von Blöcken auftreten, mit dem zusätzlichen Nachteil, daß nur Blöcke gleicher Längen getauscht werden könnten. Denkbar wäre noch das Ersetzen einer beliebigen Folge von Matrixeinträgen durch eine andere, wodurch zwar die Position von Freis verändert werden könnte, jedoch auch bestehende (vielleicht gute) Blöcke plötzlich an beliebiger Position abgeschnitten würden. Eine Nachbarschaft, die die meisten dieser Nachteile vermeidet, besteht im Ersetzen zweier aufeinanderfolgender Dienst-Frei-Blöcke. Es wird also zufällig eine Folge Dienstblock-Freiblock-Dienstblock-Freiblock gewählt und durch eine neue, zufällige Folge von Dienst-Frei-Blöcken ersetzt. Dies bietet folgende Vorteile: • Die Anzahl der Blöcke kann sich ändern, indem die zwei entfernten Blöcke durch nur einen oder mehr als zwei neue Dienst-Frei-Blöcke ersetzt werden. • Die Länge der Frei- und der Dienstblöcke kann sich ändern. • Es liegt nur die Position des ersten Dienstblockes und des letzen Freiblockes der neuen Folge fest. Die Position der dazwischen liegenden Freiblöcke (beim Einfügen mehrerer Blöcke) ist variabel, was insbesondere zur Gewährleistung des Mindestanteils freier Wochenenden (3.2.1.4), zur vertikalen Gleichverteilung freier Tage (3.2.2.2) und zur Gleichverteilung freier Wochenenden (3.2.2.3) wichtig ist. • Alle nicht ersetzten Dienst-Frei-Blöcke bleiben unbeschädigt erhalten. • Die einzufügenden Dienst-Frei-Blöcke können vorab in großer Anzahl generiert werden. Dazu kann der bereits in Abschnitt 6.2.3 vorgestellte Algorithmus benutzt werden, der bereits viele Entscheidungsschranken des Problems berücksichtigt (siehe Aufzählung auf S.79). Aus Gründen der Effizienz können auch die Kosten für die Standardrollierung eines jeden Blockes vorab berechnet werden, wodurch die Neuberechnung nach jedem move entfällt, und statt dessen nur die Kosten der entfernten Blöcke subtrahiert und die Kosten der neu eingefügten Blöcke addiert werden müssen. Wie bei der Startlösung werden auch hier nur die besten 5% aller möglichen Freiblöcke verwendet. 6 Lösung mittels Simulated Annealing 6.4 84 Implementierung der Kostenfunktionen und Nachbarschaften Die Qualität einer mittels Simulated Annealing erzeugten Lösung steigt in der Regel mit der Anzahl der ausgeführten moves. Damit eine gute Lösung generiert werden kann, ist es also von entscheidender Relevanz, die für jeden move nötigen Berechnungen so effizient wie möglich auszuführen, um innerhalb einer vorgegebenen Zeit möglichst viele moves ausführen zu können. Dige, Lund und Raven ([11], S.172) geben dazu unter anderem folgende Hinweise: • Der Wert der Exponentialfunktion im Algorithmus soll aus einer Tabelle abgelesen werden. • Alle Kostenfunktionen sollen als ganzzahlige Werte berechnet werden. • Die Kosten sollen nach einem move nicht neu berechnet, sondern aus den Kosten der vorherigen Lösung und die durch den move entstandenen bzw. weggefallenen Kosten berechnet werden. Da im Fall der Turnusplanung die Zeit zur Berechnung der Exponentialfunktion gegenüber der Aktualisierung der Kosten nach einem move kaum ins Gewicht fällt, ist der erste Punkt zu vernachlässigen. Die Kostenfunktionen in Kapitel 5.3.3 sind bereits so formuliert, daß sie ganzzahlige Werte liefern, also ist der zweite Punkt beachtet. Die einzige Ausnahme bildet die Kostenfunktion „Freiblockbildung“ (5.3.3.1). Für das Simulated Annealing soll im Prinzip die gleiche Kostenfunktion verwendet werden. Diese wird lediglich mit 100 multipliziert und auf den nächsten ganzzahligen Wert gerundet. Dies entspricht einer Genauigkeit von zwei Nachkommastellen. Um die Vergleichbarkeit zu einer mittels des Branch-andBound erzeugten Lösung zu erhalten, werden auch dort die Kosten für die Freiblockbildung mit 100 multipliziert. So können allenfalls kleine Differenzen hinter dem Komma entstehen, die für den Vergleich der Verfahren zu vernachlässigen sind. Nun müssen noch Kostenfunktionen für die Entscheidungsschranken formuliert werden. Dies geschieht in Abschnitt 6.4.1. Auf den letzten Punkt, nämlich die Aktualisierung der Kosten nach einem move, wird in Abschnitt 6.4.2 eingegangen. 6.4.1 Kostenfunktionen für die Entscheidungsschranken Da ein move auf einer oben definierten Nachbarschaften die Entscheidungsschranken aus Abschnitt 3.2.1 nicht immer beachtet, muß für jede Entscheidungsschranke eine Kostenfunktion eingeführt werden, die Verletzungen bestraft. Damit das Verhältnis dieser Kosten zu den Gesamtkosten etwa gleich bleibt, werden die Kosten für die Verletzungen wieder mit dem Faktor „Wochen“ multipliziert (vgl. Tabelle 35). Dies wurde schon in Abschnitt 5.3.3.4 erläutert. In der folgenden Tabelle sind die Werte der neuen Kostenfunktionen dargestellt. Da die Enscheidungsschranken bereits in Kapitel 3.2.1 ausführlich beschrieben sind, bedürfen sie hier keiner weiteren Erläuterung. Bestraft wird jeweils die Summe der Unterschreitung bei bzw. die Summe der Abweichungen. Für jede Kostenfunktion existiert wieder ein Gewichtungsfaktor. 6 Lösung mittels Simulated Annealing 85 Name der Entscheidungsschranke Wert der neuen Kostenfunktion Genau eine Belegung Da das Simulated Annealing auf einer Matrix arbeitet, die jeweils nur einen Eintrag zuläßt, ist diese Entscheidungsschranke immer erfüllt. Anzahl freier Tage Wochen⋅ AnzFrei − " Anzahl freier Tage" Bedarf Frei pro Wochentag Mindestanteil freier Wochenenden Minimale Dienstblocklänge Wochen⋅ ∑ t∈ T FreiBedarf t − " Anzahl verteilter Freis am Tag t" + Wochen⋅ Wochen ⋅AntWoE− " Anzahl freie Wochenenden" + Wochen⋅ ∑ MinDBL − " Länge von db" + , wobei DB die db∈ DB Menge aller Dienstblöcke im Turnus sei. Maximale Dienstblocklänge Wochen⋅ ∑ " Länge von db" − MaxDBL + , wobei DB die db∈ DB Menge aller Dienstblöcke im Turnus sei. Maximale Freiblocklänge Wochen⋅ ∑ " Länge von fb" − MaxFBL + , wobei FB die Menge fb∈ FB aller Freiblöcke im Turnus sei. Zulässige Schichtarten Moves, die unzulässige Schichtarten einfügen, werden nicht erlaubt. Bedarf Schichtarten Diese Entscheidungsschranke ist bereits im ursprünglichen Modell durch die Kostenfunktion „Unterschreitung Schichtart“ (3.2.2.4) aufgeweicht. Schichtartblocklänge Wochen⋅ ∑ ∑ " Länge von sb" − SABL i " i∈Ischwer Schichtblöcke sb der Schichtart i Nachtruhe Wochen⋅ ∑ NR − " Dauer der Nachtruhe nach j" + j∈ J, j nicht frei Wochenruhezeit Wochen⋅ ∑ w∈ W WRZ − max {" Wochenruhe zeit in Woche k" } k = w ,w + 1 + Tabelle 35 Die Spreizung wurde in Kapitel 3.2.2.6 teilweise als Entscheidungsschranke und teilweise als Zielkriterium beschrieben. Da sich im Rahmen des Simulated Annealing, wie bereits beschrieben, die Entscheidungsschranken nicht explizit darstellen lassen, wird die Spreizung hier nur als Zielkriterium formuliert. Dies entspricht dann dem Setzen des Parameters EinhAbs = 0, d.h. dieser Parameter ist für die Lösung mittels Simulated Annealing nicht relevant. 6.4.2 Aktualisierung der Kosten Damit die Kosten einer Lösung nicht stets von Grund auf berechnet werden müssen, soll die Berechnung mit Hilfe der Kosten der vorhergehenden Lösung erfolgen. Es wird also jeweils nur die Kostendifferenz berechnet. Da diese Berechnung für jede Kostenart und für jede mögliche Art von move (Ändern von Belegungen, Tauschen von Belegun- 6 Lösung mittels Simulated Annealing 86 gen, Ersetzen von Blöcken) implementiert werden muß, kann hier nicht auf Einzelheiten eingegangen werden. Die Beschreibung der Aktualisierung der Kosten soll exemplarisch am Beispiel der Standardrollierung erfolgen. Für weitere Details wird auf den Quellcode verwiesen. Um die aktuellen Kosten einer Kostenart zu speichern, muß zunächst eine geeignete Struktur geschaffen werden. Da die Kosten für die Standardrollierung pro Dienstblock berechnet werden, ist es zweckmäßig, für jeden Dienstblock ein Objekt zu erzeugen, das die aktuellen Kosten der Standardrollierung in diesem Block (und die anderen blockweise berechneten Kosten) speichert. Wenn nun ein move ausgeführt wird, der die Kosten für die Standardrollierung in diesem Block beeinflußt, werden die alten gespeicherten Kosten von den Gesamtkosten subtrahiert, die Kosten für den Block neu berechnet und zu den übrigen Kosten addiert. Eine Funktion, die diese Berechnungen übernimmt, kann für alle verschiedenen moves verwendet werden. Nach dem Ändern einer Belegung wird sie für den entsprechenden Dienstblock aufgerufen, wobei gegebenenfalls die Anzahl der Dienstblöcke aktualisiert werden muß, falls ein Frei entfernt oder eingefügt wurde. Beim Tauschen von zwei Belegungen muß die Funktion für beide Dienstblöcke aufgerufen werden, in denen eine Veränderung stattgefunden hat. Beim Ersetzen von Blöcken muß die Funktion für jeden ersetzten Block aufgerufen werden. Falls sich die Anzahl der Blöcke dabei ändert, sind jeweils wieder weitere Berechnungen erforderlich. Weitere Einzelheiten hierzu finden sich im Quellcode (Klasse Turnus_Kosten). 6.5 Einstellung der Parameter In diesem Abschnitt soll beschrieben werden, welche Werte für die verschiedenen Arten von Parametern sinnvoll sind und welche Möglichkeiten es gibt, die Parameter zu justieren. Dabei wird zunächst auf allgemeine Verfahrensparameter und anschließend auf die Parameter zur Gewichtung der Entscheidungsschranken eingegangen. 6.5.1 Allgemeine Verfahrensparameter Zur Einstellung der Verfahrensparameter finden sich sowohl bei Recht ([33], S.49), Eglese ([14], S.275) als auch bei Aarts, Korst, van Laarhoven ([1], S.114) wertvolle Hinweise. Die Starttemperatur soll demnach auf einen so hohen Wert gesetzt werden, daß nahezu alle moves akzeptiert werden. Wenn bereits eine gute Startlösung existiert, können auch deutlich niedrigere Einstellungswerte sinnvoll sein. Tests haben gezeigt, daß für das Problem der Turnusplanung für eine Fahrergruppe eine Starttemperatur gewählt werden sollte, die mindestens so groß ist, wie die maximalen Kosten, die durch die Verletzung einer einzelnen Entscheidungsschranke entstehen können. Diese Kosten hängen nicht nur vom Gewichtungsfaktor für die Entscheidungsschranke, sondern auch von der Turnusgröße ab (vgl. Tabelle 35, S.85). Als Anhaltspunkt für eine sinnvolle Starttemperatur kann also der Wert Wochen⋅max {Gewk} gelten, wobei Gewk k die Gewichtungsfaktoren für die einzelnen Kostenarten sind. Solche Einstellungen führen im ersten Temperaturlevel zu Akzeptanzraten, die in der Größenordnung von 10% liegen. Um eine anfängliche Akzeptanzrate fest zu schreiben, ohne jedesmal die Starttemperatur neu einstellen zu müssen, ist es auch möglich, die Starttemperatur 6 Lösung mittels Simulated Annealing 87 zunächst relativ gering zu wählen, und sie dann sukzessive so lange zu erhöhen, bis die gewünschte Anfangsaktivität erreicht wird. Dann wird die Temperatur langsam abgesenkt, indem sie nach jedem Level mit einem konstanten Faktor α<1 multipliziert wird. Es gilt T(t+1) := α⋅T(t). Der Wert α, also die „Temperaturreduktion“, sollte auf Werte zwischen 0,8 und 0,99 gesetzt werden. Die Levellänge N(t) wird konstant, also unabhängig von t, eingestellt. Alternativ wäre es auch möglich, die Levellänge in Abhängigkeit von der Größe der Nachbarschaft zu wählen. Damit würde sie dann aber nicht nur von der Größe des Turnus und der Anzahl der Schichtarten abhängen, sondern auch noch von der gewählten Art und Zusammensetzung der moves. Da auch Kombinationen verschiedener Nachbarschaften möglich sind, ginge in diesem Fall die Transparenz verloren, welche moves mit welcher Wahrscheinlichkeit aufgerufen werden. Darum ist eine konstante Levellänge implementiert worden, die der Benutzer über einen Parameter steuern kann. Nun ist noch das Abbruchkriterium festzulegen. Das Verfahren soll abgebrochen werden, falls in mehreren aufeinanderfolgenden Leveln keine Verbesserung erzielt werden konnte. Die Anzahl dieser Level wird als Kettenlänge bezeichnet und ist standardmäßig auf fünf gesetzt. Damit das Verfahren nicht zu früh abbricht, weil dieses Abbruchereignis zufällig eingetreten ist, kann außerdem eine „Endakzeptanzrate“ eingegeben werden. In diesem Fall wird erst dann abgebrochen, wenn zusätzlich die Akzeptanzrate unter den definierten Wert sinkt. 6.5.2 Gewichtungsparameter für die Entscheidungsschranken Bevor mit dem implementierten Verfahren sinnvolle Ergebnisse erzielt werden können, müssen zunächst die Gewichtungsparameter eingestellt werden. Im Fall des Simulated Annealing ist dies besonders wichtig, denn wenn die Gewichtungsfaktoren für die Entscheidungsschranken nicht ausreichend hoch gewählt sind, werden unzulässige Lösungen produziert. Allerdings sollten die Gewichte auch nicht zu hoch gewählt werden. Sonst besteht nämlich die Gefahr, daß moves, die die Entscheidungsschranken verletzen, aber vielleicht schon im nächsten move zu einer neuen, sehr guten Lösung führen, mit extrem hohen Kosten bestraft werden und daher mit großer Wahrscheinlichkeit verworfen werden. Als Beispiel hierfür kann die Nachtruhe gewählt werden. Um von einer Lösung zu einer guten anderen Lösung zu kommen, kann es nötig sein, eine Schichtart so einzufügen, daß vorübergehend die Nachtruhe verletzt wird. Ist die Entscheidungsschranke Nachtruhe jedoch zu hoch gewichtet, entstehen dabei Kosten, die so hoch sind, daß der move nicht akzeptiert wird. Um die Parameter optimal einzustellen, besteht die Möglichkeit, die Qualität der Lösungen bei einer Variation eines bestimmten Parameters zu vergleichen (Simulation). Die folgende Graphik zeigt, wie sich die Variation der Gewichtung der Kosten für die Nachtruhe auf die Einhaltung der Nebenbedingung (links) und die Gesamtkosten (rechts) der Lösung auswirkt. Jeder Punkt in der Graphik repräsentiert dabei eine Lösung. 6 Lösung mittels Simulated Annealing 88 Abbildung 19: Auswertung einer Simulation Da die Qualität der Lösungen aufgrund des randomisierten Verfahrens Schwankungen ausgesetzt ist, sind zu jedem Einstellungswert des Gewichtungsfaktors mehrere Ergebnisse dargestellt. Aus der linken Graphik erkennt man, daß das Gewicht für die Nachtruhe etwa auf 50 einzustellen ist, da bei geringeren Einstellungen oftmals die Entscheidungsschranke mißachtet wird. In der rechten Punktwolke erkennt man eine leichte Tendenz steigender Kosten mit der Erhöhung des Parameters auf Werte größer als 50, denn die meisten dieser Lösungen haben höhere Gesamtkosten als die mit geringerem Einstellungswert, obwohl keine Kosten mehr für die verletzte Entscheidungsschranke anfallen. Diese Beobachtung bestärkt die Vermutung, daß zu hohe Gewichtungsfaktoren für Entscheidungsschranken die Lösungsentwicklung beim Simulated Annealing negativ beeinflussen. 6.6 Vergleich der Nachbarschaften In diesem Abschnitt sollen die Nachbarschaften anhand von Beispielen verglichen werden. Dazu sind alle Nachbarschaften in einer gemeinsamen Klasse implementiert. Dadurch ist es möglich, abwechselnd moves aus verschiedenen Nachbarschaften auszuführen, also die Nachbarschaften zu kombinieren. 6.6.1 Ändern von Belegungen Die Nachbarschaft, die einzelne Belegungen ändert, ist die einfachste aller betrachteten Nachbarschaften. Da die Kostenänderung nach einem move extrem schnell berechnet werden kann, sind etwa 10000 moves pro Sekunde möglich. Die Nachbarschaft liefert gute Ergebnisse. 6.6.2 Tauschen von Belegungen Das Tauschen zweier Belegungen erfordert im Vergleich zu der Änderung einer Belegung etwa doppelt so viel Rechenzeit, so daß nur ca. 5000 solcher moves pro Sekunde ausgeführt werden können. Das Tauschen bietet allerdings insbesondere dann Vorteile, wenn die Schichtart-Bedarfe verglichen mit der Größe des Turnus sehr hoch sind. Dann führt das Ändern einer Belegung oftmals zur Unterschreitung der Schicht- 6 Lösung mittels Simulated Annealing 89 art-Bedarfe, so daß die Lösung unzulässig wird. Damit fallen hohe Kosten an, so daß ein ansonsten vielleicht sinnvoller move mit großer Wahrscheinlichkeit nicht akzeptiert wird. Dieser Nachteil kann behoben werden, wenn zu einem gewissen Anteil Tausche statt einfacher Belegungen ausgeführt werden. Wie groß dieser Anteil sein sollte ist in der folgenden Grafik veranschaulicht, die auf einem recht extremen Beispiel basiert. In dem Beispiel entspricht die Summe der SchichtartBedarfe genau der Turnuskapazität, so daß jede Änderung einer Belegung zu Kosten führt. Pro Einstellungswert wurden drei Simulationsläufe durchgeführt. Abbildung 20: Anteil der Tausche-moves Man erkennt, daß eine Vergrößerung des Anteils der Tausche-moves zunächst zu einer deutlichen Verbesserung der Lösung führt. Dieser Effekt ist jedoch degressiv, d.h. das Ausmaß der Verbesserung verringert sich mit zunehmendem Anteil. Zu beachten ist auch, daß mit der Vergrößerung des Anteils auch ein Anwachsen der Laufzeit verbunden ist, da Tausche die doppelte Rechenzeit benötigen. Außerdem handelt es sich bei dem getesteten Beispiel um ein Extrembeispiel. Dies spricht dafür, den Anteil an Tausche-moves nicht über 40% auszudehnen. Genauere Empfehlungen sind schwierig, da die optimale Einstellung des Parameters stark von der Probleminstanz abhängt. 6.6.3 Ersetzen von Blöcken Diese Nachbarschaft ist von den untersuchten die aufwendigste, weil ein recht hoher Implementierungsaufand zur effizienten Aktualisierung der Kosten nach einem move anfällt. Trotz dieses Aufwandes hat sich diese Nachbarschaft nicht bewährt. Obwohl die Kosten so effizient berechnet werden können, daß zur Ausführung eines moves nur (!) etwa die dreifache Rechenzeit im Vergleich zu einem „Ändern von Belegungen“move benötigt wird, können keine vergleichbaren Ergebnisse erzielt werden. Insbesondere wenn die Summe der Schichtart-Bedarfe sehr nah an der Turnuskapazität liegt, kann teilweise nicht einmal eine zulässige Lösung ermittelt werden. Dies bezieht sich sowohl auf den eigenständigen Einsatz der Nachbarschaft als auch auf die Kombination mit der Belegen-Nachbarschaft. In der folgenden Tabelle ist der Vergleich der Nachbarschaften zusammengefaßt: 6 Lösung mittels Simulated Annealing 90 Nachbarschaft moves pro Sekunde Aufwand zur Bewertung Implementierung Ändern von Belegungen Tauschen von Belegungen 10000 gering gute Ergebnisse 5000 gering Ersetzen von Blöcken 3300 hoch ideal als Ergänzung zum „Ändern von Belegungen“, insbesondere in Extremfällen mäßige Ergebnisse, insbesondere für extreme Beispiele unbrauchbar Tabelle 36 7 Vergleich der Verfahren 91 7 Vergleich der Verfahren In diesem Abschnitt soll die Eignung der beiden dargestellten Verfahren für das Problem der Turnusplanung verglichen werden. Ein solcher Vergleich findet sich auch bei Brusco und Jacobs ([6], S.81). Dort werden die beiden (und einige weitere) Methoden am Beispiel des Problems der optimalen Personalausstattung gegenübergestellt. Brusco und Jacobs kommen zu dem Ergebnis, daß das Simulated Annealing dem linearen Ansatz meist überlegen ist, weil es in kurzer Zeit gute Lösungen findet. 7.1 Allgemeiner Vergleich der Verfahren Zunächst ist anzumerken, daß es sich bei den beiden Verfahren um grundsätzlich verschiedene Methoden handelt. Das auf dem linearen Ansatz basierende Branch-andBound-Verfahren sucht systematisch den Lösungsraum ab und ist (zumindest theoretisch) in der Lage, eine optimale Lösung zu finden. Das Simulated Annealing ist demgegenüber eine lokalen Suche, also ein heuristisches Verfahren. Es ist auch anwendbar, wenn sich ein Problem nicht linear formulieren läßt. Andererseits ist es randomisiert, d.h. es ist oftmals nötig, mehrere Läufe zu starten, da es in einzelnen Fällen passieren kann, daß der Optimierungsprozeß vorzeitig in einem lokalen Optimum abbricht, das weit von einem globalen Optimum entfernt liegt. Die so erhaltene Lösung kann zudem noch unzulässig, also weitgehend wertlos sein. Aufgrund der großen Anzahl an Entscheidungsschranken ist es nämlich sehr schwierig, einen automatisch erzeugten Turnus manuell nachzubearbeiten. Ein großes Problem des Simulated Annealing-Ansatzes ist also die geeignete Einstellung der Parameter, die stark von der Probleminstanz abhängt, also immer wieder neu vorgenommen oder zumindest für jede neue Instanz kontrolliert werden muß. Dieses Problem wurde bereits in Abschnitt 6.5.2 beschrieben. Der Vergleich der beiden Verfahren ist zusammenfassend in der folgenden Tabelle dargestellt. Eigenschaften des auf dem linearen Eigenschaften des Simulated Annealing Ansatz basierenden Branch-and-Bound liefert optimale Lösung (theoretisch) gute Lösungen bei strengen Entscheidungsschranken (kleiner Lösungsraum) keine aufwendige Einstellung von Parametern Einsatz nur für lineare Modelle schnelle Näherungslösungen relativ gute Lösungen bei großen Lösungsräumen aufwendige Einstellung der Parameter (Gewichte für Entscheidungschranken) Einsatz auch für nicht lineare Modelle Tabelle 37 7.2 Vergleich anhand konkreter Beispiele Da der allgemeine Vergleich der beiden Verfahren keine Entscheidung für oder gegen eines der Verfahren zuläßt, sollen nun einige konkrete Probleminstanzen herangezogen werden. Dazu werden Beispiele mit 6, 8, 10, 12 und 16 Wochen betrachtet. Die Parametervorgaben stimmen im wesentliche überein, wobei natürlich die Bedarfe der 7 Vergleich der Verfahren 92 Kosten Schichtarten an die Turnusgröße angepaßt sind. Bei der Lösung mit dem linearen Ansatz wurde jeweils eine feste Rechenzeit vorgegeben und dann mit der bis dahin besten Lösung abgebrochen. Diese Rechenzeit wurde linear an die Problemgröße angepaßt. Sie betrug 6, 8, 10, 12 bzw. 16 Stunden. Beim Simulated Annealing wurden zu jeder Instanz drei Läufe durchgeführt, wobei die gesamte Rechenzeit in jedem Fall deutlich unter der CPLEX zur Verfügung gestellten Rechenzeit lag. Gewählt wurde dann jeweils die beste der drei Lösungen. In der folgenden Graphik sind die so erhaltenen Lösungen einander gegenübergestellt. Die gestrichelte Linie verbindet die mit der gleichen Methode erzeugten Lösungen. 150000 CPLEX 120000 Annealing 90000 60000 30000 6 8 10 12 14 16 Anzahl Wochen Abbildung 21: Vergleich der mittels CPLEX und Simulated Annealing erzeugten Lösungen Man erkennt zum einen, daß die Kosten wie erwartet mit der Problemgröße anwachsen. Das Beispiel mit sechs Wochen konnte von beiden Verfahren optimal gelöst werden, wobei beachtlich ist, daß das Simulated Annealing in allen drei Läufen im globalen Optimum endete. Bei allen anderen Instanzen ist die Optimalität der besten Lösung nicht gewährleistet. Für acht und zehn Wochen ist die Qualität der Lösung, gemessen an den Kosten, noch vergleichbar. Für die größeren oben dargestellten Beispiele lieferte das Simulated Annealing eine deutlich bessere Lösung als der lineare Ansatz. Damit läßt sich ein erstes allgemeines Ergebnis formulieren: Je größer die Probleminstanz, desto besser eignet sich der Simulated Annealing Ansatz. Von dem obigen Schaubild mag man sich sogar zu der Aussage verleiten lassen, das Annealing sei in jedem Fall die bessere Wahl. Dies ist jedoch so nicht richtig, selbst wenn man den Aufwand zur Justierung der Parameter für die Entscheidungsschranken außer Acht läßt, der natürlich auch Rechenzeit erfordert. In den obigen Beispielen lag nämlich der Anteil der durch die Bedarfe der Schichtarten geforderten Belegungen an der Turnuskapazität bei 80% oder etwas darüber. Die restlichen 20% der SchichtartBelegungen konnten beliebig gewählt werden, wobei nur noch die Wunschanteile der Schichtarten zu beachten waren. Sobald jedoch die Bedarfe der Schichtarten annähernd der Turnuskapazität entsprechen, kehrt sich der Vergleich der Verfahren um. Dies liegt daran, daß die Größe des Lösungsraums durch die restriktiven Entscheidungsschranken deutlich abnimmt. Dadurch werden im Rahmen des Branch-andBound-Ansatzes viel mehr Lösungen unzulässig, so daß die guten zulässigen Lösun- 7 Vergleich der Verfahren 93 gen schneller gefunden werden. Demgegenüber hat das Simulated Annealing enorm mit den strengen Entscheidungsschranken zu kämpfen. In dem Beispiel aus Abschnitt 5.6 schien es lange Zeit so, als könne es überhaupt keine Lösung finden, während das Branch-and-Bound relativ schnell zufriedenstellende Ergebnisse brachte. Bei der Auswertung von Abbildung 21 ist außerdem zu beachten, daß der Branch-andBound-Ansatz durchaus in der Lage ist, bessere Lösungen zu finden, wenn die Rechenzeit erhöht wird. Beim Simulated Annealing bringt eine Steigerung der Zeit nur noch geringe Vorteile. Zusammenfassend kann also festgestellt werden, daß bei der Auswahl des Verfahrens vier wichtige Kriterien zu analysieren sind: • die Größe des Probleminstanz, • die Größe des Lösungsraums, der davon abhängt, wie streng die Entscheidungsschranken formuliert sind, • die zur Verfügung stehende Rechenzeit, • die zur Verfügung stehende Zeit und Erfahrung zur Einstellung der Parameter. Eine allgemeine Entscheidung für oder gegen eines der Verfahren ist weder anhand allgemeiner Kriterien noch durch Test anhand konkreter Probleminstanzen möglich. Vielmehr muß im Einzelfall entschieden werden, welches Verfahren zu bevorzugen ist. 8 Dienst-Fahrergruppen-Zuordnung 94 8 Dienst-Fahrergruppen-Zuordnung 8.1 Problembeschreibung In diesem Kapitel soll auf das Problem eingegangen werden, zulässige Turnusse für alle Fahrergruppen zu generieren. Nachdem es nun möglich ist, für eine Fahrergruppe einen Turnus zu erzeugen, besteht eine mögliche Lösung des Problems darin, die Dienstmasse auf die Fahrergruppen zu verteilen und aus den sich dadurch ergebenden Schichtart-Bedarfen für jede Fahrergruppe einzeln einen Turnus zu generieren. Das bedeutet: Es müssen im ersten Schritt nicht alle Kriterien aus Abschnitt 3.2 berücksichtigt werden, sondern es genügt, die Schichtart-Bedarfe für die einzelnen Turnusse zu berechnen und anschließend die Turnusplanung für jede Gruppe separat durchzuführen. Da es bereits für eine Fahrergruppe in der Regel nicht gelungen ist, eine optimale Lösung zu finden, stellt dies einen sinnvollen heuristischen Ansatz für das Gesamtproblem dar. Damit dieses Vorgehen eine zulässige Lösung liefert, sind einige wesentliche Kriterien bei der Dienst-Fahrergruppen-Zuordnung zu beachten: • Die Schichtart-Bedarfe für die einzelnen Turnusse müssen so festgelegt werden, daß sie insgesamt die Dienstmasse abdecken, d.h. für jeden Dienst aus der Dienstmasse muß hinterher eine Position in einem Turnus verfügbar sein. Jeder Dienst wird also einer Fahrergruppe zugeordnet. Daher stammt auch der Begriff „DienstFahrergruppen-Zuordnung“. • Ein Dienst darf nur dann einer Fahrergruppe zugeordnet werden, wenn die Gruppe die nötigen Qualifikationen aufweist. Es müssen bei der Zuordnung also die Daten aus den Fahrerprofilen beachtet werden, insbesondere Vertragsart, Bereich, erlaubte Schichtarten, Linien und Dienstarten. • Die einer Fahrergruppe zugeordneten Dienste müssen bezüglich ihrer Schichtarten so zusammengesetzt sein, daß sich ein sinnvoller Turnus generieren läßt. Was ein sinnvoller Turnus ist, kann für einzelne Fahrergruppe unterschiedlich definiert sein. § Es kann nötig sein, die zugewiesenen Schichtarten an bestimmten Tagen zu begrenzen. Dies ist nötig, wenn eine Fahrergruppe niemals sonntags arbeitet oder wenn sie durchschnittlich mindestens jedes zweite Wochenende frei bekommt. § Es kann nötig sein, den Anteil bestimmter Schichtarten zu begrenzen, zum Beispiel den Anteil der Nachtdienste. § Für bestimmte Fahrergruppen ist es wichtig, daß die Verteilung der ihnen zugewiesenen Schichtarten ihren Wünschen entspricht (vgl. Wunschanteil Schichtart 3.2.2.5). § Die Verteilung der Schichtarten über die Wochentage sollte (zumindest Montag bis Freitag) etwa gleich sein. Wenn diese Kriterien eingehalten sind, ist es in der Regel möglich, aus den Schichtart-Bedarfen mit Hilfe der Verfahren aus Kapitel 5 und 6 einen Turnus zu erzeugen, der alle wichtigen Anforderungen erfüllt. Einzelne Ausnahmen kann es natürlich geben, zum Beispiel wenn eine Fahrergruppe nur aus einem Fahrer besteht. Wenn in diesem Fall montags ein Spätdienst und dienstags ein Frühdienst zugewiesen werden soll, tritt zwangsläufig eine Verletzung der Nachtruhe auf. Je 8 Dienst-Fahrergruppen-Zuordnung 95 kleiner eine Fahrergruppe ist, desto größer ist die Wahrscheinlichkeit solcher Defekte. Diesen Fall wird ein erfahrener Benutzer jedoch schnell erkennen. Neben den Schichtart-Bedarfen für die einzelnen Turnusse müssen auch noch ihre Größen festgelegt werden. Um Krankheit und Urlaub ausgleichen zu können, ist es möglich, die Fahrergruppen etwas größer zu wählen als unbedingt erforderlich. Im Rahmen der Dienst-Fahrergruppen-Zuordnung sollen jedoch automatisch die mindestens erforderlichen Größen berechnet werden. Um bestehende Fahrergruppen zu erhalten, soll der Benutzer die Möglichkeit haben, obere und untere Schranken für die Größen der Fahrergruppen vorzugeben. Das folgende Schaubild stellt noch einmal die formale Struktur des Problems dar. Input: Dienstmasse Fahrerprofile Dienst-Fahrergruppen-Zuordnung Output: Mindestgrößen der Fahrergruppen Schichtart-Bedarfe für jede Gruppe Abbildung 22: Input-Output-Diagramm der Dienst-Fahrergruppen-Zuordnung Als Input für die Dienst-Fahrergruppen-Zuordnung ist die Dienstmasse gegeben sowie die Mitarbeiterprofile für die einzelnen Fahrergruppen, also die Angaben über Qualifikation und Wünsche der einzelnen Gruppen. Damit liegt auch die Anzahl der Fahrergruppen fest. Die Ermittlung der Mindestgrößen der Fahrergruppen hat aus betrieblicher Sicht eine vorrangige Bedeutung. Auch wenn es bei einem großen Turnus besser möglich ist, die Wünsche der Fahrer zu berücksichtigen, wird es sich bei dem heutigen Wettbewerb kein Verkehrsunternehmen mehr leisten können, die Fahrergruppen unnötig groß zu wählen. Daher sollen zuerst die erforderlichen Turnusgrößen festgelegt werden, und dann sollen die Dienste (unter Beibehaltung dieser Größen) möglichst ideal verteilt werden. Daß die Mindestgrößen später manuell wieder leicht angehoben werden, um wie oben beschrieben Fehlquoten auszugleichen, bleibt davon unberührt. Dies liegt im Ermessen des Benutzers und ist nicht Aufgabe der automatischen Optimierung. Erforderliche manuelle Anpassungen kann der Benutzer vor dem Start der Turnusplanung für die einzelnen Fahrergruppen manuell durchführen. Das weitere Vorgehen bietet sich aufgrund dieser Überlegungen wie folgt an: In einem ersten Schritt (Kapitel 8.2 bis 8.4) wird eine Lösung erzeugt, bei der alle Dienste einer Fahrergruppe zugeordnet sind, und bei der die Größen der Gruppen minimal sind. Außerdem müssen die Vorgaben aus den Fahrerprofilen sowie alle weiteren oben beschriebenen Entscheidungsschranken beachtet werden. Lediglich die Wunschanteile der Schichtarten und deren Gleichverteilung über die Wochentage werden zunächst nicht beachtet. Diese beiden Kriterien können später in einem zweiten Schritt (Kapitel 8.5) verbessert werden, indem Dienste zwischen zwei Gruppen getauscht oder verschoben werden. Dieses Vorgehen bereitet nur dann Schwierigkeiten, wenn die meisten Dienste nur genau einer Fahrergruppe zugeordnet werden können. In diesem Fall ist das Problem der Dienst-Fahrergruppen-Zuordnung jedoch trivial. 8 Dienst-Fahrergruppen-Zuordnung 8.2 96 Modellierung des Problems In diesem Abschnitt werden die bereits im letzten Abschnitt kurz beschriebenen Kriterien exakt formuliert und als ganzzahlig lineares Programm formuliert. Die Trennung von Anforderungen und Modellierung wird hier zu Gunsten einer übersichtlicheren Darstellung vernachlässigt, da das Problem nicht mit verschiedenen Verfahren gelöst werden soll. Weil im Rahmen der Dienst-Fahrergruppen-Zuordnung keine Reihenfolgebeziehungen beachtet werden müssen, sind alle Kriterien Kapazitätskriterien. Zunächst werden wieder einige Indexmengen eingeführt. Um die besondere Rolle von Wochenenden und Werktagen in möglichst allgemeiner Form berücksichtigen zu können, wird der Begriff der „Tagesart“ definiert. Hierbei handelt es sich einfach um eine Menge von Tagen, z.B.: T1={0, 1, 2, 3, 4} „Werktage“ oder T2={5, 6} „Tage des Wochenendes“. Solche Tagesarten können vom Benutzer individuell definiert werden. Natürlich ist auch jeder einzelne Tag eine Tagesart. Hier nun die Indexmengen: Indexmenge Beschreibung Ta ⊆ T D = {d: 0,1,...} Dt = {d∈ D: Dienst d findet am Tag t statt} Tagesarten für a∈ A = {1, 2,...}. Menge der Dienste der Dienstmasse. Menge der Dienste am Wochentag t∈ T. Menge der Dienste mit Schichtart i für i∈ I. D i = {d∈ D: Dienst d hat die Schichtart i} P = {p: p=0,...,“Anzahl Gruppen“–1} Menge der die Fahrergruppen bzw. Fahrerprofile. Tabelle 38 8.2.1 Entscheidungsvariablen Zunächst werden ganzzahlige Variablen fp∈ IN eingeführt, die die Größe der Fahrergruppen beschreiben. Außerdem wird die Zuordnung der einzelnen Dienste der Dienstmasse zu den Fahrergruppen durch binäre Entscheidungsvariablen repräsentiert. Sei dazu xdp ∈ {0,1} für alle d∈ D und p∈ P. Man hat dann: fp = „Größe der Fahrergruppe p“ 1, falls Dienst d der Fahrergruppe p zugewiesen wird, x dp = 0, sonst. 8.2.2 Entscheidungsschranken Alle in das folgende Modell einfließenden Parameter sind für jede Fahrergruppe p individuell definiert. 8 Dienst-Fahrergruppen-Zuordnung 97 8.2.2.1 Abdeckung Dienstmasse Kategorie: wirtschaftliche Restriktion Beschreibung: Jeder Dienst muß genau einer Fahrergruppe zugewiesen werden. Modellierung: (128) ∑x dp = 1 ∀ d ∈ D. p∈ P 8.2.2.2 Größe Fahrergruppen Kategorie: wirtschaftliche Restriktion Beschreibung: Die Größe fp der Fahrergruppe p muß innerhalb der vom Benutzer vorgegebenen Schranken liegen. Parametername Minimale Anzahl Fahrer der Gruppe p Maximale Anzahl Fahrer der Gruppe p Kurzname Dimension FMinp --FMaxp --- Wertebereich 0,...,200 Voreinst. 0 1,...,200 1 Tabelle 39 Modellierung: (129) FMinp ≤ fp ≤ FMaxp ∀ p∈ P 8.2.2.3 Jahresfrei Kategorie: wirtschaftliche Restriktion Beschreibung: Diese Entscheidungsschranke sichert, daß die Fahrer jedes Turnus eine ausreichende Anzahl freier Tage haben. Da die Größe des Turnus im Voraus nicht bekannt ist, wird der Frei-Bedarf pro Jahr angegeben, woraus sich die Anzahl freier Tage für jede konkrete Turnusgröße berechnen läßt. Da hierbei Rundungsfehler auftreten können, wird der berechnete Bedarf freier Tage als untere Schranke interpretiert. Parametername Kurzname Dimension Anzahl freier Tage im Jahr Jahresfreip Tage Wertebereich 0,...,365 Voreinst. 0 Tabelle 40 Modellierung: (130) ∑x d∈ D dp ≤ 365 − Jahresfreip 52,15 ⋅fp ∀ p∈ P Die linke Seite gibt dabei die Anzahl der Dienste an, die Gruppe p zugeordnet werden. Die rechte Seite gibt die Anzahl der Dienste an, die bei Einhaltung der erforderlichen Anzahl freier Tage noch zugeordnet werden darf. Dabei ist 52,15 etwa die Anzahl der Wochen pro Jahr, d.h. der Bruch gibt die durchschnittlich erforderliche Anzahl freier Tage pro Woche an. Wie bereits in Kapitel 5.3 lassen sich in dieser Ungleichung die Variablen (xdp und fp) daran erkennen, daß ihre Namen aus Kleinbuchstaben bestehen. Bei „Jahresfreip“ handelt es sich um einen Parameter, der zum Zeitpunkt der Generie- 8 Dienst-Fahrergruppen-Zuordnung 98 rung des Modells als konstant anzusehen ist. Darum ist auch der Bruch als Koeffizient der Variable fp konstant und genügt der Linearitätsbedingung. 8.2.2.4 Minimaler Frei-Anteil pro Tagesart Kategorie: sozialverträgliche Restriktion Beschreibung: Für verschiedene Tagesarten können verschiedene Frei-Anteile vorgegeben werden, z.B. um alle Sonntage frei zu halten oder um einen Anteil von 50% freier Wochenenden zu gewährleisten. Parametername Kurzname Minimaler Frei-Anteil für a∈ A MinFAntpa Dimension % Wertebereich 0,...,100 Voreinst. 0 Tabelle 41 Modellierung: ∑ (131) x dp ≤(1 − MinFAnteil pa ) ⋅Ta ⋅fp ∀ a∈ A, p∈ P d∈ D t , t∈ Ta Ist ein minimaler Frei-Anteil von 0 vorgegeben, so stellt die Ungleichung keine Einschränkung dar, da die rechte Seite dann der Kapazität des späteren Turnus für die gewählte Tagesart entspricht. Für die Tagesarten, die den einzelnen Wochentagen entsprechen ist die Nebenbedingung aber auch in diesem Fall erforderlich, da sonst an einem Tag mehr Dienste zugewiesen werden könnten als es Fahrer in der Gruppe gibt. 8.2.2.5 Maximaler Schichtart-Anteil Kategorie: arbeitsmedizinische Restriktion Beschreibung: Für die Schichtarten kann für jede Tagesart ein maximaler Anteil definiert werden. Parametername Kurzname Dimension Maximaler Schichtart-Anteil MaxSAAntpia % für i∈ I und a∈ A Wertebereich 0,...,100 Voreinst. 100 Tabelle 42 Modellierung: (132) ∑ x dp d∈ Di ∩ D t , t∈ Ta ≤ MaxSAAntei l pia ⋅ Ta ⋅fp ∀ i∈ I, a∈ A, p∈ P Auf der linken Seite steht dabei die Anzahl der Dienste der Schichtart i, die an einem Tag t, stattfinden, der zur Tagesart a gehört. Auf der rechten Seite steht die gewünschte obere Schranke. 8.2.2.6 Zulässige Zuordnungen Kategorie: gesetzliche Restriktion (möglicherweise auch aus Tarifverträgen) Beschreibung: Einer Fahrergruppe dürfen nur solche Dienste zugeordnet werden, für die die nötigen Qualifikationen vorhanden sind. Modellierung: Um zu gewährleisten, daß nur zulässige Zuordnungen stattfinden, gibt es nun zwei Möglichkeiten: Die erste Möglichkeit besteht darin, alle verbotenen Zuord- 8 Dienst-Fahrergruppen-Zuordnung 99 nungen mit sehr hohen Kosten zu bestrafen. Um die Anzahl der Variablen im Modell möglichst gering zu halten, ist es jedoch sinnvoller, alle Variablen aus dem Modell zu entfernen, die verbotene Zuordnungen repräsentieren. Konkret bedeutet dies, daß die Variable xdp nur dann in das Modell aufgenommen wird, wenn die Zuordnung von Dienst d zu Fahrergruppe p erlaubt ist. Formal kann das Löschen der entsprechenden xdp auch durch Hinzufügen von Nebenbedingungen der Form (133) xdp = 0 für alle verbotenen Zuordnungen von d zu p geschehen. Der Solver CPLEX-MIP entfernt alle solchen fixierten Variablen, bevor das Branch-and-Bound-Verfahren gestartet wird. 8.2.3 Zielkriterium: Minimierung der Größen der Fahrergruppen Kategorie: wirtschaftliches Kriterium Beschreibung: Um zu erreichen, daß die Fahrergruppen möglichst klein sind, besteht die Zielfunktion aus der Summe der Größen der Fahrergruppen. Um bei einigen Fahrergruppen stärker auf die Minimierung der Größe zu achten als bei anderen, gibt es die Möglichkeit, jede Fahrergruppe p durch einen Faktor Cp zu gewichten. Cp kann dann als Kosten eines Fahrers der Gruppe p interpretiert werden. Parametername Gewicht der Fahrergruppe p Kurzname Cp Voreinst. Dimension Wertebereich --0,...,2000000000 10 Tabelle 43 Modellierung: Zielfunktion: Minimiere ∑C p ⋅fp p∈ P 8.3 Existenz einer zulässigen Lösung Zunächst einmal ist nicht gewährleistet, daß zu jeder Probleminstanz der DienstFahrergruppen-Zuordnung eine zulässige Lösung existiert. Es kann nämlich Dienste geben, die aufgrund der nötigen Qualifikationen keiner Fahrergruppe zugeordnet werden können. Oder die obere Schranke einer oder mehrerer Fahrergruppen ist so niedrig, daß nicht alle Dienste der entsprechenden Anforderung zugewiesen werden können. Hier kann man jedoch eine einfache Lösung finden: Man erzeugt eine zusätzliche, virtuelle Fahrergruppe, deren Profil alle möglichen Qualifikationsdaten enthält und deren maximale Größe es ermöglichen würde, alle Dienste aufzunehmen. Das Gewicht für diese Fahrergruppe wird im Vergleich zu den Gewichten der übrigen Gruppen sehr hoch gewählt. Das führt dazu, daß im Laufe der Optimierung genau die Dienste der virtuellen Fahrergruppe zugewiesen werden, die von keiner anderen Gruppe aufgenommen werden können. Auf diese Weise kann einerseits immer eine zulässige Lösung generiert werden und andererseits werden die Dienste identifiziert, die keiner realen Gruppe zugewiesen werden können. Engpässe in der Personalausstattung werden also aufgedeckt und qualitativ (durch die Eigenschaften der nicht real zuweisbaren Dienste) beschrieben. 8 Dienst-Fahrergruppen-Zuordnung 8.4 100 Lösungsansätze Bei dem Problem der Dienst-Fahrergruppen-Zuordnung (DFZ) handelt es sich, wie der Name bereits vermuten läßt, um ein Zuordnungsproblem. Da einer Fahrergruppe jedoch mehrere Dienste zugeordnet werden können, hat das Problem nicht die klassische Form (vgl. z.B. [30], S.5-6), sondern es ist dem verallgemeinerten Zuordnungsproblem (Generalized Assignment Problem (GAP)) sehr ähnlich, das wie folgt aussieht: (GAP) Minimiere ∑C dp ⋅x dp unter den Nebenbedingungen d, p (134) ∑A dp ⋅x dp ≤ B p dp =1 ∀ p∈ P d (135) ∑x ∀ d∈ D p xdp∈ {0, 1} ∀ d∈ D, p∈ P Dieses Problem ist NP-vollständig (siehe Fischer, et al. [16]). Dies liefert jedoch keine Aussagen über das Problem der Dienst-Fahrergruppen-Zuordnung, das hier noch einmal zusammenhängend dargestellt ist: (DFZ) Minimiere ∑C p ⋅fp unter den Nebenbedingungen p∈ P (136) ∑x dp =1 ∀ d∈ D p∈ P (137) WMinp ≤ fp ≤ WMaxp ∀ p∈ P 365 − Jahresfreip (138) x dp ≤ ⋅wochen p ∀ p∈ P 52,15 d∈ D ∑ (139) ∑ x dp ≤(1 − MinFAnteil pa ) ⋅fp ⋅ Ta ∀ a∈ A, p∈ P d∈ D t , t∈ Ta (140) ∑ x dp d∈ Di ∩ D t , t∈ Ta ≤ MaxSAAnteil pia ⋅fp ⋅Ta ∀ i∈ I, a∈ A, p∈ P (141) xdp = 0 für alle verbotenen Zuordnungen von d zu p xdp ∈ {0,1} ∀ d∈ D, p∈ P fp∈ IN ∀ p∈ P. Im Vergleich zu (GAP) weist (DFZ) folgende Unterschiede auf: • Die Gewichte Cdp hängen nicht von d ab. • Es ist stets Adp = 1. • Die Grenzen Bp sind nicht fest, sondern variabel. Sie entsprechen den fp in (DFZ). • Das Modell DFZ enthält weitere Nebenbedingungen. Auch wenn das verallgemeinerte Zuordnungsproblem einige Unterschiede aufweist, hat es doch ähnliche Eigenschaften, so daß sich die Lösungsverfahren übertragen lassen. Trick [39] entwickelt ein Verfahren zur Lösung des generalisierten Zuordnungspro- 8 Dienst-Fahrergruppen-Zuordnung 101 blems, das auf einer linearen Relaxierung basiert. Er zeigt, daß im relaxierten Problem die meisten Variablen ganzzahlig belegt sind. Wenn ein lineares Problem mit dem Simplexverfahren gelöst wird, enthält die Lösung nur so viele Basisvariablen, wie es Nebenbedingungen gibt. Basisvariablen sind dabei Variablen, die mit Werten ungleich 0 belegt sein können. Bei der Lösung des relaxierten verallgemeinerten Zuordnungsproblems können also aufgrund der Nebenbedingungen (134) bis (135) höchstens |P|+|D| Variablen mit Werten ungleich 0 belegt sein. |D| Variablen sind bereits nötig, um überhaupt alle Dienste zuzuweisen. Damit sind in einer Lösung des relaxierten Problems höchstens |P| Dienste gesplittet, d.h. nicht eindeutig zugeordnet. Den gleichen Sachverhalt zeigt auch Trick, nur leider mit deutlich aufwendigeren Überlegungen. Jetzt soll wieder das Problem der Dienst-Fahrergruppen-Zuordnung (DFZ) betrachtet werden. Entsprechend der vorangegangenen Überlegungen können in einer Lösung des relaxierten Problems nur so viele Variablen mit einem Wert ungleich 0 belegt sein, wie das Problem Nebenbedingungen enthält. Bei den Nebenbedingungen (137) bis (140) handelt es sich um Ungleichungen. Diese werden bei Verwendung des Simplexverfahrens durch Einführung von Schlupfvariablen in Gleichungen umgewandelt. Das bedeutet: Wenn eine „≤“-Bedingung mit „<“ erfüllt ist, wird die zugehörige Schlupfvariable zur Basisvariable. Seien nun alle Nebenbedingungen des Modells, die mit „=“ erfüllt sind, als „aktive Nebenbedingungen“ bezeichnet. Dann kann eine Basislösung des Problems nur so viele (ursprüngliche) Variablen mit Werten ungleich 0 enthalten, wie es aktive Nebenbedingungen gibt. Nun werden die einzelnen Nebenbedingungen betrachtet: • Die Nebenbedingungen (136) sind immer aktiv. Ihre Anzahl ist gleich |D|. • Von den Nebenbedingungen (137) sind in der Regel genau |P| aktiv, denn wenn obere und untere Schranke verschieden sind, ist mindestens eine Ungleichung mit „<“ erfüllt. • Die Nebenbedingungen (138) können alle aktiv sein. Ihre Anzahl ist |D|. • Die Nebenbedingungen (139) bis (140) dienen dazu, unerwünschte Schichtart- oder Frei-Verteilungen zu verhindern. Da die Dienstmasse jedoch in der Regel eine ausgeglichene Verteilung dieser Eigenschaften aufweist, werden die meisten dieser Nebenbedingungen nicht aktiv sein. • Die Nebenbedingungen (141) können zusammen mit den zugehörigen Variablen vor dem Start des Simplexverfahrens aus dem Modell entfernt werden. Sie können danach in einer Basislösung nicht aktiv sein. Damit hat eine Basislösung von (DFZ) in der Regel kaum mehr als |D|+2⋅|P| Variablen, die mit Werten ungleich 0 belegt sind. Davon sind bereits |D| Variablen erforderlich, um alle Dienste zuzuweisen. Auch die |P| Variablen, die die Größen der Fahrergruppen festlegen, werden meist mit Werten ungleich 0 belegt sein. Somit verbleiben kaum mehr als |P| Variablen für weitere, zwangsläufig nicht-ganzzahlige Belegungen. Die Anzahl der gesplitteten Dienste in der Lösung des relaxierten Problems von (DFZ) liegt also in der Größenordnung von |P|. Da die Anzahl der Dienste |D| (einige Hundert bis einige Tausend) normalerweise deutlich größer als die Anzahl der Fahrergruppen (1015) ist, wird folglich ein Großteil der Dienste im relaxierten Problem nicht gesplittet. Aus dieser Eigenschaft lassen sich nun Lösungsstrategien entwickeln, die auf der Relaxierung von (DFZ) beruhen: 8 Dienst-Fahrergruppen-Zuordnung 102 • Wenn keine schnelle Lösung gefordert ist, kann das Problem (DFZ) in vertretbarer Zeit vollständig mittels Branch-and-Bound gelöst werden (Beispiel: 1600 Dienste, 15 Fahrergruppen, Rechenzeit 20 bis 60 Minuten). • Man löst zunächst das relaxierte Problem (Laufzeit bei 1600 Diensten, 15 Fahrergruppen, etwa 1–2 sec). Man fixiert alle die Dienste, die nicht gesplittet wurden, und entfernt die zugehörigen Variablen. Das Problem verkleinert sich dadurch erheblich. Für die verbleibenden Variablen werden Ganzzahligkeitsbedingungen hinzugefügt, und die Lösung erfolgt mittels Branch-and-Bound innerhalb weniger Sekunden. Natürlich muß die mittels dieser Heuristik gewonnene Lösung nicht optimal sein. • Es wird ein Branch-and-Bound für das Gesamtproblem (DFZ) durchgeführt und nach der ersten ganzzahligen Lösung abgebrochen. Die erste Lösung ist in der Regel bereits nach wenigen Sekunden gefunden. Die Qualität einer solchen Lösung ist jedoch unbestimmt. Tests haben gezeigt, daß die zweite Strategie hervorragende Ergebnisse liefert. Innerhalb von etwa 30 Sekunden konnten Lösungen gefunden werden, deren Kosten weniger als 0,1% über dem Optimalwert lagen. 8.5 Optimierung der Dienstzuordnungen Nachdem nun die notwendigen Größen der einzelnen Fahrergruppen festgelegt sind und eine zulässige Zuordnung aller Dienste gefunden wurde, kann es noch nötig sein, die Zuordnung auf eine ausgeglichene Verteilung hin zu optimieren. Dabei sind folgende Ziele relevant: • Die Dienste sollen so zugewiesen werden, daß die Verteilung ihrer Schichtarten möglichst gut den Wunschverteilungen der einzelnen Fahrergruppen entspricht. Da kleine Abweichungen vom Wunschanteil weniger bestraft werden sollen als größere, wird die Abweichung zur Berechnung der Strafkosten quadriert. Damit ist auch gewährleistet, daß Dienste mit schwerer Schichtart, die von keiner Fahrergruppe gewünscht werden, gerecht auf verschiedene Gruppen aufgeteilt werden. Bei einer linearen Kostenfunktion würde die Zuweisung solcher Dienste stets zu den gleichen Mehrkosten führen, unabhängig davon ob sie einer Gruppe zugeordnet werden, die bereits viele solcher unerwünschten Dienste hat oder nicht. • Die einzelnen Schichtarten sollen in jedem Turnus gleichmäßig über die Wochentage verteilt werden. Bei extremen Ungleichverteilungen kann, wie bereits beschrieben, kein Turnus generiert werden. Um eine Kostenfunktion aufzustellen, kann z.B. das Maximum und das Minimum der an den Tagen Montag bis Freitag zugewiesenen Dienste einer Schichtart berechnet werden. Für jede Schichtart wird die Differenz zwischen diesen Werten gebildet über alle Schichtarten summiert. Diese beiden Zielkriterien sollen nun ausgehend von der bestehenden zulässigen Lösung verbessert werden, die mit Hilfe der im letzten Abschnitt vorgestellten Verfahren ermittelt wurde. Dabei dürfen die Größen der Fahrergruppen nicht mehr verändert werden. Damit können also lediglich noch Dienste zwischen Fahrergruppen getauscht oder, falls dies ohne Verletzung der Entscheidungsschranken aus Abschnitt 8.2.2 möglich ist, von einer Fahrergruppe auf eine andere verschoben werden. Hierzu kann eine einfache lokale Suche verwendet werden, die eine Vertauschung oder Verschiebung genau dann durchführt, wenn sie zulässig ist und die Lösung bezüglich 8 Dienst-Fahrergruppen-Zuordnung 103 der oben definierten Kosten verbessert wird. Ein ähnliches Vorgehen findet man auch bei Hagberg ([21] S.317), der ebenfalls die gerechte Verteilung einer Menge von Diensten auf verschiedene Fahrergruppen betrachtet. Hagberg generiert dazu zunächst eine Startlösung, und dann werden innerhalb eines iterativen Prozesses einzelne Dienste ausgeschnitten und neu zugeordnet. Dieser Prozeß wird so lange wiederholt, bis keine Verbesserung mehr möglich ist. 8.6 Schnittstelle zur Turnusplanung für eine Fahrergruppe Nachdem die Aufteilung der Dienste auf die Fahrergruppen erfolgt und die Optimierung der Zuordnungen beendet ist, muß für jede Fahrergruppe einzeln ein Turnus generiert werden. Die sich aus den Dienstzuordnungen ergebende Schichtart-Verteilung geht dann über die Parameter „Bedarf Schichtart“ (vgl. Abschnitt 3.2.1.9) als Input in die Turnusoptimierung für eine Fahrergruppe ein. Außerdem muß jeweils die Größe der Fahrergruppe übernommen werden. Mit Hilfe der Größe der Fahrergruppe kann dann aus dem Parameter „Jahresfrei“ die absolute Anzahl freier Tage für den Turnus berechnet werden. Hierbei muß meist gerundet werden. Natürlich hat der Benutzer auch die Möglichkeit, die automatischen Vorgaben manuell zu beeinflussen. Das folgende Schaubild verdeutlicht den Zusammenhang und den Datenfluß zwischen DienstFahrergruppen-Zuordnung und Turnusplanung für die einzelnen Fahrergruppen. Dienstmasse Profildaten der Fahrergruppen Reihenfolgedaten Turnusplanung für Fahrergruppe 1 fertige Turnusse DienstFahrergruppenZuordnung •ermittelte Größe •Schichtart-Bedarfe •Anzahl freier Tage (ggf.Manipulation durch Benutzer) Turnusplanung für Fahrergruppe n Abbildung 23: Datenfluß der Turnusplanung Beispiel: Um die Dienst-Fahrergruppen-Zuordnung zu testen, soll eine konkrete Geschäftsstelle der BSAG betrachtet werden. Dort existieren 18 Fahrergruppen und 1153 Dienste pro Woche. Auf dieses Beispiel soll nun das vorgestellte Verfahren angewendet werden. Für die Größen der einzelnen Gruppen wurden teilweise obere Schranken vorgegeben. Die genauen Einstellungen können aufgrund ihres Umfanges hier nicht dargestellt werden. Das Ergebnis läßt sich jedoch leicht anhand der folgenden Tabelle veranschaulichen. Anzahl Fahrer ursprünglich optimiert Anzahl Fahrer ursprünglich optimiert 8 Dienst-Fahrergruppen-Zuordnung Gruppe 1 Gruppe 2 Gruppe 3 Gruppe 4 Gruppe 5 Gruppe 6 Gruppe 7 Gruppe 8 Gruppe 9 6 12 12 48 36 36 10 12 2 0 Gruppe 10 4 Gruppe 11 12 Gruppe 12 43 Gruppe 13 34 Gruppe 14 34 Gruppe 15 10 Gruppe 16 12 Gruppe 17 2 Gruppe 18 Summe 104 2 30 2 1 4 36 12 2 10 273 2 30 2 0 4 36 12 2 10 249 Tabelle 44 Man erkennt, daß die mindestens erforderliche Anzahl an Fahrern bei einigen Gruppen deutlich unter der aktuellen Größe liegt. Die Schichtart-Bedarfe (nicht dargestellt) für die einzelnen Gruppen liegen in der Regel recht nah an den Wunschverteilungen. Auch die Gleichverteilung liefert so gute Ergebnisse, daß die Werte für die Turnusplanung für eine Fahrergruppe verwendet werden können. Probleme ergeben sich noch bei großen Fahrergruppen, für die zumindest mit dem Branch-and-Bound aus Kapitel 5 kein guter Turnus in vertretbarer Zeit berechnet werden kann. Hier gibt es zwei Möglichkeiten. Zum einen kann die Fahrergruppe bereits vor der Dienst-Fahrergruppen-Zuordnung in mehrere kleine Gruppen aufgespalten werden. Jede Gruppe bekommt dann Dienste zugewiesen, zu denen ein eigener Turnus generiert werden kann. Alternativ ist es auch möglich, die Gruppe als ganzes zu betrachten und mehrere, identische Turnusse von überschaubarer Größe aneinander zu hängen. Wenn zum Beispiel eine Gruppe mit 36 Fahrern existiert, für die drei identische 12-WochenTurnusse hintereinander gehängt werden sollen, so müssen die in der Dienst-Fahrergruppen-Zuordnung ermittelten Schichtart-Bedarfe auf die geringere Turnusgröße transformiert werden. Dies kann jedoch nur problemlos erfolgen, wenn die SchichtartBedarfe geeignet teilbar sind. Andernfalls muß gerundet werden, wobei Abrunden dazu führt, daß insgesamt Schichtarten fehlen. In diesem Fall liegt es also in der Verantwortung des Benutzers, die Schichtart-Bedarfe anzupassen. Darum sollte die erste Variante bevorzugt werden. 8.7 Bewertung Das Problem der Dienst-Fahrergruppen-Zuordnung hat sich als ein relativ einfach zu lösendes Problem erwiesen. Es ist auf den ersten Blick viel aufwendiger und komplexer als die Turnusplanung für eine Fahrergruppe, denn es enthält weit mehr binäre und ganzzahlige Variablen. Trotzdem ist ein Verfahren entwickelt worden, das in der Lage ist, innerhalb kurzer Zeit eine Lösung zu liefern. Leider sind die erwähnten Probleme mit großen Fahrergruppen nicht zufriedenstellend gelöst, so daß der Benutzer zu Nachbearbeitungen von Hand gezwungen ist. Durch die extrem kurzen Rechenzeiten kann der Benutzer diesen Nachteil jedoch interaktiv überwinden, indem er große Fahrergruppen in mehrere kleine aufteilt und die Optimierung erneut anstößt. Auch 8 Dienst-Fahrergruppen-Zuordnung 105 wenn die Ergebnisse nicht auf Anhieb perfekt sein sollten, stellt das Verfahren eine enorme Hilfe dar. Die manuelle Aufteilung der Dienstmasse ist aufgrund der großen Anzahl von Diensten und der damit verbundenen Datenmengen, insbesondere Qualifikationsdaten, ein extrem aufwendiger Prozeß. Außerdem kann die Dienst-Fahrergruppen-Zuordnung dazu verwendet werden, nicht zuweisbare Dienste in kürzester Zeit aufzuspüren. Damit ist ein Werkzeug entwickelt worden, das gleichzeitig Engpässe in der Personalausstattung aufdecken und Anregungen für die Personalentwicklung geben kann. 9 Zusammenfassung 106 9 Zusammenfassung Abschließend sollen nun alle Ergebnisse der vorangegangenen Kapitel zusammengefaßt werden. Zunächst wurde nur die Turnusplanung für eine Fahrergruppe betrachtet. Dabei wurden alle wichtigen Kriterien, die in der Literatur erwähnt oder von der BSAG für wichtig erachtet wurden, in einem Modell aufgenommen. Es wurden Parameter zur Verfügung gestellt, die dem Benutzer eine sehr flexible Beschreibung der Eigenschaften des zu generierenden Turnus ermöglichen. Diese Flexibilität konnte nur erreicht werden, weil die Kriterien keiner Hierarchie unterworfen wurden. Es wurde insbesondere die in früheren Ansätzen häufig anzutreffende Trennung von Dienst-Frei-Schemaund Schichtart-Optimierung überwunden. Zur Generierung eines Turnus, der den beschriebenen Kriterien genügt, wurden zwei relativ unterschiedliche Verfahren entwickelt. Das auf einem linearen Ansatz basierende Branch-and-Bound ermöglicht eine zufriedenstellende (nicht optimale) Lösung des Problems bis zu einer im Normalfall ausreichenden Größe von 12 Wochen in vertretbarer Zeit von maximal ein bis zwei Tagen. Dies wurde auch für Extremfälle getestet. Die Modellierung des linearen Modells und die Geschwindigkeitsoptimierung, ohne die das Verfahren kaum einsetzbar wäre, bilden einen Schwerpunkt dieser Arbeit. Diesem Verfahren gegenübergestellt wurde die Lösung des gleichen Problems mit Simulated Annealing. Dieses Verfahren liefert in deutlich kürzerer Zeit gute bis sehr gute Ergebnisse, ist allerdings in Extremfällen nicht oder nur mit großem Aufwand zur Einstellung der Parameter einsetzbar. Es ist im Gegensatz zu dem Branch-and-BoundAnsatz auch in der Lage, für große Probleminstanzen gute Lösungen zu liefern. Um die entwickelten Methoden auch auf das Problem der Turnusplanung für mehrere Fahrergruppen anwenden zu können, wurde ein einfaches Verfahren entwickelt, das innerhalb weniger Minuten eine Dienstmasse auf verschiedene Fahrergruppen verteilen und deren Mindestgrößen bestimmen kann. In der Praxis ergeben sich dabei noch einige Probleme mit großen Fahrergruppen, die derzeit nur in Interaktion mit dem Benutzer gelöst werden können. Hier ergibt sich noch weiterer Forschungsbedarf. Die enorm kurze Laufzeit des Verfahrens zur Dienst-Fahrergruppen-Zuordnung gibt Hoffnung, noch weitere Fortschritte erzielen zu können. Es zeigt sich auch, daß die Zeit, die zur Lösung eines ganzzahlig linearen Modells benötigt wird, nicht nur von der Anzahl der Variablen im Modell, sondern hauptsächlich von dessen Struktur abhängt. Das Modell der Dienst-Fahrergruppen-Zuordnung enthält in der Regel deutlich mehr ganzzahlige Variablen als das Modell der Turnusplanung für eine Fahrergruppe. Es ließ sich trotzdem deutlich leichter lösen. Bei der Turnusplanung für eine Fahrergruppe hat sich außerdem gezeigt, daß kleine Änderungen, wie die Generierung der Wochenendverteilungen, zu einer enormen Verringerung der Laufzeit führen können. Die Anwendungsmöglichkeiten der beschriebenen Modelle in anderen Bereichen sind im Rahmen dieser Arbeit nicht untersucht worden. Aufgrund der Flexibilität der Modelle sollte es jedoch leicht möglich sein, weitere Kriterien zu integrieren und die möglicherweise notwendigen Anpassungen vorzunehmen. Literaturverzeichnis 107 Literaturverzeichnis [1] Aarts, E., Korst, J., Van Laarhoven, P.: Simulated Annealing, in: Aarts, E., Lenstra, J.K. (Hrsg.), Local search in combinatorial optimization, Wiley, 1997, 91-120 [2] Baker, K.R., Magazine, M.J.: Workforce scheduling with cyclic demands and dayoff constraints, Management Science 24, 1977, 161-167 [3] Belletti, R., Davini, A.: BDROP: A package for the bus drivers‘rostering problem, in: Rousseau, J.M. (Hrsg.), Computer scheduling of public transport 2, NorthHolland, 1985, 319-324 [4] Bennett, B.T., Potts, R.B.: Rotating roster for a transit system, Transportation Science 2, 1968, 14-34 [5] Borndörfer, R., Löbel, A., Strubbe, U., Völker, M.: Zielorientierte Dienstplanoptimierung, Konrad-Zuse-Zentrum für Informationstechnik Berlin, 1998 [6] Brusco, M.J., Jacobs, L.W.: A Simulated Annealing approach to the cyclic staffscheduling problem, Naval Research Logistics 40, 1993, 69-84 [7] Burns, R.N., Koop, G.J.: A modular approach to optimal multiple-shift manpower scheduling, Operations Research 35, 1, 1987, 100-110 [8] Carraresi, P., Gallo, G.: A multi-level bottleneck assignment approach to the bus drivers‘ rostering problem, European Journal of Operations Research 16, 1984, 163-173 [9] CPLEX 6.5 Reference Manual, Frankreich, ILOG, 1999 [10] Day, P.R., Ryan, D.M.: Flight attendant rostering for short haul airline opertions, Operations Research 45, 5, 1997, 649-661 [11] Dige, P., Lund, C, Ravn, H.F.: Timetabling by simulated annealing, Vidal, R.V.V. (Hrsg.), Applied Simulated Annealing, Springer 1993, 151-174 [12] Dowsland, K.A.: Simulated Annealing, in: Reeves, C. R. (Hrsg.), Modern heuristic techniques for combinatorial problems, McGraw-Hill, London, 1995, 20-69 [13] Drumm, H.J.: Personalplanung, in: Gaugler, E., Weber, W. (Hrsg.), Handwörterbuch des Personalwesens, 2. Auflage, Schäffer-Poeschel, Stuttgart, 1992, Sp.1758-1769 [14] Eglese, R. W.: Simulated Annealing: A tool for Operations Research, European Journal of Operational Research 46, 1990, 271-281 [15] Ernst, A.T., Krishnamoorthy, M., Dowling, D.: Train driver rostering using simulated annealing, Proceedings of CO96 conference, Imperial College (London), 1996 [16] Fischer, M.L., Jaikumar, R., Van Wassenhove, L.: A multiplier adjustment method for the generalized assignment problem, Management Science 32, 1986, 10951103 [17] Forrest, J.J.H., Hirst, J.P.H., Tomlin, J.A.: Practical solution of large mixed integer programming probelms with umpire, Management Science 20, 1974, 736-773 [18] Garey, M.R., Johnson, D.S.: Computers and intractability, Freeman, New York, 1979 [19] Garfinkel, R.S.: Branch and bound methods for integer programming, in: Christofides, N. (Hrsg.), Combinatorial optimization, Wiley, 1979, 1-20 Literaturverzeichnis 108 [20] Gauderer, P.C., Knauth, P.: EDV-Unterstützung bei der betriebs- und mitarbeiterbezogenen Dienstplangestaltung für Fahrer im öffentlichen Personennahverkehr (ÖPNV), in: Landau, K. (Hrsg.), Mensch-Maschine-Schnittstellen, 1. Auflage, Stuttgart, Institut für Arbeitsorganisation, 1998, 146-150 [21] Hagberg: An assignment approach to the rostering problem, in: Rousseau, J.M. (Hrsg.), Computer Scheduling of Public Transport 2, North-Holland, 1985, 313-318 [22] Hare, D.R.: Staff scheduling with ILOG solver, Department of Mathematics and Statistics, Okanagan University College, Kelowna, BC, Canada http://www.ilog.com/products/optimization/customers/papers.cfm#Manpower [23] Kleinschmidt, P., et al.: Optimaler Mitarbeitereinsatz am Arbeitsplatz, in: Hoffmann, K.H. (Hrsg.), Mathematik- Schlüsseltechnologien für die Zukunft, Springer, Berlin 1997, 581-591 [24] Knauth, P.: Design of shiftwork systems, in: Colquhoun, W.P, Shiftwork problems and solutions, Peter Lang Verlag, 1996, 155-173 [25] Knauth, P., Minssen, H.: Betriebs- und mitarbeiterbezogene Dienstplangestaltung, Der Nahverkehr 3, 1998, 18-21 [26] Kossbiel, H.: Personalplanung, in: Gaugler, E., Weber, W. (Hrsg.), Handwörterbuch des Personalwesens, 2. Auflage, Schäffer-Poesche, Stuttgart, 1992, Sp.1616-1631 [27] Lau, H.C.: On the complexity of manpower shift scheduling, Computers and Operations Research 23, 1996, 93-102 [28] Mag, W.: Einführung in die betriebliche Personalplanung, 2. Auflage, Vahlen, München, 1998 [29] Millar, H.H., Kiragu, M.: Cyclic and non-cyclic scheduling of 12 h shift nurses by network programming, European Journal of Operational Research 104, 1998, 582592 [30] Nemhauser, G.L., Wolsey, L.W.: Integer and combinatorial optimization, Wiley, New York, 1988 [31] Osman, I.H., Kelly, J.P.: Meta-heuristics: An overview, in: Osman, I.H., Kelly, J.P. (Hrsg.), Meta-heuristics: Theory and application, Kluwer, Boston, 1996, 1-21 [32] Recht, P.: Einführung in das Operations Research, Skript zur Lehrveranstaltung an der Universität Dortmund im Wintersemester 1997/98 [33] Recht, P.: Nichtlineare und ganzzahlige Optimierungsmethoden, Skript zur Lehrveranstaltung an der Universität Dortmund im Wintersemester 1997/98 [34] Reeves, C.R., Beasley, J.E.: Introduction, in: Reeves, C. R. (Hrsg.), Modern heuristic techniques for combinatorial problems, McGraw-Hill, London, 1995, 1-19 [35] Salewski, F.: Heuristiken zur Dienstplanung bei flexibler Personalkapazität, OR Spektrum 21, 1999, 361-379 [36] Sedgewick, R.: Algorithmen, 3. Auflage, Addison-Wesley, Bonn, 1994 [37] Spengler, T.: Lineare Entscheidungsmodelle zur Organisations- und Personalplanung, Physika, Heidelberg, 1993 [38] Tien, J.M., Kamiyama, A.: On manpower scheduling algorithms, SIAM Review 24, 1982, 275-287 [39] Trick, M.A.: A linear relaxation heuristic for the generalized assignment problem, Naval Research Logistics 39, 1992, 137-151 [40] Walukiewicz, S.: Integer programming, Kluwer, Dordrecht, 1991, 79-89 Literaturverzeichnis 109 [41] Williams, H.P.: Model building in mathematical programming, 3. Auflage, Wiley, New York, 1990 [42] Williams, H.P, Brailsford, S.C.: Computational logic and integer programming, in: Beasley, J.E. (Hrsg.), Advances in linear and integer programming, Clarendon, Oxford, 1996, 249-281 [43] Witt, F.: Verkehrsrythmus und Turnus im Fahrdienst, Verband öffentlicher Verkehrsbetriebe, 1986 [44] Zionts, S.: Linear and integer programming, Prentice-Hall, New Jersey, 1974, Anhang 110 Anhang Eine Testversion des Programms DISSY, in der das Simulated Annealing für die Turnusplanung für eine Fahrergruppe implementiert ist, liegt am Fachgebiet Operations Research und Wirtschaftssinformatik der Universität Dortmund aus. Dabei befindet sich auch eine Kurzbeschreibung des Programms sowie ein Ausdruck der wichtigsten Klassen, die mit Visual C++ programmiert sind. Außerdem stehen die meisten Daten, die für Auswertungen im Rahmen dieser Arbeit verwendet wurden, zur Verfügung und können mit DISSY visualisiert werden. Lediglich für die Dienst-FahrergruppenZuordnung existieren keine Beispiele. Hier wurden nur die Ideen vermittelt. Für die Auswertungen waren größere Datenmengen (Dienstmassen und Fahrerprofile) von der BSAG nötig, die nicht veröffentlicht werden sollen. Bei den am Fachgebiet ausliegenden Testdaten ist zu berücksichtigen, daß die Laufzeiten nicht aussagekräftig sind, da die Ergebnisse auf verschiedenen Rechnern simuliert wurden. Die in der Arbeit angegebenen Rechenzeiten sind umgerechnete Werte, wie sie sich bei einem Pentium-II-Rechner mit 400 MHz ergeben würden. Erklärung zur Urheberschaft Hiermit erkläre ich, daß ich die Arbeit selbständig verfaßt und keine anderen als die angegebenen Quellen und Hilfsmittel verwendet habe. Zitate habe ich kenntlich gemacht. Bremen, 3.2.2000