Ein Algorithmus für Flow-Shop-Scheduling

Beim Flow-Shop-Scheduling besteht das Problem darin, die Reihenfolge, in welcher eine Anzahl von Aufträgen eine Anzahl von Bearbeitungsstationen in jeweils gleicher vorgegebener technologischer Reihenfolge durchläuft, so festzulegen, daß die Gesamtbearbeitungsdauer möglichst minimal wird.
Ein Algorithmus zur Ermittlung einer optimalen Lösung für den Fall, daß die Anzahl der Bearbeitungsstationen und damit die Anzahl der Vorgänge je Auftrag gleich zwei beträgt, ist der Johnson-Algorithmus. Bei diesem Verfahren erhält man eine Reihenfolge, bei der Vorgänge mit einer kurzen Bearbeitungsdauer auf der ersten Station zuerst und auf der letzten Station zuletzt eingeplant werden. Bei dem hier vorgestellten Algorithmus wird versucht, die Aufträge ebenso anzuordnen, nur daß die Anzahl der Stationen hierbei größer als zwei sein kann. Um eine möglichst gute Belegung zu erhalten, wird für jeden Vorgang eines Auftrages ein Wahrscheinlichkeitswert ermittelt, der zwischen 0 und 1 liegt. Sollte der Auftrag zuerst bearbeitet werden, so entspricht das einem Wahrscheinlichkeitswert nahe 0. Sollte ein Auftrag dagegen zum Schluß bearbeitet werden, so wird ein Wert nahe 1 zugeordnet. Aus der Matrix der Wahrscheinlichkeitswerte läßt sich für jeden Auftrag ein mittlerer Wahrscheinlichkeitswert ermitteln. Die Festlegung der Auftragsreihenfolge erfolgt durch Sortieren der Aufträge entsprechend ihrer zugehörigen mittleren Wahrscheinlichkeitswerte, so daß der Auftrag mit dem kleinsten Wert zuerst und der Auftrag mit dem größten Wert zuletzt auf jeder Station bearbeitet wird.

Bedeutung der Symbole

IAnzahl der Aufträge
JAnzahl der Bearbeitungsstationen
dijBearbeitungsdauer von Auftrag i auf Station j
AiGesamtbearbeitungsdauer des Auftrages i für alle Stationen
BjGesamtbearbeitungsdauer aller Aufträge auf Station j
Sjmittlere kumulierte Gesamtbearbeitungsdauer aller Aufträge bis Station j
DGesamtbearbeitungsdauer aller Aufträge auf allen Stationen
wijWahrscheinlichkeitswert für Auftrag i auf Station j
Wimittlerer Wahrscheinlichkeitswert für Auftrag i

Berechnung der Wahrscheinlichkeitswerte

Aus den gegebenen Bearbeitungsdauern dij ( i = 1...I , j = 1...J ) sind die Hilfsgrößen Ai , Bj , Sj und D folgendermaßen zu berechnen:

Ai = di1 + ... + diJ
Bj = d1j + ... + dIj
Sj = B1 + ... + Bj - 1/2 Bj
D = A1 + ... + AI = B1 + ... + BJ


Die Wahrscheinlichkeitswerte sind definiert als reelle Zahlen im Intervall [ 0, 1 ]. Ein Wahrscheinlichkeitswert wij kann interpretiert werden als die Wahrscheinlichkeit, daß man eine gute Belegung erhält, wenn der Auftrag i auf der Station j zuletzt bearbeitet wird oder anders formuliert:
wij = 0 bedeutet: gute Belegung, wenn Auftrag i auf Station j zuerst bearbeitet wird
wij = 1 bedeutet: gute Belegung, wenn Auftrag i auf Station j zuletzt bearbeitet wird

Es gelten die folgenden Aussagen 1 und 2 (linearer Ansatz):

1.Wenndij << Ai
unddij << Bj
dannwij = Sj/D
Interpretation: Vorgänge mit geringer Dauer möglichst auf erster Station zuerst und auf letzter Station zuletzt.

2.WennAi - dij << Ai
undBj - dij << Bj
dannwij = 1 - Sj/D
Interpretation: Vorgänge mit großer Dauer möglichst auf erster Station zuletzt und auf letzter Station zuerst.

3. Logische Verknüpfung von 1. und 2.

Bei einem bekannten Zusammenhang d1 <=> w1 und d2 <=> w2 erhält man mittels linearem Ansatz für den Zusammenhang zwischen w und d:

( w - w1 ) / ( d - d1 ) = (w2 - w1 ) / ( d2 - d1 )

