Vorlesung 09: Netzplantechnik
Grundlagen Operations Research
Netzplantechnik
Ein Projekt planen
Was ist ein Projekt?
Ein zeitlich, räumlich und sachlich begrenztes komplexes Arbeitsvorhaben mit einer bestimmten Zielsetzung.
Zeitliche Planung der Vorgänge eines Projekts: Bestimmung der frühesten und spätesten Anfangs- und Endzeitpunkte.
Methoden im Überblick
- CPM: Critical Path Method (USA, 1956), vorgangspfeilorientiert.
- MPM: Metra Potential Method (Frankreich, 1957), vorgangsknotenorientiert.
- PERT: stochastische Vorgangsdauern (Polaris-Rakete).
- GERT / Simulation: stochastische Netzstrukturen (F&E-Projekte).
Wir betrachten den MPM-Netzplan: Vorgänge sind Knoten, Pfeile tragen Mindestabstände.
Vom Projekt zum Netzplan
Zwei Phasen der Netzplantechnik:
- Strukturplanung: Vorgänge, Dauern und Anordnungsbeziehungen erheben; daraus entsteht der Netzplan.
- Zeitplanung: früheste und späteste Zeitpunkte, Puffer und kritischen Weg berechnen.
Mit einem künstlichen Startvorgang und Endvorgang hat jedes Projekt eine eindeutige Quelle und Senke.
Beispiel: Bau einer Lagerhalle
| Vorgang | Vorgänger | ||
|---|---|---|---|
| 1 | Fundamente | 3 | – |
| 2 | Erdleitung | 2 | 1 (−1) |
| 3 | Mauern | 3 | 1 (1) |
| 4 | Dach | 2 | 3 (0) |
| 5 | Boden | 3 | 2 (0), 3 (1) |
| 6 | Tore einsetzen | 1 | 4 (0) |
| 7 | Innen verputzen | 2 | 5 (1), 6 (0) |
| 8 | Außen verputzen | 2 | 6 (0) |
| 9 | Tor streichen | 1 | 7 (0), 8 (0) |
Der MPM-Netzplan
Knoten = Vorgänge (mit Dauer ), Pfeile = Mindestabstände .
Mindest- und Maximalabstände
Zwischen zwei Vorgängen und sind verschiedene Abstände möglich:
- Anfangsfolge : Anfang bis Anfang .
- Normalfolge : Ende bis Anfang .
- Endfolge : Ende bis Ende .
- Sprungfolge : Anfang bis Ende .
Jeder Abstand existiert auch als Maximalabstand : „höchstens so lange”.
Transformationsregeln
Alles wird in Normalfolgen umgerechnet; Maximalabstände werden zu negativen Mindestabständen in Gegenrichtung:
| gegeben | Umrechnung | gegeben | Umrechnung |
|---|---|---|---|
So entstehen Rückwärtspfeile und damit Zyklen im Netzplan.
Kurz geübt: Umrechnung
Zwischen () und () gilt der maximale Normalabstand .
Frage: Welcher Pfeil entsteht daraus im Netzplan?
Ein Rückwärtspfeil von nach mit Bewertung .
Zeitplanung
Vorwärtsrechnung
Früheste Zeitpunkte, topologisch von bis :
/ : frühester Anfangs- / Endzeitpunkt von Vorgang .
Kurz geübt: Vorwärts
Vorgang hat drei Vorgänger:
| Vorgänger | ||
|---|---|---|
| 6 | 3 | |
| 5 | 6 | |
| 12 | −4 |
Frage: Wie groß ist ?
Rückwärtsrechnung
Späteste Zeitpunkte, von zurück bis :
/ : spätester Anfangs- / Endzeitpunkt von Vorgang .
Kurz geübt: Rückwärts
Vorgang hat zwei Nachfolger:
| Nachfolger | ||
|---|---|---|
| 14 | 2 | |
| 12 | −2 |
Frage: Wie groß ist ?
Der Terminplan
Erst die Vorwärts-, dann die Rückwärtsrechnung:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 2 | 4 | 7 | 8 | 9 | 12 | 10 | 14 | |
| 3 | 4 | 7 | 9 | 11 | 10 | 14 | 12 | 15 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 2 | 4 | 7 | 8 | 9 | 12 | 10 | 14 | |
| 3 | 4 | 7 | 9 | 11 | 10 | 14 | 12 | 15 | |
| 0 | 6 | 4 | 9 | 8 | 11 | 12 | 12 | 14 | |
| 3 | 8 | 7 | 11 | 11 | 12 | 14 | 14 | 15 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 2 | 4 | 7 | 8 | 9 | 12 | 10 | 14 | |
| 3 | 4 | 7 | 9 | 11 | 10 | 14 | 12 | 15 | |
| 0 | 6 | 4 | 9 | 8 | 11 | 12 | 12 | 14 | |
| 3 | 8 | 7 | 11 | 11 | 12 | 14 | 14 | 15 |
Vorwärts, z. B. .
Rückwärts, z. B. .
Projektdauer ; bei gilt , dazu gleich mehr.
Kritischer Weg & Puffer
Der kritische Weg
Der längste Weg im Netzplan. Für jeden kritischen Vorgang gilt (kein Spielraum).
Kritische Vorgänge
Der kritische Weg ist .
Verzögert sich ein kritischer Vorgang, verzögert sich das gesamte Projekt.
Pufferzeiten
Zeitspannen, um die ein Vorgang verschoben werden kann, ohne die Projektdauer zu erhöhen:
- Gesamte Pufferzeit: .
- Freie Pufferzeit: : Spielraum, wenn alle Nachfolger frühestmöglich beginnen.
Weitere Pufferzeiten
- Freie Rückwärtspufferzeit: : Spielraum, wenn alle Vorgänger spätestmöglich enden.
- Unabhängige Pufferzeit: : Spielraum unabhängig von allen anderen Vorgängen.
Es gilt stets .
Puffer im Beispiel
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 4 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | |
| 0 | 4 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | |
| 0 | 4 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | |
| 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Genau die Vorgänge mit sind kritisch: .
Nur Vorgang 2 (Erdleitung) ist völlig frei verschiebbar ().
Netzpläne mit Zyklen
Wenn Maximalabstände gelten
Enthält der Netzplan Zyklen (z. B. durch Maximalabstände), versagt die topologische Reihenfolge.
Dann hilft ein FIFO-Verfahren wie bei den kürzesten Wegen: erst Vorwärts-, dann Rückwärtsrechnung, Knoten bei jeder Aktualisierung erneut in die FIFO-Liste aufnehmen.
Voraussetzung: alle Zyklen haben nichtpositive Länge. Ein Zyklus positiver Länge macht den Plan unzulässig.
Beispiel: Maximalabstand
Neue Vorgabe für die Lagerhalle: Vom Ende des Mauerns (3) bis zur Fertigstellung des Außenputzes (8) dürfen höchstens 6 ZE vergehen: .
Frage: Welcher Pfeil entsteht daraus?
Transformationsregel :
Der erweiterte Netzplan
Der Zyklus hat die Länge : der Plan bleibt zulässig.
Neue späteste Zeitpunkte
Die Vorwärtsrechnung ändert sich nicht (), aber rückwärts zieht der Pfeil die späten Zeitpunkte zusammen:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
|---|---|---|---|---|---|---|---|---|---|
| (ohne) | 0 | 6 | 4 | 9 | 8 | 11 | 12 | 12 | 14 |
| (mit Zyklus) | 0 | 6 | 4 | 8 | 8 | 10 | 12 | 11 | 14 |
: die Puffer von schrumpfen auf .
Kontrolle mit Julia
Projektdauer als LP
Die Projektdauer ist der längste Weg, als LP formuliert:
using JuMP, HiGHS
t = Dict(1=>3,2=>2,3=>3,4=>2,5=>3,6=>1,7=>2,8=>2,9=>1)
# (Vorgänger h, Vorgang i, Mindestabstand d_hi)
kanten = [(1,2,-1),(1,3,1),(3,4,0),(2,5,0),(3,5,1),(4,6,0),
(5,7,1),(6,7,0),(6,8,0),(7,9,0),(8,9,0)]
modell = Model(HiGHS.Optimizer); set_silent(modell)
@variable(modell, S[keys(t)] >= 0) # Anfangszeitpunkte (FAZ)
@variable(modell, C >= 0) # Projektdauer
@constraint(modell, [(h,i,d) in kanten], S[i] >= S[h] + t[h] + d)
@constraint(modell, [i in keys(t)], C >= S[i] + t[i])
@objective(modell, Min, C)
optimize!(modell)
println("Projektdauer = ", objective_value(modell))Projektdauer = 15.0
Vorwärtsrechnung als LP
Frühestmögliche Zeitpunkte: minimiere die Summe aller Endzeitpunkte:
tv = [3, 2, 3, 2, 3, 1, 2, 2, 1]
modell = Model(HiGHS.Optimizer); set_silent(modell)
@variable(modell, FAZ[1:9] >= 0)
@constraint(modell, FAZ[1] == 0)
@constraint(modell, [(h,i,d) in kanten], FAZ[i] >= FAZ[h] + tv[h] + d)
@objective(modell, Min, sum(FAZ[i] + tv[i] for i in 1:9)) # min Σ FEZ
optimize!(modell)
println("FAZ = ", round.(Int, value.(FAZ)))FAZ = [0, 2, 4, 7, 8, 9, 12, 10, 14]
Rückwärtsrechnung als LP
Spätestmögliche Zeitpunkte: maximiere, bei fixiertem Projektende:
modell = Model(HiGHS.Optimizer); set_silent(modell)
@variable(modell, SAZ[1:9] >= 0)
@constraint(modell, SAZ[9] + tv[9] == 15) # SEZ_9 = FEZ_9*
@constraint(modell, [(h,i,d) in kanten], SAZ[i] >= SAZ[h] + tv[h] + d)
@objective(modell, Max, sum(SAZ))
optimize!(modell)
println("SAZ = ", round.(Int, value.(SAZ)))SAZ = [0, 6, 4, 9, 8, 11, 12, 12, 14]
Beide Vektoren stimmen mit dem Terminplan von vorhin überein.
Zusammenfassung
Das Wichtigste auf einen Blick
- MPM-Netzplan: Vorwärtsrechnung liefert früheste, Rückwärtsrechnung späteste Zeitpunkte.
- Der kritische Weg ist der längste Weg; kritische Vorgänge haben .
- Pufferzeiten (GP, FP, FRP, UP) zeigen den Spielraum unkritischer Vorgänge.
- Maximalabstände werden zu negativen Rückwärtspfeilen; die Zyklen löst ein FIFO-Verfahren.