Diplomarbeit Turnusoptimierung im öffentlichen

Werbung
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ögSABL 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
Zugehörige Unterlagen
Herunterladen