Aus den Eckdaten der Aussagen 1 und 2 werden damit Aussagen für dazwischenliegende Daten abgeleitet.

4. Bei alleiniger Betrachtung des Auftrages i erhält man:

wijA = Sj / D + ( D - 2 · Sj ) / D · dij / Ai


5. Bei alleiniger Betrachtung der Bearbeitungsstation j erhält man:

wijB = Sj / D + ( D - 2 · Sj ) / D · dij / Bj


6. Logische Verknüpfung von 4. und 5.

Es gilt:
Wenn wijA < wijB dann wijA < wij < wijB
Wenn wijA > wijB dann wijA > wij > wijB
Wenn wijA = wijB dann wijA = wij = wijB

Mit linearem Ansatz erhält man für die Wahrscheinlichkeitswerte:

wij = ( wijA + wijB ) / 2

Man erhält damit eine I×J-Matrix der Wahrscheinlichkeitswerte. Man kann für jeden Auftrag einen mittleren Wahrscheinlichkeitswert berechnen mit

WiA = ( wi1A + ... + wiJA ) / J

WiB = ( wi1B + ... + wiJB ) / J

Wi = ( wi1 + ... + wiJ ) / J = ( WiA + WiB ) / 2


( linearer Ansatz ) und die Aufträge nach steigendem Wi sortieren. Man erhält damit eine Auftragsreihenfolge, bei der die Gesamtbearbeitungsdauer in der Regel nahe am Optimum liegt. Die so gefundene Reihenfolge kann als Ausgangslösung für Verbesserungsverfahren verwendet werden.

Beispiel

8 Aufträge (A1, ..., A8) sollen auf 4 Maschinen bearbeitet werden, jeder Auftrag zuerst auf M1, danach auf M2, auf M3 und zuletzt auf M4. Die Matrix der Bearbeitungsdauern d ist:

dA1A2A3A4A5A6A7A8
M113534262
M236413253
M324552336
M456434124

In welcher Reihenfolge müssen die Aufträge bearbeitet werden, damit die Gesamtbearbeitungsdauer möglichst minimal ist?
Die Reihenfolge nach steigender Nummer ( 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 ) ergibt eine Gesamtdauer von 42 Zeiteinheiten. Bei der Ermittlung der Reihenfolge durch Sortieren der Wahrscheinlichkeitswerte erhält man die Reihenfolge 1 - 8 - 2 - 4 - 5 - 3 - 6 - 7 (Gesamtdauer 37 Zeiteinheiten). Die einzelnen Rechenschritte sind dabei:

1. Berechnung der Hilfsgrößen:

j \ i12345678BjSj
1135342622613
2364132532739,5
3245523363068
4564341242997,5
Ai11191812138  1615112-

2. Berechnung der Matrix der wijA - Werte

j \ i12345678
10,1860,2370,3290,3080,3520,3080,4040,218
20,4330,4460,4180,3770,4210,4260,4450,412
30,5680,5620,5480,5180,5740,5270,5670,521
40,5340,6370,7060,6850,6430,7780,7780,673
WiA0,4300,4700,5000,4720,4970,5100,5480,456

3. Berechnung der Matrix der wijB - Werte

j \ i12345678
10,1460,2050,2640,2050,2340,1750,2930,175
20,3850,4180,3960,3640,3850,3750,4070,385
30,5930,5790,5710,5710,5930,5860,5860,564
40,7430,7170,7680,7940,7680,8450,8190,768
WiB0,4670,4800,5000,4830,4950,4950,5260,473

4. Berechnung des Wi - Vektors

i12345678
Wi0,4480,4750,5000,4780,4960,5020,5370,465

5. Sortieren der Vektorkomponenten nach steigender Größe

i18245367
Wi0,4480,4650,4750,4780,4960,5000,5020,537

Die mit dem Algorithmus für dieses Beispiel ermittelte Reihenfolge ist damit 1 - 8 - 2 - 4 - 5 - 3 - 6 - 7, die Maschinen werden dabei folgendermaßen von den Aufträgen belegt:
Maschine
   4       XXXXX  XXXXXXXXXXXXXXXXXXXXXXXX
   3     XX XXXXXXXXXXXXXXXXXXXXXXXXXXXX
   2  XXXXXXXXXXXXXXXX XXXXXX  XXXXX
   1 XXXXXXXXXXXXXXXXXXXXXXXXXX
  ---|----|----|----|----|----|----|----|----|--> Zeit
     0    5   10   15   20   25   30   35   40

(c) Lutz Tautenhahn 1995, 1999