Produktionswirtschaft Gerald Senarclens de Grancy 15. März 2008 Peter Greistorfer c 2008, Peter Greistorfer und Gerald Senarclens de Grancy. Some rights Copyright reserved. Nach gründlicher Überlegung haben wir uns für die folgenden Copyrightbedingungen der Creative Commons entschieden: “Namensnennung - Keine kommerzielle Nutzung - Keine Bearbeitung 2.0 Österreich” Sie dürfen: das Werk vervielfältigen, verbreiten und öffentlich zugänglich machen Zu den folgenden Bedingungen: • Namensnennung: Sie müssen den Namen der Autoren in der von ihnen festgelegten Weise nennen (wodurch aber nicht der Eindruck entstehen darf, Sie oder die Nutzung des Werkes durch Sie würden entlohnt). • Keine kommerzielle Nutzung: Dieses Werk darf nicht für kommerzielle Zwecke verwendet werden. • Keine Bearbeitung: Dieses Werk darf nicht bearbeitet oder in anderer Weise verändert werden. Die obigen Bedingungen stammen von http://creativecommons.org/licenses/ by-nc-nd/2.0/at/, der genaue Lizenzvertrag steht unter http://creativecommons. org/licenses/by-nc-nd/2.0/at/legalcode zur Verfügung. Jede der vorgenannten Bedingungen kann aufgehoben werden, sofern Sie die Einwilligung der Rechteinhabers dazu erhalten. Diese Lizenz lässt die Urheberpersönlichkeitsrechte unberührt. Die gesetzlichen Beschränkungen der Verwertungsrechte durch das Urheberrecht bleiben hiervon unberührt. Inhaltsverzeichnis Inhaltsverzeichnis i Abbildungsverzeichnis v 1 Übersicht 1 1.1 Einführungsbeispiel: Computerterminals verbinden . . . . . . . . . . . 2 Bäume, Entfernungen und Wege 2.1 2.2 3 Minimal spannende Bäume . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.1 Algorithmus von Prim . . . . . . . . . . . . . . . . . . . . . . . 4 Wege und kürzeste Wege . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.1 Shortest Path Problem . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.2 Longest Path Problem . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.3 FIFO-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.4 Tripel-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Das Transportproblem 3.1 3.2 1 15 Primale und Duale Transportprobleme . . . . . . . . . . . . . . . . . . 16 3.1.1 Formulierung als lineares Programm . . . . . . . . . . . . . . . 16 3.1.2 Einführungsbeispiel . . . . . . . . . . . . . . . . . . . . . . . . . 17 Eröffnungsheuristiken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 i 3.3 3.2.1 Nordwesteckenregel . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.2 Spaltenminimummethode . . . . . . . . . . . . . . . . . . . . . 23 Verbesserungsverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.3.1 Stepping-Stone Methode . . . . . . . . . . . . . . . . . . . . . . 26 3.3.2 MODI-Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4 Standortprobleme 4.1 4.2 33 Das Warehouse Location Problem . . . . . . . . . . . . . . . . . . . . . 33 4.1.1 Add-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.2 Miele Verfahren - Standortbestimmung in der Ebene . . . . . . 35 Überdeckungs- und Partitionsprobleme . . . . . . . . . . . . . . . . . . 36 4.2.1 Überdeckungsproblem . . . . . . . . . . . . . . . . . . . . . . . 37 4.2.2 Partitionsproblem . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2.3 Koopmans-Beckman-Problem . . . . . . . . . . . . . . . . . . . 38 5 Beispiele 39 5.1 Bäume, Entfernungen und Wege . . . . . . . . . . . . . . . . . . . . . . 39 5.2 Das Transportproblem . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.3 Standortprobleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 A Programmierbeispiele 67 A.1 GNU Linear Programming Kit . . . . . . . . . . . . . . . . . . . . . . . 67 A.1.1 Candy Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 A.1.2 Extinguisher Problem . . . . . . . . . . . . . . . . . . . . . . . 70 A.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 A.2.1 Nordwesteckenregel . . . . . . . . . . . . . . . . . . . . . . . . . 72 A.2.2 Spaltenminimummethode . . . . . . . . . . . . . . . . . . . . . 72 ii A.2.3 Miehle Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . 74 Literaturverzeichnis 77 Index 79 iii iv Abbildungsverzeichnis 2.1 Baum (ungerichteter Graph) . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 Baum (gerichteter Graph) . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 Angabe: gewichteter, ungerichteter Graph . . . . . . . . . . . . . . . . 5 2.4 Lösung: minimal spannender Baum . . . . . . . . . . . . . . . . . . . . 5 2.5 Angabe: kürzester Weg Problem . . . . . . . . . . . . . . . . . . . . . . 8 2.6 Lösung: kürzester Weg . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.7 Angabe: längster Weg Problem . . . . . . . . . . . . . . . . . . . . . . 9 2.8 Lösung: längster Weg . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.9 Beispiel für kürzeste Wege . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1 Klassisches Transportproblem . . . . . . . . . . . . . . . . . . . . . . . 16 5.1 Das Postkutschenproblem . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.2 Vladivostok nach Rostov . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.3 Gewichteter, ungerichteter Graph . . . . . . . . . . . . . . . . . . . . . 40 5.4 Gerichteter Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.5 Gerichteter Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.6 Gerichteter Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.7 Verkehrsnetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.8 Bewerteter, gerichteter Graph . . . . . . . . . . . . . . . . . . . . . . . 45 v 5.9 Verbindungsnetz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.10 Zyklenfreier Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.11 Feriengebiet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.12 Klassisches Transportproblem . . . . . . . . . . . . . . . . . . . . . . . 48 vi Vorwort Umwelt Da dieses Skriptum in elektronischer Form vorliegt, bitten wir die Nutzer, nur jene Teile auszudrucken, die auch wirklich verwendet werden und die Ausdrucke beidseitig zu erledigen. Danke. Formale Algorithmen Wir haben uns dazu entschlossen, dass funktionierender Programmcode wegen der Praxisnaehe besser zur Illustration der Algorithmen dient. Um daher die formalen Beschreibungen der Algorithmen gut zu verstehen, ist es hilfreich über Grundkonstrukte der Programmiersprache Python zu verfügen, die aber falls notwendig vor dem jeweiligen Beispiel erläutert werden. Verweise zu weiterführender Literatur können Interessierte in A.2 auf Seite 71 finden. Um Verwirrung zu vermeiden, sind nur die zum Verständnis der Algorithmen nötigen Teile des Codes abgebildet. Eine komplette Beispielimplementierung befindet sich jeweils in A.2 ab Seite 71, es wird aber bei den Beispielen stets gesondert darauf hingewiesen. Korrekturen Das Skriptum wurde mit sehr großer Sorgfalt verfaßt, dennoch kann es sein, dass sich einige Fehler eingeschlichen haben. Wir sind für jeden Korrekturvorschlag dankbar, egal ob es sich um inhaltliche, grammatische oder Rechtschreibfehler handelt. Wenn Studenten der Vorlesung einen inhaltlichen oder logischen Fehler entdecken, so wird das bei der ersten Mitteilung an [email protected] mit einem Mitarbeitspunkt belohnt. vii Über dieses Skriptum Das vorliegende Skriptum wurde in der Satzsystem LATEX 2ε geschrieben. Als Editor wurde Kile verwendet, als Desktop kam die Oberfläche KDE zum Einsatz. Die Grafiken wurden mit dem Graphviz Toolkit erstellt. Alle der genannten Programme wurden ausschliesslich unter dem freien Betriebssystem Linux verwendet. viii Kapitel 1 Übersicht “Die Produktionswirtschaft befasst sich mit dem Management von Technologie-, Produktionsund Logistikprozessen in Unternehmen.” [Wik07b] In diesem Skriptum beschäftigen wir uns mit Produktionswirtschaft als Teilbereich der Logistik. Logistik • überwindet Zeit und Raum für Güter und Lebewesen • besteht aus Transport- (Routen-), Standortplanung und Lagerhaltung Zur Produktionswirtschaft zählen auch Maschinenbelegunsplanung, Produktionsprogrammplanung und Spezialgebiete wie die Termin- und Kapazitätsplanung. Nicht in diesem Skriptum behandelt ist unter anderem die Entsorgungslogistik. Die erklärten Lösungsansätze gliedern sich in optimale und heuristische Verfahren. Erstere haben wie der Name schon sagt den Vorteil, dass sie optimale Lösungen liefern, jedoch benötigen Sie in der Regel signifikant mehr Zeit zur Berechnung (mehr Rechenzeit auf dem Computer). Daher wird häufig auch auf heuristische Verfahren1 zurückgegriffen, da diese in der Regel viel schneller brauchbar genaue Lösungen liefern. Welche Art von Verfahren verwendet wird hängt natürlich, neben dem Problem selbst, davon ab, wieviel Zeit und Rechenkapazität zur Verfügung stehen (Vorgaben) und wie hoch die Qualität der Lösung sein muss. 1.1 Einführungsbeispiel: Computerterminals verbinden Gegeben sei ein Raster von Computerterminals, welche es miteinander zu verbinden gilt, wobei die gesamte Kabellänge zu minimieren ist. Der hier angewendete Algorith1 Heuristische Verfahren sind Schätzverfahren 1 2 KAPITEL 1. ÜBERSICHT mus2 lautet 1. starte mit einem beliebigen Knoten3 (hier: Terminal) 2. schließe in jedem weiteren Schritt jenen Knoten an die bisherige Lösung an, der die kürzeste Entfernung zu ihr (zu irgendeinem ihrer Knoten) hat 3. höre auf, wenn alle Knoten in der Lösung enthalten sind Aus der obigen Beschreibung wird ersichtlich, dass im Fall von n miteinander zu verbindenden Terminals, n − 1 Iterationen4 nötig sind. Zur Berechnung dieses Beispiels sei an den Satz von Pythagoras erinnert, mit dem aus Ankathete und Gegenkathete die Hypotenuse eines rechtwinkeligen Dreiecks berechnen kann. Die sicher noch bekannte Formel dazu lautet a2 + b2 = c2 . 2 “Unter einem Algorithmus versteht man allgemein eine genau definierte Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen in endlich vielen Schritten.” [Wik08a] 3 Im Englischen wird die Bezeichung “Vertex” verwendet. 4 Eine Iteration ist ein Durchlaufschritt einer Schleife oder eines Algorithmus. Kapitel 2 Bäume, Entfernungen und Wege Ein Baum ist in der Graphentheorie ein spezieller Graph. Je nachdem, ob die Kanten1 (Verbindungen der Knoten) des Baumes eine ausgezeichnete Richtung besitzen, lassen sich graphentheoretische Bäume unterteilen in gerichtete und ungerichtete Bäume. Eine Kante ist die Verbindung zwischen zwei Knoten (Elementen) eines Baumes. In Abbildung 2.1 sind die Knoten 1 bis 10 zu einem Teilbaum verbunden, 11 und 12 sind isolierte Knoten. Unter den gerichteten Graphen kann man weiters zwischen zyklischen2 und azyklischen Graphen3 unterscheiden. Weiters unterscheidet man, ob ein Graph gewichtet4 ist oder nicht. Für mehr Informationen siehe [Wik08b]. 2.1 Minimal spannende Bäume Ein mimimal spannender Baum5 ist eine Sonderform eines ungerichteten, gewichteten Graph. Um als mimimal spannender Baum klassfiziert zu werden, müssen alle Knoten zu minimalen Kosten miteinander verbunden sein (das heisst, dass der Graph auch zyklenfrei sein muss, sofern die Kosten jeder Kante größer oder gleich Null sind). Die Abbildungen 2.3 und 2.4 auf Seite 5 zeigen einen ungerichteten, bewerteten Graphen und den dazugehörigen minimal spannenden Baum. Praktisch relevant sind minimal spannende Bäume bei jedem Versorgungsproblem, bei dem es darum geht, Orte oder Objekte entweder direkt oder indirekt miteinander zu verbinden (zum Beispiel bei Telefon- oder anderen Leitungen um die Kosten zu minimieren). Zur Lösung dieser Klasse von Problemen haben insbesondere der Algorithmus von 1 Im Englischen bezeichnet man Kanten als “Edges” Ein zyklischer Graph ist ein gerichteter Graph (auch Digraph genannnt), welcher Zyklen enthält bzw. enthalten darf. 3 Ein azyklischer Graph darf keinen Zyklus (d. h. keinen geschlossenen, in Pfeilrichtung durchlaufbaren Kreis) enthalten. 4 Bei einem gewichteten Graphen sind die Kanten mit Zahlen versehen, die Kosten darstellen. 5 Englisch: minimum weight spanning tree (MST) 2 3 4 KAPITEL 2. BÄUME, ENTFERNUNGEN UND WEGE Teilbaum isolierte Knoten a 1 j i 2 5 3 b 12 4 11 c 6 7 8 d 10 f e 9 Abbildung Graph) 2.1: Baum (ungerichteter Abbildung 2.2: Baum (gerichteter Graph) Prim und jener von Kruskal praktische Bedeutung erlangt, von denen der erstere im nächsten Abschnitt beschrieben ist. 2.1.1 Algorithmus von Prim Der Einfachheit halber beschränken wir uns auf eine simplifizierte Version des Verfahrens, welche lediglich für zusammenhängende Graphen einen minimal spannenden Baum findet. Ausgangspunkt ist also ein bewerteter, ungerichteter, zusammenhängender Graph mit n Knoten. Gibt es mehr als eine Kante mit minimalen Kosten, so ist es für die Optimallösung egal, welche ausgewählt wird. Eine formelle Bescheibung des Algorithmus kann auf zwei grundsätzlich verschiedene Arten erfolgen. Die eine ist nur für Menschen bestimmt und kommt mit relativ geringen Formvorschriften aus. Diese “simplere” Art, den Algorithmus zu beschreiben ist bereits aus dem Einführungsbeispiel auf Seite 1 bekannt. Von sehr großer praktischer Bedeutung ist es aber, solche Probleme auch mit dem Computer lösen zu können. Dazu muß ein Algorithmus auch in der Form einer Programmiersprache dargestellt werden. Diese hochformelle Schreibweise ist je nach verwendeter Programmiersprache unterschiedlich und auch der Schwierigkeitsgrad der Lesbarkeit für Menschen hängt stark von der verwendeten Programmiersprache ab. Wir haben uns aufgrund ihrer Einfachheit und Eleganz für die Sprache Python entschieden. Leser, die noch nie mit einer Programmiersprache gearbeitet haben sollen von dem folgenden Beispiel nicht abgeschreckt werden - der Einstieg in eine Programmiersprache erfolgt in der Regel mit viel einfacheren Beispielen. Eine simplere Darstellung des Algorithmus von Prim mit einer Programmiersprache ist aber leider (derzeit) schwer vorstellbar. Der in Folge abgedruckte Python Sourcecode ist eine leicht modifizierte Version einer Funktion 2.1. MINIMAL SPANNENDE BÄUME 7 6 2 6 4 3 5 5 2 3 4 5 2 2 3 1 5 7 6 1 6 4 3 5 5 2 3 2 1 4 5 2 2 3 1 4 1 Abbildung 2.3: Angabe: gewichteter, un- Abbildung 2.4: Lösung: minimal spannengerichteter Graph der Baum von Donald L. Rivest6 und hat rein demonstrativen Charakter - es ist also für die Studierenden nicht nötig, dieses Quellcodebeispiel zu verstehen. Eine mathematisch interessantere, aber kompliziertere Version des Algorithmus7 findet sich in [Pre03]. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #!/usr/bin/env python # Copyright (C) 2006 Ronald L. Rivest # You may copy, modify and distribute this software according to the terms of # the Gnu GPL (see file COPYING for details)””” # The prim(vertices) function is a slightly modified version of # prim(balls) taken from http://people.csail.mit.edu/rivest/mst.py inf = float("infinity") def prim(vertices): """ Find mst of set of vertices with Prim’s algorithm. Return set of edges. """ if len(vertices)==0: return [] mstEdgeList = [] v0 = vertices[0] Q = vertices[1:] for vertex in Q: 6 7 http://people.csail.mit.edu/rivest/mst.py Program 16.18 http://www.brpreiss.com/books/opus7/programs/index.html 6 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 KAPITEL 2. BÄUME, ENTFERNUNGEN UND WEGE vertex.d = dist(vertex,v0) vertex.pred = v0 while Q != []: min d = inf for vertex in Q: if vertex.d < min d: min d = vertex.d closestVertex = vertex Q.remove(closestVertex) v0 = closestVertex v1 = closestVertex.pred mstEdgeList.append((v0,v1)) for vertex in Q: d = dist(vertex,closestVertex) if d<vertex.d: vertex.d = d vertex.pred = closestVertex return mstEdgeList Laufzeitanalyse Da Laufzeit eines Programmes in der Praxis von sehr großer Bedeutung ist, sei hier 8 kurz darauf hingewiesen . P O(n + n log n + ρ(v) · log n) = O(m · log n) v∈V O obere Schranke (für die Laufzeit und den Speicherbedarf) n...Einfügen n log n...MIN entfernen log n...p(v) anpassen ⇒ O(m log n) [Aic02] Speicheranalyse O(m + n) = O(m) [Aic02] Alternative Beschreibung des Algorithmus In [Gre07] findet sich eine alternative, formelle Art, den Algorithmus zu beschreiben. 8 Laufzeitanalyse ist nicht relevant für die Prüfung. 2.2. WEGE UND KÜRZESTE WEGE 7 Voraussetzung: Ein zusammenhängender, bewerteter (ungerichteter) Graph G=[V,E,c] mit n Knoten und den Bewertungen cij für alle [i,j]∈E; Startknoten a∈V; Felder T1,T2[1:n-1] sowie D,R[1:n]; eine Knotenmenge IK; Iterationszähler it; Variable Z für die Summe der Kantenbewertungen des Baumes. Startbedingung: it:=Z:=0; IK:=V-{a}; D[i]:=cai und R[i]:=a, ∀ i ∈ NB(a); D[i]:=∞ sonst. Iteration: Bestimme den isolierten Knoten p, für den gilt: D[p]=min(D[i]|i∈ IK); setze h:=R[p]; it:=it+1; T1[it]:=h; T2[it]:=p; Z:=Z+D[p]; IK:=IK-{p}; for i ∈ IK do if cpi <D[i] then begin D[i]:= cpi ; R[i]:=p end; Abbruchbedingung: IK=0 Ergebnis: Die Felder T1 und T2 enthalten die Endknoten der Kanten eines minimal spannenden Beumes von G. Z gibt den Wert des Baumes an. 2.2 Wege und kürzeste Wege Im folgenden werden die Indizes i und j für die Zeilen und die Spalten einer m×n Matrix verwendet. w(3, 1, 2, 5) bedeuted, dass der kürzeste Weg von 3 nach 5 über 1 und 2 geht. Diese Klasse von Problemen geht von topologisch sortierten, gerichteten Graphen aus. Topologisch sortiert heisst, dass alle Pfeile ihren Ursprung in einem Knoten haben, der in der verwendeten Sortierreihenfolge vor dem Knoten kommt, in dem der Pfeil endet. Ein solcher Graph enthält mindestens eine Quelle (einen Ursprung bzw. einen Ausgangspunkt) und mindestens eine Senke (einen Endknoten). Optimallösungen zu diesen Problemen sind mit der dynamischen Programmierung ermittelbar. 2.2.1 Shortest Path Problem Auch als Shortest Route Problem bekannt. Gesucht ist dabei der kürzeste Weg von einem Knoten zu einem anderen, also von einem Startknoten zu einem Endknoten. Der Algorithmus zur Berechnung eines kürzesten Weges ist am besten anhand eines Beispiels (siehe Abbildungen 2.5 und 2.6) zu erklären. Die Lösung wird dabei “von hinten nach vorne”, also vom letzten Knoten zum ersten schrittweise berechnet. 8 KAPITEL 2. BÄUME, ENTFERNUNGEN UND WEGE fi tij n∗i NF(i) kürzester Weg von Knoten i zum Endknoten Kosten zwischen zwei benachbarten Knoten i und j der optimale Nachfolger von Knoten i Menge der Nachfolger von Knoten i 3 1 3 2 0 4 3 2 3 7 4 4 5 5 7 6 3 4 4 1 6 1 8 7 Abbildung 2.5: Angabe: kürzester Weg Problem 3 2 0 4 2 3 4 7 4 5 5 7 3 4 6 1 4 6 8 7 Abbildung 2.6: Lösung: kürzester Weg Die Berechnung beginnt mit dem letzten Knoten und für jeden früheren Knoten gilt fi = min {tij + fj }, ∀j∈NF(i) i < #Knoten Für unser Beispiel gilt also f8 = 0 f7 = 6 + f8 = 6 n∗7 = 8 1 + f8 = 1 f6 = min =1 n∗6 = 8 4 + f7 = 10 f5 = 4 + f7 = 10 n∗5 = 7 7 + f6 = 8 = 8 n∗4 = 6 f4 = min 3 + f7 = 9 5 + f5 = 15 2 + f4 = 10 f3 = min = 10 n∗3 = 4 4 + f5 = 14 4 + f3 = 14 f2 = min = 14 n∗2 = 3 7 + f5 = 17 3 + f4 = 11 f1 = min 0 + f3 = 10 = 10 n∗1 = 3 3 + f2 = 17 Die kosten für den kürzesten Weg betragen also f1 = 10 und der Weg verläuft über die Knoten 3, 4 und 6. 2.2.2 Longest Path Problem Auch als Lontest Route Problem bekannt. Es kommt in der Praxis eigentlich nur in der Netzplantechnik9 zur Bestimmung sogenannter kritischer Pfade vor. Ein kritischer 9 “Der Begriff Netzplantechnik umfasst alle Verfahren zur Analyse, Beschreibung, Planung, Steuerung und Überwachung von Abläufen auf der Grundlage der Graphentheorie, wobei Zeit, Kosten, 2.2. WEGE UND KÜRZESTE WEGE 9 Pfad ist der längste Pfad in einem Netzplan, also jene Zeit, die das Projekt mindestens zur Durchführung braucht. 3 1 3 2 2 4 3 2 3 7 4 4 5 5 7 6 3 4 4 6 1 1 8 7 Abbildung 2.7: Angabe: längster Weg Problem 3 2 2 4 2 3 4 7 4 5 5 7 3 4 6 6 4 1 8 7 Abbildung 2.8: Lösung: längster Weg fj längster Weg von Knoten 1 zu Knoten j tij Kosten zwischen zwei benachbarten Knoten i und j ∗ der optimale Vorgänger von Knoten j vj VG(j) Menge der Vorgänger von Knoten j Die Berechnung beginnt mit dem ersten Knoten (f1 = 0) und für jeden weiteren Knoten gilt fj = max {tij + fi }, ∀i∈VG(j) j ≤ #Knoten Für unser Beispiel aus Abbildung 2.7 gilt für den längsten Weg also f1 = 0 f2 = 3 + f1 = 3 2 + f1 = 2 f3 = max =7 4 + f2 = 7 3 + f1 = 3 f4 = max =9 2 + f3 = 9 7 + f2 = 8 f5 = max 4 + f3 = 9 = 14 5 + f4 = 14 f6 = 7 + f4 = 16 3 + f4 = 12 f7 = max 4 + f5 = 18 = 20 4 + f6 = 20 6 + f6 = 22 f8 = max = 22 1 + f7 = 21 v2∗ = 1 v3∗ = 2 v4∗ = 3 v5∗ = 4 v6∗ = 4 v7∗ = 6 v8∗ = 6 Einsatzmittel bzw. Ressourcen berücksichtigt werden können. [Ein Netzplan ist die] graphische oder tabellarische Darstellung von Abläufen und der Abhängigkeiten. Die Netzplantechnik findet ihre Anwendung insbesondere in der Terminplanung von Projekten.” [Wik08d] 10 KAPITEL 2. BÄUME, ENTFERNUNGEN UND WEGE 2.2.3 FIFO-Algorithmus Optimalverfahren, dessen Resultat die kürzesten Wege von einem Knoten zu jedem anderen Knoten sind. Dieser Algorithmus gehört zur Gruppe der Baumalgorithmen. Das Verfahren liefert für einen gewählten Startknoten einen kürzesten Weg und dessen Länge zu jedem erreichbaren Knoten. Ausgangspunkt ist ein bewerteter, gerichteter Graph mit n Knoten. Das Verfahren verwendet ein Datenfeld mit n einträgen, welches die Entfernungen zu allen Punkten vom Startknoten beinhaltet10 . Weiters wird bei dem Verfahren für jeden Knoten gespeichert, von welchem Vorgänger aus die kürzeste Entfernung vom Startknoten zu ihm zu erzielen ist. Nach Abschluß des Verfahrens läßt sich mit Hilfe dieser besten Vorgänger rekursiv ein kürzester Weg zu jedem Knoten konstruieren. Dazu geht man vom Zielknoten aus, der seinen besten Vorgänger gespeichert hat. Von diesem Vorgänger liest man dessen Vorgänger ab... das Ganze wiederholt man, bis man beim Startknoten angekommen ist. Auf eine detaillierte Erkärung der Funktionsweise des Algorithmus und ein zugehöriges Beispiel wird aus Zeitgründen verzichtet. 2.2.4 Tripel-Algorithmus Optimalverfahren, dessen Resultat die kürzesten Wege von jedem Knoten zu jedem anderen Knoten, also alle kürzesten Wege eines Graphen G sind. Dieser Algorithmus ist einer der wichtigsten Vertreter der Gruppe der Matrixalgorithmen. Am Besten ist auch dieses Verfahren anhand eines Beispiels zu erklären. Betrachten wir dazu den sehr simplem Graphen 2.9, in dem vier Knoten miteinander verbunden sind. In diesem einfachen Fall könnte die Lösung der kürzesten Wege natürlich auch durch einfaches “Hinsehen” gefunden werden, aber zum Verstehen des Algorithmus ist es ausreichend. Dass für einen Graphen mit hunderten von Knoten die Lösung nicht mehr durch Hinsehen zu finden ist, durch einen Computer mit diesem Algorithmus aber noch immer schnell lösbar ist, sollte auch klar sein. Ausgangspunkt ist ein bewerteter, gerichteter Graph, der auch Zyklen enthalten darf11 Zuerst sind aus dem Graphen eine Kosten- und eine Vorgängermatrix zu erstellen. Die Kostenmatrix gibt die direkten Kosten von jedem Knoten zu jedem anderen Knoten an - das heisst, dass die Kosten ∞ sind, wenn keine direkte Verbindung zwischen zwei Knoten besteht (in diesem Fall zum Beispiel vom Knoten eins zum Knoten vier). Der Aufbau der Matrizen ist generell so, dass der Ausgangspunkt in der Zeile und das Ziel in der Spalte indiziert ist. Die Kosten vom ersten Knoten zum vierten Knoten finden sich also in der ersten Zeile in der vierten Spalte. Der Aufbau der Vorgängermatrix ist analog, jedoch sind hier die direkten Vorgänger einzutragen. Zum Beispiel ist der Knoten direkt vor dem 3. Knoten am Weg von 1 nach 3 Knoten 1. Gibt es keinen direkten Vorgänger, so ist 0 einzutragen (dies trifft genau für jene Felder zu, in denen in der Kostenmatrix ∞ eingetragen ist. Die Hauptdiagonale der Kostenma10 11 Die Entfernung vom Startknoten zu ihm selbst ist stets 0. Die Zyklen dürfen keine negativen Kosten aufweisen. 2.2. WEGE UND KÜRZESTE WEGE 11 trix ist stets 0, die Hauptdiagonale der Vorgängermatrix hat stets den Zeilen-/ und Spaltenindex eingetragen (also 1, 2, 3,...). Sehen wir uns den ersten Schritt an C(G) := Kostenmatrix vor Anwendung des Algorithmus. Es werden nur Kosten zu den direkten Nachbarn erfasst, alle anderen Kosten sind ∞. Ci (G) := Kostenmatrix nach der i-ten Iteration D(G) := Distanzmatrix, die Kostenmatrix nach der letzten Iteration V G(G) := Vorgängermatrix vor Anwendung des Algorithmus. Vorgänger ist der vorletzte Knoten auf der direkten Verbindung. V Gi (G) := Vorgängermatrix nach der i-ten Iteration R(G) := Erreichbarkeitsmatrix (reachability), die Vorgängermatrix nach der letzten Iteration 0 V1 1 2 V2 V3 3 5 1 1 V4 Abbildung 2.9: Beispiel für kürzeste Wege 0 2 C(G) = ∞ ∞ 1 0 ∞ 0 ∞ 5 V G(G) = 3 0 1 1 ∞ 0 1 2 0 0 1 2 3 4 1 0 3 0 0 2 3 4 Bemerkenswert ist im obigen ersten Schritt auch die Markierung der ersten Zeile und Spalte, die bereits Teil des Algorithmus ist. Die markierte Zeile und Spalte wird im jeweiligen Schritt “fix” gesetzt, also nicht verändert und kann daher direkt für den nächsten Schritt übernommen werden. Die Hauptdiagonale beider Matrizen kann natürlich auch übernommen werden12 . Alle anderen Felder müssen nach folgendem Muster geprüft und eventuell neu berechnet werden: • übernimm Element cij der Kostenmatrix ohne Änderung in die nächste Iteration, wenn es kleiner oder gleich der Summe des i-ten Elements der markierten Spalte und des j-ten Elements der markierten Zeile ist; übernimm in diesem Fall auch Element vgij der Vorgängermatrix ohne Änderung in die nächste Iteration • sonst ersetze cij der Kostenmatrix mit der Summe des i-ten Elements der markierten Spalte und des j-ten Elements der markierten Zeile der Kostenmatrix und ersetze vgij der Vorgängermatrix mit dem j-ten Element der markierten Zeile der Vorgängermatrix 12 Der Vorgänger jedes Knoten ist per Definition auch immer der Knoten selbst und die Kosten betragen in diesem Fall natürlich stets 0. 12 KAPITEL 2. BÄUME, ENTFERNUNGEN UND WEGE Konkret heisst das zum Beispiel für Element c32 = 3, dass es in den nächsten Schritt einfach übernommen werden kann, da 3 ≤ ∞ + 1. Das korrespondierende Element vg32 der Vorgängermatrix kann also auch für den nächsten Schritt übernommen werden. Für das Element c23 = ∞ gilt aber, da ∞ > 0 + 2 ist, dass es im nächsten Schritt den Wert 0+2=2 annimmt. Gleichzeitig wird das Element vg23 = 0 der Vorgängermatrix durch das j-te Element der markieren Zeile der Vorgängermatrix (in diesem Fall ist das vg13 = 1) ersetzt. Das funktioniert, weil es um von 2 nach drei zu kommen keine direkte Verbindung gibt, jedoch gibt es eine Verbindung von 2 nach 1 und eine von 1 nach 3. Die Kosten für diese indirekte Verbindung sind daher die Summe aus den Kosten von 2 nach 1 und von 1 nach 3 (hier 2+0) und der neue direkte Vorgänger von 3 auf dem Weg von 2 nach 3 ist Knoten 1. C1 (G) und V G1 (G) stellen die Kostenmatrix und die Vorgängermatrix nach dem ersten Schritt dar. 0 2 C1 (G) = ∞ ∞ 1 0 ∞ 0 2 5 V G1 (G) = 3 0 1 1 ∞ 0 1 2 0 0 1 2 3 4 1 1 3 0 0 2 3 4 Nach der ersten Iteration werden die zweite Zeile und die zweite Spalte markiert und das gleiche Verfahren wird angewendet. In diesem Schritt werden die drei Unendlichen Kosten ersetzt. Dass weder in der ersten noch in der zweiten Iteration in der Kostenmatrix eine Zahl durch eine kleinere ersetzt wurde (sondern nur Unendlich durch Zahlen), ist reiner Zufall. 0 2 C2 (G) = 5 3 1 0 3 1 0 2 0 3 6 5 V G2 (G) = 1 0 1 2 2 2 1 2 3 4 1 1 3 1 2 2 3 4 Nach der zweiten Iteration werden für die dritte Iteration die dritte Zeile und die dritte Spalte markiert. In dieser Iteration werden (unter anderem) c14 = 6 durch c14 = 0 + 1 = 1 und vg14 = 2 durch vg14 = 3 ersetzt. Es sollte jetzt bereits erkennbar sein, dass der Algorithmus in jeder Iteration genau gleich funktioniert. 0 2 C3 (G) = 5 3 1 0 3 1 0 2 0 3 1 3 V G3 (G) = 1 0 1 2 2 2 1 2 3 4 1 1 2 1 3 3 3 4 Auch der vierte und in diesem Fall letzte Schritt (da es sich um eine 4 × 4 Matrix handelt) funktioniert ident wie die vorherigen. Jede Iteration bringt die vorhandenen Matrizen näher an die Optimallösung und die letzte Iteration hat die Optimallösung 2.2. WEGE UND KÜRZESTE WEGE 13 als Resultat. Daher werden auch neue Namen für dieses Resultat vergeben - D(G) (distance, Distanzmatrix) und R(G) (reachability, Erreichbarkeitsmatrix). Da auch kein weiterer Schritt erfolgt, werden auch keine Zeile und keine Spalte mehr markiert. Ist ein Wert der Distanzmatrix ∞ und damit ein Wert der Erreichbarkeitsmatrix 0, so bedeuted das, dass es keine Verbindung zwischen diesen Elementen gibt. Die Kosten von jedem Element zu jedem anderen können einfach aus der Distanzmatrix abgelesen werden, die Erreichbarkeitsmatrix gibt sogar Schritt für Schritt den gesamten optimalen Weg an. Beispielsweise ist der optimale Weg von Knoten 3 zum Knoten 1 wie folgt abzulesen: am Weg von 3 nach 1 ist (laut Element r31 = 2 der Erreichbarkeitsmatrix) 2 der vorletze Knoten. Daher betrachtet man nun den Weg von 3 nach 2 - hier ist 4 der vorletzte Knoten. Daher betrachtet man den Weg von 3 nach 4. Da nun der vorletzte Knoten der Knoten 3 ist, ist man fertig mit dem Weg von 3 nach 1 - dieser ist also 3 nach 4 nach 2 nach 1. C4 (G) D(G) 0 2 = 4 3 1 0 2 1 0 2 0 3 1 3 V G4 (G) = 1 R(G) 0 1 2 2 2 1 2 4 4 1 1 3 1 3 3 3 4 Aufgrund der verhältnismässig hohen Komplexität eines korrespondierenden Computerprogramms wird hier kein Sourcecode abgedruckt. 14 KAPITEL 2. BÄUME, ENTFERNUNGEN UND WEGE Kapitel 3 Das Transportproblem Das Transportproblem ist eine Fragestellung aus dem Operations Research: zum Transport einheitlicher Objekte von mehreren Angebots- zu mehreren Nachfrageorten ist ein optimaler, d.h. kostenminimaler Plan zu finden, wobei die vorhandenen und zu liefernden Mengen an den einzelnen Standorten gegeben sowie die jeweiligen Transportkosten pro Einheit zwischen allen Standorten bekannt sind. Bereits 1781 formulierte Monge ein allgemeines Transportproblem mathematisch. Beim Standardfall einer bezüglich der Transportmengen linearen Kostenfunktion handelt es sich um ein Problem der linearen Optimierung, für das neben den Standardmethoden wie Simplex-Verfahren spezielle Lösungsalgorithmen existieren. Als eines der ersten Themengebiete des Operation Research wurde das Problem schon 1939 von Kantorowitsch als mathematisches Modell formuliert. In den 50er Jahren des 20. Jahrhunderts entwickelten Dantzig, Charnes und Cooper, sowie Ford und Fulkerson verschiedene Lösungsalgorithmen. Das klassische Transportproblem ohne Kapazitätsbeschränkungen auf den Transportwegen ist ein Spezialfall des kapazitierten Transportproblems, das für Wege Mindest- oder Höchsttransportmengen festlegt. Klassisches und kapazitiertes Transportproblem sind wiederum Spezialfälle des (kapazitierten) Umladeproblems, bei dem es neben Angebots- und Nachfrageorten noch reine Umladeorte gibt. Ein Sonderfall des Transportproblems ist das Zuordnungsproblem, bei dem an jedem Ort nur eine Einheit angeboten bzw. nachgefragt wird. [Wik08g] Abbildung 3.1 zeigt ein solches Transportproblem für drei Anbieter Ai , ∈ {1, 2, 3} und drei Nachfrager Nj , j ∈ {1, 2, 3}. Die Kosten für den Transport von Ai nach Nj sind durch die 3 × 3 Matrix C = cij gegeben. Die Angebots- und Nachfragemengen werden durch ai und nj ausgedrückt. Für das Transportproblem existiert mindestens eine (optimale) Lösung, wenn alle Angebotsmengen, alle Nachfragemengen und alle Transportkosten größer oder gleich 15 16 KAPITEL 3. DAS TRANSPORTPROBLEM A1 c12 A3 c32 c11 c31 N2 N1 A2 c22 c13 c33 c21 c23 N3 Abbildung 3.1: Klassisches Transportproblem Null sind (ai ≥ 0, bj ≥ 0, cij ≥ 0∀i∀j), Summe der Angebotsmengen gleich P die P der Summe der Nachfragemengen ist ( ai = bj ) und alle Wege benutzbar sind (cij 6= ∞ ∀i∀j). Unter obigen Bedingungen kann jedes Transportproblem mit dem Simplex Algorithmus1 gelöst werden. In allgemeinen verwendet man aber statt dem Simplex Algorithmus eine Eröffnungsheuristik in Kombination mit einem Verbesserungsverfahren, welche auch stets eine optimale Lösung liefern. Der Vorteil dieser Kombination liegt in der reduzierten Rechenzeit. 3.1 Primale und Duale Transportprobleme Wie im letzten Absatz kurz erklärt, gibt es zwei grundsätzlich unterschiedliche Arten, zu einer Lösung zu kommen, die über die Zusammenhänge zwischen primalen und dualen Transportproblemen miteinander verbunden sind. Die primalen Algorithmen nützen generell die Beziehungen zwischen primalen und dualen Problemen zum Auffinden einer Lösung (die Koeffizentenmatrix ist lediglich eine binäre Matrix). Die duale Darstellung ist nötig, weil in den Abschnitten 3.3.1 und 3.3.2 beschriebenen Stepping Stone und Modi Methoden darauf beruhen - beide sind in der Regel performanter als der Simplex Algorithmus. 3.1.1 Formulierung als lineares Programm Die Variablen xij stellen die Menge dar, die von Ai nach Bj transportiert werden. Die Gesamtkosten, die es zu minimieren gilt, sind die Summe der Produkte von xij ∗ cij 2 . Gesucht ist also ein Transportplan mit minimalen Kosten, der die Beschränkungen hinsichtlich der lieferbaren Mengen einhält und die Nachfrage an allen Nachfrageorten (voll) erfüllt. Es folgt eine mathematische Darstellung dieses primalen Transportproblems. 1 2 siehe http://de.wikipedia.org/w/index.php?title=Simplex-Verfahren&oldid=43247648 für Abbildung 3.1 sind das x11 ∗ c11 + x12 ∗ c12 + x13 ∗ c13 + x21 ∗ c21 + ... + x32 ∗ c32 + x33 ∗ c33 3.1. PRIMALE UND DUALE TRANSPORTPROBLEME 17 minimiere die Gesamtkosten minimiere: m X n X cij xij i=1 j=1 unter den Nebenbedingungen ∀i : n X xij = ai j=1 ∀j : m X xij = nj i=1 ∀i∀j : xij ≥ 0 Die erste Nebenbedingung verlangt, dass die Angebotsmenge an jedem Angebotsort komplett aufgebraucht wird, die zweite verlangt analog für jeden Nachfrageort, dass die Nachfrage vollständig erfüllt werden muss. Die Transportmengen dürfen selbstverständlich nicht negativ sein, was in der dritten Nebenbedingung ausgedrückt ist. Oft wird auch die Ganzzahligkeit der transportierten Mengen verlangt, d.h. xij ∈ N0 . Dieses Transportproblem kann durch Einführung neuer Variablen (für jede Kapazitätsrestriktion ein ui und für jede Nachfragerestriktion ein vj ) auch als duales Transportproblem formuliert werden (der rechnerische Vorgang wird im folgenden Beispiel erläutert). m n X X maximiere: ai u i + nj vj i=1 j=1 unter den Nebenbedingungen ∀i∀j : ui + vj ≤ cij , 3.1.2 ui , vj ∈ R Einführungsbeispiel Gegeben seien die Angebotsmengen Ai = {25, 15, 10} und die Nachfragemengen Ni = {30, 15, 5}. Die Matrix der Transportkosten C = cij ist gegeben mit 1 2 1 C= 2 1 2 2 3 3 Darstellung der Gleichungen (Primales Problem) minimiere:1x11 + 2x12 + 1x13 + 2x21 + 1x23 + 2x23 + 2x31 + 3x32 + 3x33 A1 : x11 + x12 + x13 = 25 A2 : x21 + x22 + x23 = 15 Angebotsrestriktionen A3 : x31 + x32 + x33 = 10 18 KAPITEL 3. DAS TRANSPORTPROBLEM N1 : x11 + x21 + x31 = 30 N2 : x12 + x22 + x32 = 15 N3 : x13 + x23 + x33 = 5 Nachfragerestriktionen ∀i∀j : xij ≥ 0 Lösung in GLPK Das obige Problem kann bequem mit dem GNU Linear Programming Kit dargestellt und gelöst werden. Eine ausführlichere Beschreibung desselben findet sich in Abschnitt A.1 ab Seite 67. Wie generell in der Programmierung üblich, sind Variablennamen etc. auf Englisch geschrieben; Zeilen, die mit einem Raute-Zeichen (#) beginnen, sind Kommentare. /********************************************************************* * Module name: transport-problem * Description: Linear Program solving a transport problem * Language: glpk * Author: Gerald Senarclens de Grancy * Copyright: GPL - see file COPYING ********************************************************************/ ## parameters # Suppliers set A; # Consumers set N; # capacity of supplier A in cases param a{i in A}; # demand of consumer N in cases param n{j in N}; # transport cost for delivery param c{i in A, j in N}; ## variables var x{i in A, j in N}, >= 0; ## objective minimize cost: sum{i in A, j in N} c[i,j] * x[i,j]; ## constraints supply{i in A}: sum{j in N} x[i,j] = a[i]; demand{j in N}: sum{i in A} x[i,j] = n[j]; ## data data; set A := supplier1 supplier2 supplier3; 3.1. PRIMALE UND DUALE TRANSPORTPROBLEME set N := customer1 customer2 customer3; param a := supplier1 25 supplier2 15 supplier3 10; param n := customer1 30 customer2 15 customer3 5; param c : customer1 customer2 supplier1 1 2 supplier2 2 1 supplier3 2 3 end; 19 customer3 := 1 2 3; Das obige Beispiel und die dazugehörige Lösung können, wie in Anhang A ab Seite 67 beschrieben, heruntergeladen und ausprobiert werden. Überführung in duales Problem Jedem primalen Problem ist ein anderes lineares Programm zugeordnet: das duale Problem. Die engen Zusammenhänge zwischen primalen und dualen Problemen werden sowohl beim Beweis von Sätzen der linearen Optimierung als auch bei der praktischen Lösung linearer Programme ausgenutzt. Das duale Problem des dualen Problems ist stets wieder das Ursprungsproblem. Siehe dazu auch [Wik07a]. Die Gleichungen aus 3.1.2 können auch in folgender Form angeschrieben werden (wir führen gleichzeitig u1 , u2 , u3 und v1 , v2 , v3 ein). Die oberste Zeile der folgenden Matrix enthält die Kosten cij . Die mit römischen Zahlen markierten Zeilen enthalten die Nebenbedingungen (I bis III sind die Angebotsrestriktionen, IV bis V I sind die Nachfragerestriktionen). xij 1 2 1 2 1 2 2 3 3 NB x11 x12 x13 x21 x22 x23 x31 x32 x33 I 1 1 1 II 1 1 1 III 1 1 1 IV 1 1 1 V 1 1 1 VI 1 1 1 25 15 10 30 15 5 u1 u2 u3 v1 v2 v3 ∀i∀j : xij ≥ 0 Die obige Darstellung kann nun einfach in ein duales Problem umgewandelt werden, indem man die vorhandene Matrix transponiert3 wird (genaugenommen wird nur der 3 Transponieren einer Matrix, ist die Bezeichnung für das Vertauschen von Zeilen und Spalten, also das Spiegeln an der Hauptdiagonalen 20 KAPITEL 3. DAS TRANSPORTPROBLEM Bereich mit den 1ern transponiert). 25 15 10 30 15 5 u1 u2 u3 v1 v2 v3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ≤1 ≤2 ≤1 ≤2 ≤1 ≤2 ≤2 ≤3 ≤3 ui , vj ∈ R Auch das obige Tableux des dualen Problems könnte mit Hilfe des Simples Algorithmus gelöst werden. Die Zielfunktion hat sich beim überführen allerdings auch zu maximiere:Z(u, v) = m X ai ∗ ui + i=1 n X ni ∗ vi j=1 geändert. Im folgenden kommen wir aber zum eigentlichen Sinn dualer Probleme der Aufteilung in eine Eröffnungsheuristik gefolgt von einem Verbesserungsverfahren wodurch eine optimale Lösung mit geringerer Rechenzeit möglich ist. 3.2 Eröffnungsheuristiken Iterative Verfahren, die mit Hilfe einfacher Algorithmen eine zulässige Basislösung (auch Ausgangslösung oder Startlösung genannt) für ein Transportproblem suchen. Diese Basislösungen bestehen aus m + n − 1 Basisvariablen (BV ≥ 0)4 ; die Nichtbasisvariablen sind alle gleich 0 (N BV = 0). Diese Basislösungen können im Anschluss Verbesserungsverfahren (siehe Abschnitt 3.3 auf Seite 25) zu einer Optimallösung aufgewertet werden. Besonders bekannte Verfahren zum Auffinden einer Basislösung sind • die Nordwesteckenregel • das Rangfolgeverfahren • die Russell’sche Approximationsmethode • die Spaltenminimummethode (auch Matrixminimumverfahren genannt) • die Vogelsche Approximationsmethode (VAM, VAV) 4 Sind alle BV > 0, so hat man eine “normale” Basislösung, existieren auch BV = 0, spricht man von einer degenerierten Lösung. 3.2. ERÖFFNUNGSHEURISTIKEN 21 von denen wir die Nordwesteckenregel und die Spaltenminimummethode im Folgenden näher beschreiben werden. 3.2.1 Nordwesteckenregel Besonders einfaches heuristisches Verfahren (Näherungsverfahren), dessen Ergebnis darstellt, wieviel ein Lieferant an einen jeweiligen Kunden Liefert. Der Vorteil dieses Verfahrens liegt eindeutig in seiner Einfachheit und im geringen Rechenaufwand. Das Hauptproblem ist, dass Transportkosten komplett ignoriert werden. Am Besten ist der Algorithmus anhand des Beispiels aus Abschnitt 3.1.2 zu erklären. Gegeben seien drei Anbieter A1 , A2 und A3 , welche drei Nachfrager B1 , B2 und B3 vollständig beliefern (die Summe der Angebotsmengen ist gleich der Summe der Nachfragemengen). Die Angebotsmenge der Anbieter beträgt ai = {25, 15, 10}, die Nachfragenmengen sind bj = {30, 15, 5}. Ausgangspunkt ist eine Matrix, in der nach und nach eingetragen wird, welcher Anbieter welchen Nachfrager beliefert. Die rechte Spalte und die letzte Zeile geben die noch nicht zugeordneten Liefer- bzw. Nachfragenmengen an. B1 B2 B3 A1 A2 A3 bj 30 15 5 ai 25 15 10 Begonnen wird bei der manuellen Lösung links oben in der Matrix (daher der Name des Algorithmus). A1 beliefert in diesem Fall B1 mit seinem vollen Angebot, da die Nachfrage von B1 größer als das Angebot von A1 ist. Das verbleibende Angebot a1 von A1 wird daher auf 0 gesetzt, die Restnachfrage b1 nach Belieferung durch die Menge a1 = 25 von B1 auf 30 − 25 = 5. B1 25 B2 B3 A1 A2 A3 bj 30 → 5 15 ai 25 → 0 15 10 5 Da der Vorrat von A1 bereits erschöpft ist, der Bedarf von B1 aber noch nicht voll befriedigt ist, liefert nun A2 den Restbedarf (b1 = 5) von B1 . Man geht also Schritt für Schritt weiter nach unten bzw. nach rechts und befüllt die Lösungsmatrix. Nach dem nächsten Schritt sieht die Lösung also folgendermaßen aus B1 25 5 B2 B3 A1 A2 A3 bj 5 → 0 15 5 ai 0 15 → 10 10 22 KAPITEL 3. DAS TRANSPORTPROBLEM Weitere Zwischenschritte werden komprimiert dargestellt, da das Verfahren bereits klar sein sollte (die Nummern über den Pfeilen geben die Reihenfolge der Schritte an). Die Lösung sieht wie folgt aus B1 B2 B3 ai A1 25 0 1 A2 5 10 10 → 0 2 3 A3 5 5 10 → 5 → 0 1 2 3 bj 0 15 → 5 → 0 5 → 0 Voraussetzung für diesen Algorithmus sind die Mengen ai und bj , sowie das Übereinstimmen P P n der Summen dieser Listen ( m a = i i j bj ). Der Algorithmus liefert stets m + n − 1 Basisvariablen. Der Zielfunktionswert beträgt ZF = 3 X 3 X xij cij = 25 ∗ 1 + 5 ∗ 2 + 10 ∗ 1 + 5 ∗ 3 + 5 ∗ 3 = 75 i=1 j=1 Formale Implementierung mit Python wird so lange ausgeführt, bis das break statement erreicht wird break bricht die innerste Schleife ab len(sequence) gibt die Anzahl der Elemente einer Sequenz (zum Beispiel einer Liste) zurück. len(a) würde im obigen Beispiel also 3 betragen. while(True) m = len(a) n = len(b) i = 0 j = 0 while(True) x[i][j] = min(a[i],b[j]) a[i] = a[i] - x[i][j] b[j] = b[i] - x[i][j] if i==m-1 and j==n-1: break if a[i] == 0: i+=1 else: j+=1 Eine komplette Beispielimplementierung befindet sich in A.2.1 auf Seite 72. 3.2. ERÖFFNUNGSHEURISTIKEN 3.2.2 23 Spaltenminimummethode Auch die Spaltenminimummethode ist ein heuristisches Verfahren. Sie berücksichtigt im Gegensatz zur Nordwesteckenregel aber auch die Transportkosten und liefert dadurch bei nur geringfügig erhöhtem Rechenaufwand in der Regel viel bessere Ergebnisse. Auch sie sei am besten anhand des obigen Beispiels erklärt. Ausgangspunkt ist diesmal die leere Matrix, jedoch sind in den Feldern die jeweiligen Transportkosten hochgestellt eingetragen. Man beginnt bei dem Verfahren in der ersten Spalte und pro Schritt eine Spalte nach rechts. Nachdem man bei der rechten Spalte angekommen ist, beginnt man wieder mit der ersten Spalte, solange bis das gesamte Angebot der gesamten Nachfrage zugeordnet ist. A1 A2 A3 bj B1 B2 B3 ai 1 2 1 25 2 1 2 15 2 3 3 10 30 15 5 Im ersten Schritt prüft man, welche Kosten in der ersten Spalte am geringsten sind. Dies sind die Kosten c11 von A1 nach B1 und betragen 1. Daher wird hier die maximale Liefermenge von 25 (Minimum aus a1 und b1 ) eingetragen und die erste Zeile markiert, da dieser Anbieter keine Waren mehr übrig hat und daher nicht mehr berücksichtigt werden muss. B1 B2 B3 ai 1 2 1 (A1 ) 25 25 → 0 2 1 2 A2 15 2 3 3 10 A3 bj 30 → 5 15 5 Im zweiten Schritt wird die zweite Spalte analog untersucht. Diesmal ist c22 = 1 das Minimum. Es werden sowohl a2 als auch b2 Null. In diesem Fall darf nur die Spalte markiert werden (damit der Algorithmus eine ausreichende Zahl an Basisvariablen liefert). B1 (B2 ) B3 ai 1 2 1 (A1 ) 25 0 2 1 2 A2 15 → 0 15 2 3 3 A3 10 bj 5 15 → 0 5 Im dritten Schritt wird die dritte Spalte untersucht. Da die erste Zeile schon markiert ist, darf diese nicht miteinbezogen werden und das Minimum ist c23 = 2. Da a2 = 0 und b3 = 5 wird die zweite Zeile markiert. B1 (B2 ) B3 ai 2 1 (A1 ) 251 0 2 1 2 (A2 ) 15 0 0 2 3 3 A3 10 bj 5 0 5 24 KAPITEL 3. DAS TRANSPORTPROBLEM Der vierte Schritt beginnt wieder mit der ersten Spalte. Da die ersten beiden Zeilen bereits markiert sind, betragen die minimalen Kosten c31 = 2. In diesem Schritt kann die erste Spalte markiert werden. (B1 ) (B2 ) B3 ai 2 1 (A1 ) 251 0 2 1 2 (A2 ) 15 0 0 2 3 3 A3 5 10 → 5 bj 5→0 0 5 Im fünften (und in diesem Fall letzten Schritt) untersucht man die dritte Spalte (die zweite wird übersprungen, da sie bereits markiert ist. Auch in diesem Fall sind sowohl a3 als auch b4 gleich Null, jedoch wird hier nur die dritte Zeile statt der dritten Spalte markiert, da es sich um den letzten Schritt handelt (per Definition; der Algorithmus terminiert, wenn alle Zeilen markiert sind und nur noch eine Spalte unmarkiert ist) (A1 ) (A2 ) (A3 ) bj (B1 ) (B2 ) B3 ai 2 1 251 0 2 1 2 15 0 0 2 3 3 5 5 5→0 0 0 5→0 Voraussetzung für diesen Algorithmus sind die Mengen ai und P bj , die Kostenmatrix Pn C = cij , sowie das Übereinstimmen der Summen dieser Listen ( m j bj ). Der i ai = Algorithmus liefert stets m + n − 1 Basisvariablen. Formale Implementierung mit Python exit() continue beendet das Programm geht zum nächsten Durchlauf der innersten Schleife (bricht also den aktuellen Durchlauf ab) m = len(a) n = len(b) while(run): for j in range(m): if columnIsMarked(j): continue min_index = getUnmarkedRowWithMinCost(j) x[min_index][j] = min(a[min_index],b[j]) a[min_index] = a[min_index] - x[min_index][j] b[j] = b[j] - x[min_index][j] if unmarkedColumns()>=2 and b[j]==0: markColumn(j) if a[min_index]==0 and b[j]!=0: markRow(min_index) elif a[min_index]==b[j]==0 and not columnIsMarked(j): 3.3. VERBESSERUNGSVERFAHREN 25 markRow(min_index) if allRowsMarked() and allButOneColumnsMarked(): exit() Eine komplette Beispielimplementierung befindet sich in A.2.2 auf Seite 72. 3.3 Verbesserungsverfahren Aus einer zulässigen Basislösung (siehe Abschnitt 3.2 auf Seite 20) kann iterativ eine Optimallösung konstruiert werden. Die Konstruktion derselben basiert auf sogenannten elementaren Kreisen und Opportunitätskosten5 , die auftreten, solange eine BV durch eine N BV im Zuge der vorgestellten Verfahren ausgetauscht werden kann, um die Transportkosten zu verringern. Mögliche Verfahren hierzu sind die • Stepping-Stone-Methode und die • MODI-Methode (auch Potentialmethode genannt). Bei beiden Methoden werden iterativ durch Austausch einer Nichtbasisvariablen mit einer Basisvariablen die Gesamtkosten verringert. Beide Methoden führen unter den auf Seite 15 genannten Bedingungen zu einer Optimallösung, jedoch benötigt die MODIMethode im allgemeinen weniger Rechenaufwand. [Wik08g] Die Funktionsweise dieser Verfahren beruht generell auf den Zusammenhängen zwischen primalen und dualen Problemen (primale Algorithmen und komplementärer Schlupf). Satz vom komplementären Schlupf Eine zulässige Lösung x ist genau dann optimal für das primale Transportproblem, wenn eine komplementäre, zulässige duale Lösung (u, v) existiert. Daher ist das das Paar (u, v) komlemänter zu x wenn xij ∗ (cij − ui − vj ) = 0 ⇔ (xij > 0 ⇒ ui + vj = cij ) daraus folgt, wenn xij eine Basisvariable (BV ) ist xBV ij ⇒ ui + vj = cij und wenn xij eine Nichtbasisvariable (N BV ) ist, können sich Kosteneinsparungen ergeben cij := cij − ui − vj für alle i und j, deren xij N BV ist. 5 Opportunitätskosten ... sind entgangene Erlöse, die dadurch entstehen, dass vorhandene Möglichkeiten (Opportunitäten) zur Nutzung von Ressourcen nicht [optimal] wahrgenommen werden.[Wik08e] 26 KAPITEL 3. DAS TRANSPORTPROBLEM 3.3.1 Stepping-Stone Methode Die Stepping-Stone-Methode wird im folgenden Anhand des Beispiels aus Abschnitt 3.1.2 auf Seite 17 mit der Basislösung aus der Nordwesteckenregel in Abschnitt 3.2.1 auf Seite 21 erklärt. Der Zielfunktionswert dieser Basislösung war ZF = 75. Die Elemente der Basislösung sind in der folgenden Matrix eingetragen, die hochgestellten Zahlen sind die Werte der Kostenmatrix. 1 251 2 52 101 2 2 53 53 In jedem Schritt des Verfahrens werden alle Nichtbasisvariablen im Hinblick auf das Kostensenkungspotential überprüft. Für jede Nichtbasisvariable xij = 0 wird dazu analysiert, wie sich die Gesamtkosten ändern würden, wenn eine Einheit des Gutes von Ai nach Nj transportiert werden würde. Dazu wird zu jeder Zelle (i, j) einer Nichtbasisvariable xij zusammen mit einer Teilmenge der Zellen der Basisvariablen ein elementarer Kreis bestimmt. Elementarer Kreis Die Zellen z1 bis zk (k ≥ 5) bilden dabei einen elementaren Kreis, wenn z1 = zk ist6 , zwei aufeinanderfolgende Zellen zi und zi+1 in der gleichen Zeile oder Spalte des Tableau liegen und in jeder Spalte und Zeile höchstens zwei Zellen des elementaren Kreises sind. Es seien die Zellen (i, o), (p, o), (p, q), · · · , (v, j) der Basisvariablen, die zusammen mit der Zelle (i, j) der Nichtbasisvariablen xij einen elementaren Kreis beschreiben, bestimmt. Dann beschreibt cij := cij −cio +cpo −cpq +· · ·−cvj 7 die Änderung der Gesamtkosten pro zusätzlich von Ai nach Nj transportierter Einheit verbessern. Ist cij positiv, würde dies zu einer Erhöhung der Gesamtkosten führen, ist cij gleich Null, würden sich die Gesamtkosten nicht ändern. Um mit möglichst wenig Iterationen zur Optimallösung BV zu kommen wird deswegen die Nichtbasisvariable xN mit dem kleinsten negativen ij cij als neue Basisvariable aufgenommen und mit der wertmässig kleinsten Basisvariable xBV ab , deren Kosten bei der Bestimmung von cij mit negativem Faktor eingingen, ersetzt8 . Die Nichtbasisvariable xij wird neue Basisvariable mit dem Wert von xab und xab wird neue Nichtbasisvariable mit Wert Null. Damit die neue Basislösung zulässig bleibt, werden die übrigen Basisvariablen des elementaren Kreises um den Wert der ursprünglichen Basisvariable xab erhöht bzw. (wenn die zugehörigen Kosten bei der 6 Daraus folgt, dass ein elementarer Kreis mindestens vier verschiedene Zellen umfasst. Die Durchlaufrichtung des elementaren Kreises ist dabei egal, da es sich immer um eine ungerade Anzahl an Basisvariablen handeln muss. 8 Falls mehrere Basisvariable, die mit negativem Faktor eingingen, gleichzeitig den kleinsten Wert haben, so wird eine beliebige von ihnen zur Nichtbasisvariable (und die neue Basislösung ist degeneriert, weil eine Basisvariable 0 wird). 7 3.3. VERBESSERUNGSVERFAHREN 27 Bestimmung von cij mit negativem Faktor eingingen) verringert. Alle anderen Variablen bleiben unverändert. Das Verfahren wird solange wiederholt, bis in einer Iteration alle neu bestimmten cij größer oder gleich Null sind, die Gesamtkosten also nicht mehr verringert werden können und die Lösung damit optimal ist. [Wik08f] Erste Iteration Für unser Beispiel heißt das c12 c13 c23 c31 := c12 − c11 + c21 − c22 = 2 − 1 + 2 − 1 = 2 := c13 − c11 + c21 − c22 + c32 − c33 = 1 − 1 + 2 − 1 + 3 − 3 = 1 := c23 − c22 + c32 − c33 = 2 − 1 + 3 − 3 = 1 := c31 − c32 + c22 − c21 = 2 − 3 + 1 − 2 = −2 Die für die obigen Rechnungen von oben nach unten verwendeten elementaren Kreise sind im folgenden von links nach rechts durch die eingetragenen Kleinbuchstaben (a, b, c,...) dargestellt. Der Beginn des elementaren Kreises (a) ist die Position einer Nichtbasisvariable, alle anderen markierten Positionen (b, c, ...) sind Basisvariablen. b 1 a2 c2 d1 2 3 1 2 3 1 b 1 2 a1 c2 d 1 2 2 e3 f 3 2 1 b 1 a2 c3 d 3 2 2 1 2 d 2 c1 a2 b 3 1 2 3 In unserem Fall ist c31 = −2 die maximal mögliche Kosteneinsparung pro Einheit. Daher wird x3 1 neue Basisvariable und als N BV wie oben beschrieben mit der wertmässig kleinsten Basisvariable xab , deren Kosten bei der Bestimmung von cij mit negativem Faktor eingingen, ersetzt. Da in c31 := c31 − c32 + c22 − c21 = 2 − 3 + 1 − 2 = −2 nur c32 und c21 eingingen, kommen nur x32 und x21 zum Ersetzen in Frage. Daraus folgt, dass ∆ = min(x32 , x21 ) = min(5, 5) = 5 - somit wird x31 = 5. Die übrigen Variablen des elementaren Kreises werden also alle um 5 verringert beziehungsweise um 5 erhöht, je nachdem, ob sie bei der Berechnung von c31 negativ oder positiv eingegangen sind. Da ∆ = x32 = x21 kann frei gewählt werden, welche der beiden zur N BV wird - wir entscheiden uns für x21 und erhalten damit die Matrix 251 2 52 2 1 1 15 03 2 53 Der neue Zielfunktionswert ist entweder durch 3 X 3 X ZF = xij cij = 25 ∗ 1 + 15 ∗ 1 + 5 ∗ 2 + 0 ∗ 3 + 5 ∗ 3 = 65 i=1 j=1 oder kurz durch ZFneu = ZFalt + ∆ ∗ c31 = 75 + 5 ∗ (−2) = 65 zu berechnen. Die Kurzmethode beruht auf der Tatsache, dass c31 die Opportunitätskosten pro zusätzlich transportierter Einheit angibt und ∆ die Anzahl der zusätzlich transportierten Einheiten darstellt. Damit ist die erste Iteration fertig und wir können mit dem zweiten Durchlauf beginnen. 28 KAPITEL 3. DAS TRANSPORTPROBLEM Zweite Iteration c12 c13 c21 c23 := c12 − c11 + c31 − c32 := c13 − c11 + c31 − c33 := c21 − c31 + c32 − c22 := c23 − c22 + c32 − c33 =2−1+2−3=0 = 1 − 1 + 2 − 3 = −1 =2−2+3−1=2 =2−1+3−3=1 Die für die obigen Rechnungen von oben nach unten verwendeten elementaren Kreise sind im folgenden wieder von links nach rechts durch die eingetragenen Kleinbuchstaben (a, b, c,...) dargestellt. b 1 a2 2 c 2 1 d 3 1 b1 2 a1 2 2 1 2 3 c 2 3 d 2 1 a2 d 1 22 c3 3 1 1 2 2 3 2 2 1 b 1 a2 c3 d3 In diesem Fall ist c13 = −1 die maximal mögliche Kosteneinsparung pro Einheit. Die negativ eingehenden x sind x11 = 25 und x33 = 5. Das Minimum der beiden beträgt ∆ = min(x11 , x33 ) = min(25, 5) = 5, daher wird x33 = 5 neue N BV . Die übrigen Variablen des elementaren Kreises werden wieder alle um 5 verringert beziehungsweise um 5 erhöht, je nachdem, ob sie bei der Berechnung von c13 negativ oder positiv eingegangen sind. Die neue Basislösung lautet daher 201 1 2 10 51 2 2 15 03 2 3 Der neue Zielfunktionswert beträgt ZFneu = ZFalt + ∆ ∗ c13 = 65 + 5 ∗ (−1) = 60 Dritte Iteration c12 c21 c23 c33 := c12 − c11 + c31 − c32 = 2 − 1 + 2 − 3 = 0 := c21 − c31 + c32 − c22 = 2 − 2 + 3 − 1 = 2 := c23 − c22 + c32 − c31 + c11 − c13 = 2 − 1 + 3 − 2 + 1 − 1 = 2 := c33 − c13 + c11 − c13 = 3 − 1 + 1 − 2 = 1 Da keine der untersuchten N BV ein negatives cij besitzt, kann die Lösung nicht mehr weiter verbessert werden und ist damit optimal und hat den Zielfunktionswert ZF = 60. 3.3.2 MODI-Methode Die Abkürzung MODI steht für “modifizierte Distribution”, es handelt sich bei der MODI-Methode also um die “modifizierte Distributionsmethode”. Seltener wird sie auch als Potentialmethode oder u-v-Methode bezeichnet. Auch dieser Algorithmus wird 3.3. VERBESSERUNGSVERFAHREN 29 im folgenden Anhand des Beispiels aus Abschnitt 3.1.2 auf Seite 17 mit der Basislösung aus der Nordwesteckenregel in Abschnitt 3.2.1 auf Seite 21 erklärt. Der Zielfunktionswert dieser Basislösung war ZF = 75. Die Elemente der Basislösung sind in der folgenden Matrix eingetragen, die hochgestellten Zahlen sind die Werte der Kostenmatrix. 1 251 2 2 1 2 5 10 2 53 53 Die MODI-Methode verringert pro Iteration durch Austausch einer Nichtbasisvariablen mit einer Basisvariablen die Gesamtkosten. Kann keine Verbesserung mehr erzielt werden ist eine Optimallösung gefunden. BV Für jede Nichtbasisvariable xN = 0 wird dazu analysiert, wie sich die Gesamtij kosten ändern würden, wenn eine Einheit des Gutes von Ai nach Nj transportiert BV werden würde. Dazu wird zu der Zelle (i, j) einer jeden Nichtbasisvariablen xN die ij Kostenänderung mit cij = cij − ui − vj berechnet, wobei zuvor die u1 , · · · , um und v1 , · · · , vn nacheinander aus den cij = ui + vj der Basisvariablen xBV ij berechnet werden müssen, wobei genau ein ui oder vj gleich Null gesetzt wird. Das beruht auf dem Satz vom komplementären Schlupf aus Abschnitt 3.3 auf Seite 25. Erste Iteration Berechnen wir zuerst also alle ui und vj und setzen dazu v1 gleich 09 . Aus v1 = 0 und c11 = u1 + v1 folgt u1 = 1, da c11 = 1. Alle anderen ui und vj werden auch aus dem Zusammenhang cij = ui + vj berechnet10 c11 c21 c22 c32 c33 = u1 + v1 = u2 + v1 = u2 + v2 = u3 + v2 = u3 + v3 cij ui vj 1 1 0 2 2 0 1 2 −1 3 4 −1 3 4 −1 Bei der Berechnung von Hand empfiehlt es sich, die Werte der ui und vj mit der Tabelle der Basisvariablen zu berechnen. Die dazu nötigen Schritte sind von links nach rechts in den folgenden Matrizen aufgezeigt. ui vj 9 1 251 2 52 101 2 2 53 53 0 vj 1 251 2 52 101 2 2 53 53 0 ui 1 vj 1 251 2 52 101 2 2 53 53 0 ui 1 2 Es ist egal, welches ui oder welches vj Null gesetzt wird, aber es ist günstig eines zu wählen, in dessen Zeile/ Spalte sich möglichst viele Basisvariablen befinden. 10 Es müssen die den Basisvariablen x11 , x21 , x22 , x32 und x33 zugeordneten c11 , c21 , c22 , c32 und c33 verwendet. 30 KAPITEL 3. DAS TRANSPORTPROBLEM ui ui ui 1 1 1 251 2 1 251 2 1 251 2 1 2 1 2 1 2 1 2 2 2 2 2 2 5 10 5 10 5 10 3 3 3 3 3 3 2 2 2 5 5 5 5 4 5 5 4 vj 0 −1 vj 0 −1 vj 0 −1 −1 Mit den eben berechneten ui und vi können nun die Opportunitätskosten der einzelnen Nichtbasisvariablen errechnet werden. c12 := c12 − u1 − v2 = 2 − 1 − (−1) = 2 c13 := c13 − u1 − v3 = 1 − 1 − (−1) = 1 c23 := c23 − u2 − v3 = 2 − 2 − (−1) = 1 c31 := c31 − u3 − v1 = 2 − 4 − 0 = −2 Ist cij positiv, würde dies zu einer Erhöhung der Gesamtkosten führen, ist cij gleich Null, würden sich die Gesamtkosten nicht ändern. Um mit möglichst wenig Iterationen BV zur Optimallösung zu kommen wird deswegen die Nichtbasisvariable xN mit dem ij kleinsten negativen cij als neue Basisvariable aufgenommen.11 Zu der zugehörigen Zelle (i, j) des Transporttableaus wird dazu zusammen mit den Zellen der Basisvariablen ein elementarer Kreis bestimmt12 . Jetzt wird wie bei der Stepping-Stone Methode entlang des elementaren Kreises alternierend von der ersten Basisvariablen xio der Wert h subtrahiert und auf die nächste Basisvariable xpo addiert, bis die Zelle (i, j) erreicht wird, die den Wert h erhält13 . Die Umlaufrichtung des elementaren Kreises ist (logischer Weise) egal. h ist dabei der Wert der wertmässig kleinsten Basisvariable xBV ab des elementaren Kreises von dem h subtrahiert werden soll14 . Diese Basisvariable xab wird zur neuen Nichtbasisvariable und xij mit Wert h zur neuen Basisvariable. Das Verfahren wird solange wiederholt, bis alle (in jeder Iteration neu zu bestimmenden) cij größer oder gleich Null sind, die Gesamtkosten also nicht mehr verringert werden können und die Lösung damit optimal ist. [Wik08c] Unser kleinstes cij ist c31 = −2, daher wird in unserem Beispiel x31 zur neuen Basisvariable. Der damit verbundene elementare Kreis ist 1 2 d 2 c1 a2 b 3 1 2 3 Die für h in Frage kommenden Variablen (jene, von denen h abgezogen wird) sind x21 = 5 und x32 = 5. Daraus folgt, dass ∆ = min(x21 , x32 ) = 5. Da es in diesem Fall egal ist, welche der beiden zur neuen Nichtbasisvariablen wird (beide haben den Wert 5), wählen wir x32 . Die neue Basislösung ist damit 1 251 2 2 1 2 0 15 2 3 5 53 11 Gibt es mehr als ein kleinstes negatives cij , so kann unter ihnen frei gewählt werden. Siehe dazu Abschnitt 3.3.1 auf Seite 26. 13 xij hatte als N BV den Wert 0 und 0+h=h 14 Falls mehrere Basisvariable, von denen h subtrahiert wurde, gleichzeitig den kleinsten Wert haben, so wird eine beliebige von ihnen zur Nichtbasisvariable (und die neue Basislösung ist degeneriert, weil eine Basisvariable 0 wird). 12 3.3. VERBESSERUNGSVERFAHREN 31 Der neue Zielfunktionswert beträgt ZFneu = ZFalt + ∆ ∗ c31 = 75 + 5 ∗ (−2) = 65 Zweite Iteration Wir beginnen wieder mit der Bestimmung unserer ui und vj und nehmen dazu wieder v1 = 0 an. c11 c21 c22 c31 c33 cij ui vj 1 1 0 2 2 0 1 2 −1 2 2 0 3 2 1 = u1 + v1 = u2 + v1 = u2 + v2 = u3 + v1 = u3 + v3 Mit den eben berechneten ui und vi können wieder die Opportunitätskosten der einzelnen Nichtbasisvariablen errechnet werden. c12 c13 c23 c32 := c12 − u1 − v2 := c13 − u1 − v3 := c23 − u2 − v3 := c32 − u3 − v2 = 2 − 1 − (−1) = 2 = 1 − 1 − 1 = −1 = 2 − 2 − 1 = −1 = 3 − 2 − (−1) = 2 Da in diesem Fall c13 = c23 = −1, wählen wir x13 als neue Basisvariable15 . Der mit x13 verbundene elementare Kreis ist b 1 2 a1 2 c 2 1 2 3 d3 Die für h in Frage kommenden Variablen (jene, von denen h abgezogen wird) sind x11 = 25 und x33 = 5. Daraus folgt, dass ∆ = min(x11 , x32 ) = min(25, 5) = 5. Die neue Basislösung ist damit 201 2 51 02 151 2 3 102 3 Der neue Zielfunktionswert beträgt ZFneu = ZFalt + ∆ ∗ c13 = 65 + 5 ∗ (−1) = 60 15 Bei der Wahl von x23 als neue BV wäre x21 = 0 in den elementaren Kreis aufgenommen worden und weil dadurch h = 0 werden würde, wäre die Iteration umsonst. 32 KAPITEL 3. DAS TRANSPORTPROBLEM Dritte Iteration Es wird wieder mit der Bestimmung der ui und angenommen. cij c11 = u1 + v1 1 c13 = u1 + v3 1 c21 = u2 + v1 2 c22 = u2 + v2 1 c31 = u3 + v1 2 vj begonnen und v1 = 0 wird wieder ui vj 1 0 1 0 2 0 2 −1 2 0 Mit den berechneten ui und vi sind wieder die Opportunitätskosten der einzelnen Nichtbasisvariablen zu errechnet werden. c12 c23 c32 c33 := c12 − u1 − v2 := c23 − u2 − v3 := c32 − u3 − v2 := c33 − u3 − v3 = 2 − 1 − (−1) = 2 =2−2−0=0 = 3 − 2 − (−1) = 2 =3−2−0=1 Da keines der errechneten cij ≤ 0 ist, kann die Basislösung aus der zweiten Iteration nicht mehr verbessert werden und ist damit eine Optimallösung. Kapitel 4 Standortprobleme 4.1 Das Warehouse Location Problem Das Warehouse Location Problem (WLP) dient der Standortbestimmung in der Ebene. Dabei werden die Knoten in einem Graphen in zwei Teilmengen unterteilt - eine Teilmenge für die Nachfrager und eine weitere für die potentiellen Anbieter (Produktionsstätten und Lager) und ist in dieser Hinsicht dem Transportproblem aus Kapitel 3 sehr ähnlich. Jedoch handelt es sich hier nur um potentielle Standorte der Anbieter - es wird also bei diesem Problem nicht (nur) darüber entschieden, wer wen beliefert, sondern vielmehr darüber, welche Standorte aufgebaut werden. Jeder potentielle Standort verursacht Fixkosten und hat für jeden zu beliefernden Kunden variable Kosten für die Lieferung je Mengeneinheit. Ziel dieses Problemfeldes ist es, wenn möglich die optimale Kombination der zu errichtenden Warenhäuser und Produktionsstätten zu finden. Dabei können natürlich auch Nebenbedingungen auftreten - zum Beispiel könnte es vertraglich geregelt sein, dass manche Nachfrager voll beliefert werden müssen. 4.1.1 Add-Algorithmus Dieser Algorithmus ist ein heuristisches Verfahren welches aus m Standorten mit Fixkosten fi und variablen Kosten zur Belieferung von n Kunden versucht, eine möglichst gute Kombination von Standorten zu finden. Der Algorithmus sei am besten anhand von folgendem Beispiel zur Belieferung von 7 Kunden durch 5 Anbieter erklärt. Der Algorithmus geht entweder von vorläufig verbotenen oder von vorläufig einbezogenen Standorten aus und terminiert mit je einer Liste von entgültig einbezogenen und entgültig verbotenen Standorten. Im ersten Durchgang wird lediglich die Summe aus allen variablen Kosten jedes Anbieters und dessen Fixkosten berechnet. Dieser Anbieter wird danach in die Liste der entgültig einbezogenen Anbieter aufgenommen. 33 34 KAPITEL 4. STANDORTPROBLEME I0V L = {1, 2, 3, 4, 5} Menge der vorläufig verbotenen Standorte I0 = {} Menge der entgültig verbotenen Standorte I1 = {} Menge der entgültig einbezogenen Standorte P i 1 2 3 4 5 6 7 fi 1 1 2 10 9 6 7 3 5 43 2 2 9 0 7 3 6 10 7 44 3 7 6 1 5 3 10 5 5 42 4 6 5 10 2 6 3 6 6 44 min 5 6 4 6 3 7 2 6 5 39 ←− I0V L = {1, 2, 3, 4} I0 = {} I1 = {5} Im zweiten Schritt wird ermittelt, unter Einbeziehung welchen Standorts die Kosten am meisten gesenkt werden können. Dazu wird in den Feldern der Tabelle je die Differenz aus den bisherigen Kosten und den Kosten der verbleibenden Standorte eingetragen. Ist die Ersparnis negativ oder Null (wenn es also keine Ersparnis gibt), so vermerken wir dies lediglich mit einem Minus, da in diesem Fall auf den bisherigen Standort I1 = {5} zurückgegriffen wird, der ja auf jeden Fall erhalten bleibt. wi ist die Ersparnis bei den variablen Kosten der einzelnen Anbieter. Die Summenspalte gibt die Differenz aus variabler Ersparnis und zusätzlichen Fixkosten (hier negativ dargestellt, da sie die Ersparnis verringern) an. Umso größer diese ist, desto mehr kann man sich ersparen. Ist sie negativ, so wäre die Aufnahme des Standortes in Summe mit zusätzlichen Kosten verbunden und er kann ausgeschlossen werden (das heißt, er wird zu I0 hinzugefügt). Der Standort mit der größten Ersparnis wird in I1 aufgenommen. In den Spalten der ersten beiden Nachfrager in der folgenden Tabelle sei die Rechnung dargestellt, in den anderen lediglich die Ergebnisse. P 1 2 3 4 5 6 7 w i fi i 1 6 − 1 = 5 4 − 2 = 2 − − 1 − 3 11 −5 6 max 2 6 − 2 = 4 4 − 9 = − 6 − 4 − − 14 −7 7 −→ I1 = {2, 5} 3 6 − 7 = − 4 − 6 = − 5 − 4 − 1 10 −5 5 ≤0 4 6 − 6 = − 4 − 5 = − − 1 1 − − 2 −6 −4 −→ I0 = {4} I0V L = {1, 3} Im obigen Schritt wird der zweite Anbieter fix aufgenommen, da durch ihn die größten Ersparnisse erzielbar sind, während der vierte Anbieter fix ausgeschlossen wird, da er zusätzliche Kosten verursachen würde (seine Ersparnis ist ≤ 0). Im nächsten Schritt werden von den möglichen Ersparnissen der verbleibenden Anbieter die bisherigen Ersparnisse abgezogen, dadurch werden die noch erzielbaren Ersparnisse ausgerechnet. Wenn schon im letzten Schritt keine Ersparnisse erzielbar waren, wird dies gleich mit einem “−” dargestellt. Ist die Ersparnis kleiner als die Ersparnis des letzten Schrittes ist, so zeigen wir zwar die Rechnung auf, das Ergebnis ist aber wieder ein “−”. i 1 1 5−4=5 2 2−0=2 3 − 4 5 − 1−4=− 6 7 − 3 wi 6 fi −5 P 3 − − 5−6=− − 4−4=− − 1 1 −5 −4 1 max −→ I1 = {1, 2, 5} ≤0 −→ I0 = {3, 4} 4.1. DAS WAREHOUSE LOCATION PROBLEM 35 I0V L = {} Da I0V L = {} ist, also keine vorläufig ausgeschlossen Standorte mehr übrig bleiben, terminiert der Algorithmus hier. Die fixen und variablen Kosten der durch den Algorithmus vorgeschlagenen Lösung kann man aus der Starttabelle lesen, indem man stets die minimalen variablen Kosten zu jedem Nachfrager und alle Fixkosten der einbezogenen Standorte berechnet. Am besten markiert man sich dazu die jeweilig minimalen variablen Kosten der einbezogenen Standorte, sowie deren Fixkosten. i 1 2 3 4 5 6 7 fi 1 [1] [2] 10 9 6 7 [3] [5] 2 2 9 [0] 7 [3] 6 10 [7] 5 6 4 6 [3] 7 [2] 6 [5] F K = 5 + 7 + 5 = 17 V K = 1 + 2 + 0 + 3 + 3 + 2 + 3 = 14 Wichtig ist, nicht zu vergessen, dass dieser Algorithmus nur eine heuristische Lösung liefert, die daher nicht optimal sein muß. 4.1.2 Miele Verfahren - Standortbestimmung in der Ebene Das Verfahren von Miele liefert schon nach wenigen Iterationen hinreichend genaue Ergebnisse für viele praktische Anwendungen von Standortbestimmungen in der Ebene. Ziel des Verfahrens ist es, einen Standort (Punkt) zu finden, dessen gewichteter Abstand von einer Liste gegebener Punkte minimal ist. Die im Folgenden verwendeten Variablen sind x, y Koordinaten des gesuchten Punktes (x0 , y 0 : Startwert, xµ , y µ : Ergebnis der µ-ten Iteration) uj , vj Koordinaten der gegebenen Punkte bj Gewichtung der gegebenen Punkte (diese sind am besten als Häufigkeit, mit der die Strecke zum gesuchten Punkt zurückgelegt werden muss, zu verstehen) positive Konstante (nötige Abweichung, um eine Division durch 0 auszuschliessen, falls der Zielpunkt mit einem der gegebenen Punkte zusammenfällt) Die mathematische Formulierung des Ziels lautet: n q X 0 (4.1) minimiere: Z (x, y) = bj (x − uj )2 + (y − vj )2 + j=q Wenn man den Startwert des Verfahrens “schlau” wählt ist ein vernünftiges Ergebnis nach deutlich weniger Iterationen möglich. Es empfiehlt sich zum Beispiel die Verwendung des Schwerpunktes (die x und y Koordinaten des Startwertes werden aus den gewichteten Mittelwerten der gegebenen Koordinaten berechnet): Pn Pn b u j j j=1 j=1 bj vj x0 = Pn ; y 0 = Pn (4.2) j=1 bj j=1 bj 36 KAPITEL 4. STANDORTPROBLEME Die Ergebnisse µ-ten Iteration werden als Funktion der Ergebnisse der (µ-1)-ten Iteration berechnet. x1 und y 1 werden zum Beispiel aus x0 und y 0 berechnet: Pn j=1 xµ = Pn j=1 Pn j=1 y µ = Pn j=1 √ √ √ √ bj uj (xµ−1 −uj )2 +(y µ−1 −vj )2 + bj (4.3) (xµ−1 −uj )2 +(y µ−1 −vj )2 + bj vj (xµ−1 −uj )2 +(y µ−1 −vj )2 + bj (4.4) (xµ−1 −uj )2 +(y µ−1 −vj )2 + Eine Beispielimplementierung dieses Algorithmus in der Programmiersprache Python steht in A.2.3 auf Seite 74 zur Verfügung. Beispiel Als konkretes Beispiel verwenden wir die Punkte (1,3),(2,8),(2,10),(8,16),(10,18) mit den Häufigkeiten 4,10,3,1,5 und = 10−5 . Das Python Programm auf Seite 74 hat für diese Punkte folgenden Output: $ ./miehle.py x0 = 3.826087, x1 = 2.639186, x2 = 2.286822, x3 = 2.172641, x4 = 2.097114, x5 = 2.050499, x6 = 2.025191, x7 = 2.012335, x8 = 2.006034, x9 = 2.003047, 4.2 y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 = = = = = = = = = = 9.913043, 9.002678, 8.582063, 8.300420, 8.146531, 8.070372, 8.033705, 8.016175, 8.007836, 8.003939, Z’(x0,y0) Z’(x1,y1) Z’(x2,y2) Z’(x3,y3) Z’(x4,y4) Z’(x5,y5) Z’(x6,y6) Z’(x7,y7) Z’(x8,y8) Z’(x9,y9) = = = = = = = = = = 120.056857 107.272731 103.972690 102.280194 101.355291 100.881988 100.648410 100.535914 100.483833 100.462483 Überdeckungs- und Partitionsprobleme Überdeckungs- und Partitionsprobleme sind im Englischen auch als “set covering” und “set partitioning” bekannt. Von einer Überdeckung spricht man, wenn mehrere Mengen bei ihrer Vereinigung jedes Element einer anderen Menge mindestens einmal enthalten. Man zum Beispiel die Menge I = {1, 2, 3, 4, 5, 6} und die Mengen Pj=1 = {1, 3, 5}, Pj=2S= {1, 2, 6} und Pj=3 = {2, 4, 6}, so ist jedes Element von I mindestens einmal in 3j=1 Pj enthalten und Pj , j ∈ {1, 2, 3} ist eine Überdeckung von I. Generell ist die Rede von einer Überdeckung, wenn für j ∈ {1, 2, 3, · · · , n} gilt Pj ⊆ I 4.2. ÜBERDECKUNGS- UND PARTITIONSPROBLEME I⊆ n [ 37 Pj j=1 Gilt zusätzlich Pj ∩ Pk = {} für j 6= k so spricht man von einer Partition. In “Deutsch” ist eine Partition also das gleich wie eine Überdeckung, nur dass zusätzlich gilt, dass kein Element von I in mehr als einer Menge Pj vorkommen darf. Zum Beispiel sind P1 = {1, 2, 5, 6} und P2 = {3, 4} eine Partition von I = {1, 2, 3, 4, 5, 6}. Jeder Teilmenge Pj werden P nun Kosten cj > 0 zugeordnet. Die Gesamtkosten einer Überdeckung sind damit nj=1 cj . Nun definieren wir 1, falls j in der Überdeckung auftritt xj := 0, sonst 1, falls i ∈ Pj aij := 0, falls i ∈ / Pj Damit lassen sich Überdeckungs- und Partitionsprobleme als Bool’sche Optimierungsaufgaben formulieren. 4.2.1 Überdeckungsproblem C = cj sei der Vektor der Kosten jeder Partition Pj . X = xj sei der Vektor der Variablen. A sei eine m × n Matrix. Es gelte minimiere: z = C T X unter der Nebenbedingung Ax ≥ E wobei E ein m-dimensionaler Vektor mit E = {1, 1, · · · , 1} ist. 4.2.2 Partitionsproblem C = cj sei der Vektor der Kosten jeder Partition Pj . X = xj sei der Vektor der Variablen. A sei eine m × n Matrix. Es gelte minimiere: z = C T X unter der Nebenbedingung Ax = E wobei E ein m-dimensionaler Vektor mit E = {1, 1, · · · , 1} ist. 38 4.2.3 KAPITEL 4. STANDORTPROBLEME Koopmans-Beckman-Problem Dieses Problem ist nach seinen Urhebern, Koopmans und Beckman benannt. Der Einfachheit halber referenzieren wir es aber mit QZOP (quadratisches Zuordnungsproblem). Es geht dabei um die Anordnung mehrerer Organisationseinheiten (OE), wobei die Summe der pro Zeitperiode aufzuwendenden Transportkosten minimiert werden soll. h, i Bezeichnung von Organisationseinheiten j, k verfügbare Plätze 1, wenn OE h auf Platz j angeordnet sein soll xhj = 0, sonst Die mathematische Formulierung des Problems lautet minimiere: Z(x) = p p p p X X X X h=1 i=1 i6=h j=q thi djk xhj xik k=1 k6=j unter den Nebenbedingungen p X xjk = 1 h ∈ {1, 2, · · · , p} j=1 p X h=1 xhj = 1 j ∈ {1, 2, · · · , p} Kapitel 5 Beispiele Alle Beispiele sind aus [Gre07] entnommen. 5.1 Bäume, Entfernungen und Wege 1. Finden Sie für das Postkutschenproblem in Abbildung 5.1 auf Seite 39 mittels dynamischer Programmierung den kürzesten Weg von der Ost- (Knoten 1) zur Westküste (Knoten 10). 2. Bestimmen Sie für das Problem in Abbildung 5.2 auf Seite 39 den kürzesten Weg von Vladivostok (Knoten 1) nach Rostov (Knoten 13). Interpretieren Sie 5 6 7 3 3 10 9 5 8 6 3 7 7 2 3 3 1 7 8 4 1 5 7 4 3 3 1 6 1 3 8 5 13 4 5 11 3 9 9 5 2 5 5 2 5 5 9 6 2 1 3 10 7 4 1 8 7 12 5 6 4 1 3 6 3 Abbildung 5.1: Das Postkutschenproblem Abbildung 5.2: Vladivostok nach Rostov den Graphen als Eisenbahnstreckennetz und die Pfeilbewertungen als mögliche Erlöse zwischen den einzelnen Stationen. Welche Strecke soll der Zug befahren, wenn die Eisenbahngesellschaft den Erlös maximieren möchte. Beantworten Sie diese Frage durch ein Lösungsverfahren der dynamischen Programmierung. 3. Bestimmen Sie für den ungerichteten Graphen in Abbildung 5.3 auf Seite 40 einen minimal spannenden Baum. 39 40 KAPITEL 5. BEISPIELE 4. Zwischen sieben Orten (die von 1 bis 7 durchnummeriert sind) soll ein Richtfunknetz aufgebaut werden. Die Kosten für die Installation einer Richtfunkstrecke zwischen den Orten i und j betragen cij Geldeinheiten. Dort, wo eine direkte Verbindung zwischen den Orten i und j nicht möglich ist, ist cij = ∞. Die Kosten sind in der folgenden Kostenmatrix mit den Elementen cij (i, j = 1, 2, ...7) zusammengefaßt. 0 7 2 6 6 7 5 7 0 7 7 2 8 ∞ 2 7 0 6 7 4 6 6 7 6 0 8 7 9 c= 6 2 7 8 0 8 3 7 8 4 7 8 0 ∞ 5 ∞ 6 9 3 ∞ 0 (a) Bestimmen Sie ein billigstes Richtfunknetz, so dass jeder der sieben Orte mit jedem anderen (eventuell über Zwischenorte) verbunden ist. (b) Was ändert sich, wenn alle Kostenkoeffizienten mit der gleichen positiven Konstanten k1 multipliziert werden oder um eine gleiche postive Konstante k2 erhöht werden? 5. Wie lautet für den Graphen in Abbildung 5.4 auf Seite 40, der durch den FifoAlgorithmus errechnete, kürzeste Weg von Knoten 1 zu allen anderen? 7 7 8 6 4 5 6 4 10 3 2 0 5 3 3 2 1 1 Abbildung 5.3: Gewichteter, ungerichteter Graph 9 10 1 4 3 4 4 5 2 4 -1 4 3 -6 Abbildung 5.4: Gerichteter Graph 6. Wenden Sie den Tripel-Algorithmus auf den folgenden Graphen in Abbildung 5.5 auf Seite 41 an. 7. Berechnen Sie mit dem Tripel-Algorithmus Entfernungs- und Routenmatrix von Abbildung 5.6 auf Seite 41 und geben Sie den kürzesten Weg von Knoten 1 nach 5, von 4 nach 2 und von 5 nach 4 an. 8. Die Abbildung 5.7 auf Seite 45 zeigt das vereinfachte Verkehrsnetz einer Kleinstadt. Die Knoten entsprechen Straßenkreuzungen und die Pfeile den in Pfeilrichtung zu durchfahrenden Einbahnstraßen Die Pfeilbewertungen bedeuten die 5.1. BÄUME, ENTFERNUNGEN UND WEGE 41 5 2 V1 4 3 V2 V3 5 1 1 15 1 0 7 8 V4 6 3 Abbildung 5.5: Gerichteter Graph 10 2 2 5 12 9 3 4 Abbildung 5.6: Gerichteter Graph Länge der betreffenden Straßenverbindungen. Die Abbildung stellt einen (bewerteten) gemischten Graphen dar, der sowohl Kanten als auch Pfeile enthält. Eine Getränkefirma möchte nun an derjenigen Straßenkreuzung ein Auslieferungslager errichten, von der aus die Summe der Entfernungen zu allen übrigen Kreuzungen minimal ist. (a) Bestimmen Sie den optimalen Standort des Auslieferungslagers und geben Sie die optimalen Auslieferungsrouten an. (b) Sind die optimalen Auslieferungsrouten eindeutig festgelegt? 9. Bestimmen Sie einen minimal spannenden Baum für den durch die untenstehende Kostenmatrix gegebenen ungerichteten Graphen. Startknoten ist Knoten 4. 1 2 3 4 5 6 1 0 3 ∞ ∞ 8 5 2 3 0 4 0 2 4 3 ∞ 4 0 4 6 ∞ 4 ∞ 0 4 0 2 1 5 8 2 6 2 0 1 6 5 4 ∞ 1 1 0 10. Ermitteln Sie durch Rechnung einen negativen Zyklus des folgenden Graphen. Die Kostenmatrix lautet 1 2 3 4 5 1 2 3 4 5 0 2 1 1 ∞ −1 0 7 5 −2 ∞ 0 0 ∞ ∞ ∞ 3 −1 0 ∞ ∞ ∞ 2 4 0 42 KAPITEL 5. BEISPIELE 11. Gegeben ist die Kostenmatrix C(G) = (cij ) des bewerteten Digraphens G 1 2 3 4 5 6 2 0 ∞ ∞ 4 1 4 3 2 0 3 ∞ ∞ 3 4 3 ∞ 0 2 5 2 5 ∞ −2 3 0 6 5 6 ∞ 3 ∞ −1 0 3 7 ∞ 1 ∞ ∞ 2 0 Bestimmen Sie mit dem Fifo-Algorithmus die kürzesten Wege vom Startknoten 1 zu allen anderen Knoten. Wie lauten diese Wege und wie hoch sind die anfallenden Kosten? 12. Karli P. ist Nachtwächter von Beruf. Als anerkanntes und bewährtes Mitglied des hiesigen Wachdienstes sieht er sich dem folgenden Problem gegenübergestellt: Gemäß seiner Berufung hat er auf einem Fabriksgelände 5 Kontrollpunkte besonders im Auge zu behalten. Als profunder Kenner der nächtlichen Umgebung schätzt Karli den Zeitbedarf für seine Streifzüge zwischen den einzelnen Kontrollpunkten so ein (in Minuten bzw. ∞ dort, wo keine direkte Verbindung besteht) 1 2 3 4 5 1 2 3 4 5 0 9 4 ∞ 7 ∞ 0 3 ∞ 3 12 ∞ 0 8 ∞ 2 ∞ 9 0 ∞ 8 8 ∞ 9 0 (a) Jeder dieser 5 Kontrollpunkte muß pro Nacht einmal inspiziert werden. Karli ist sehr gewissenhaft und überprüft pro Inspektionsgang genau einen Kontrollpunkt. Gleichsam als Belohnung ist es ihm dabei zur lieben Gewohnheit geworden, nach jeder Inspektion erstmal wieder zum Ausgangsort zurückzukehren, um sich dort mit einem kleinen Schluck zu stärken. Bestimmen Sie für Karli einen optimalen Standort (jeder der 5 Kontrollpunkte kommt in Frage, tatsächlich ergeben sich also nur 4 Kontrollrouten), der ihm als Ausgangsort für seine nächtlichen Wanderungen dient, wenn die gesamte Gehzeit minimiert werden soll! Wie lange ist er insgesamt unterwegs? (b) Welche Empfehlung geben Sie Karli, was die einzelnen Routen für seine Kontrollgänge betrifft und wie lauten diese? (c) In besonders kalten Winternächten kann es sich ergeben, daß Karli länger unterwegs ist. Von vornherein rechnet er dann in etwa mit dem doppeltem Zeitbedarf auf allen Verbindungen. Was ändert sich am optimalen Standort, den Routen und der gesamten Gehzeit? 5.1. BÄUME, ENTFERNUNGEN UND WEGE 43 13. Ein gerichteter Graph ist durch die folgende Kostenmatrix gegebenen cij 1 2 3 4 1 2 3 4 0 8 4 2 3 0 6 2 4 1 0 ∞ 6 ∞ ∞ 0 Bestimmen Sie mit dem Fifo-Algorithmus die kürzesten Wege von Startknoten 4 yu allen anderen. 14. Eine Bäckerein benötigt in den nächsten 4 Planperioden durchgehend genau eine Knetmaschine. Zum Zeitpunkt t = 1 (Planungsbeginn) befindet sich noch keine solche Maschine im Besitz der Bäckerei. Zu den Zeitpunkten t = 2, 3, 4 kann eine alte Maschine verkauft werden und durch eine neue des gleichen Typs ersetzt werden. Zu t = 5 (Planungsende) ist lediglich der Verkauf der vorhandenen Maschine vorgesehen. Der Unternehmung sind die nachfolgenden Daten bekannt Ai Bi Vi Anschaffungskosten am Beginn von Periode i Betriebskosten der Maschine in ihrer i-ten Betriebsperiode Verkaufswert nach i Jahren Betriebsdauer 3 4 i 1 2 Ai 75 85 100 95 Bi 5 10 15 25 Ci 60 50 35 10 Steigende Betriebskosten stehen somit fallenden Verkaufswerten gegenüber und es gilt, die optimale Nutzungsdauer bzw. den optimalen Erneuerungszeitpunkt der einzelnen Knetmaschine(n) festzulegen. Lösen Sie dieses Problem mit einem Verfahren der dynamischen Programmierung und interpretieren Sie die Lösung! 15. Im Zuge der Freigabe und der damit einhergehenden Umstrukturierung des Milchmarktes machen sich auch 5 obersteirische Bergbauern Gedanken, wie sich im Rahmen ihrer Milchproduktion Kosteneinsparnisse erzielen lassen könnten. Konkret geht es um eine Anfrage des örtlichen Milchhofes, der eine für alle Bauern gemeinsame Milchsammelstelle einrichten möchte. Die Milchproduzenten hätten ihre Zulieferkosten zur Sammelstelle zur Gänze selbst zu tragen, dürfen sich aber im Gegenzug dafür den Standort derselben aussuchen. Im Laufe einer langen und heißen Debatte einigen sich die 5 Beteiligten darauf, dass wohl nur einer ihrer Bauernhöfe als Abgabeort in Frage käme. Um die anderen 4 nicht zu benachteiligen sollten die Gesamtzustellkosten letztlich von allen getragen werden. Da jeder einen Traktor besitzt, dessen Ladefläche mühelos die Milchkanister aller anderen aufnehmen kann, sind keinerlei Kapazitätsbeschränkungen zu berücksichtigen. Das Straßennetz, das die 5 Gehöfte miteinander verbindet, kann durch die fol- 44 KAPITEL 5. BEISPIELE gende Tabelle beschrieben werden (die Entfernungen sind in km angegeben) km 1 2 3 4 5 1 0 ∞ 6 9 7 2 ∞ 0 5 ∞ 5 6 5 0 6 4 3 4 9 ∞ 6 0 3 5 7 5 4 3 0 Im nächsten Jahr sind 48 Arbeitswochen zu verplanen, an denen 5 mal in der Woche der Sammelplatz anzufahren ist. Man rechnet generell mit Kosten von e 0,5 pro gefahrenem Kilometer. Im Laufe der Diskussion kristallisieren sich 2 Parteien heraus, die die folgenden Varianten favorisieren. Die Vertreter der Variante 1 schlagen das folgende Verkehrskonzept vor: alle, bis auf jenen Bauern, bei dem die Sammelstelle eingerichtet werden soll, fahren täglich auf der billigsten Zustellroute zur Sammelstelle. Die Vertreter der Variante zwei sind hingegen der Meinung, dass man auf dem Weg dahin auch die Milchkanister eines oder mehrerer Nachbarn mitnehmen könnte. Sie schlagen ein Vertriebsnetz vor, das in Summe am kürzesten ist. Das Argument der Gegenpartei, dass dabei manch einer vielleicht - um die Kanister eines anderen nicht Zustellenden Nachbarn aufzunehmen - einen Umweg fahren müßte, lassen sie nicht gelten, da die Gesamtkosten am Ende der Saison sowieso gleichmäßig auf alle aufgeteilt werden würden. Die Sperrstunde naht, der Wirt mahnt zum Aufbruch und noch ist keine Entscheidung gefallen. Helfen Sie als Logistikfachmann unseren Bauern, indem Sie für beide Varianten den optimalen Standort für die Sammelstelle, die dazugehörigen Zustellrouten und schließlich die pro Kopf und Jahr anfallenden Kosten bestimmen! Falls Sie der Meinung sind, dass von vornherein eine Variante überlegen ist, begründen Sie Ihre Wahl und bestimmen Sie die Lösung nur für diese! 16. Die 5 Computerterminals der Visionsoft-AG sollen auf möglichst kostengünstige Art und Weise vernetzt werden. Die dafür verwendeten Kabel ermöglichen einen Datenaustausch in jede beliebige Richtung zwischen zwei beliebigen sie verbindenen Terminals. Aus technischen Gründen können nicht alle Terminals direkt miteinander verbunden werden, es ist jedoch möglich, dass ein Terminal i mit einem Terminal j über beliebig viele Zwischenterminals kommuniziert. Die möglichen direkten Verbindungen und die entsprechenden Kabelkosten cij sind der folgenden Matrix zu entnehmen cij 1 2 3 4 5 1 0 3 4 ∞ 6 2 3 0 ∞ 5 4 3 4 ∞ 0 5 1 4 ∞ 5 5 0 2 5 6 4 1 2 0 Berechnen Sie mit einem Verfahren Ihrer Wahl die Minimalkosten für das oben dargestellte Problem. Wie werden die einzelnen Terminals untereinander verbunden, sodass ein uneingeschränkter Datenaustausch zwischen allen möglich ist? 5.1. BÄUME, ENTFERNUNGEN UND WEGE 45 17. Gegeben sei die folgende Kostenmatrix C = cij eines ungerichteten Graphen cij 1 2 3 4 5 1 0 2 5 2 1 2 2 0 1 1 1 3 5 1 0 4 3 4 2 1 4 0 2 5 1 1 3 2 0 Bestimmen Sie ohne Rechnung einen minimal spannenden Baum und erkären Sie, warum Ihre Vorgangsweise zu einer Optimallösung führt! 18. Gegeben sei der gerichtete, mit cij (für alle i, j ∈ V ) kostenbewertete Graph in Abbildung 5.8 auf Seite 45. Ermitteln Sie mit einem Verfahren ihrer Wahl die kürzesten, beim Startknoten a=1 beginnenden Wege zu allen anderen Knoten. Wie lauten diese Wege und wie hoch sind ihre Kosten? 4 5 2 3 2 2 1 2 5 3 3 1 1 4 3 1 1 3 1 10 4 a=1 2 20 4 20 2 2 Abbildung 5.7: Verkehrsnetz 50 50 20 5 20 10 3 Abbildung 5.8: Bewerteter, gerichteter Graph 19. Der in Abbildung 5.9 auf Seite 46 gegebene Graph stelle folgendes Planungsproblem dar: eine Telefongesellschaft verfügt über das durch die Struktur des Graphen gegebene Verbindungsnetz zwischen den Orten 1 bis 7. Die Zahlen an den Kanten sind die Betriebskosten pro Betrachtungszeitraum, wenn die entsprechende Verbindung aktiviert werden soll. Dabei wird vorausgesetzt, dass eine aktivierte Verbindung Gespräche in beiden Richtungen ermöglicht. Ziel ist es einen Plan zu finden, der angibt, welche Verbindungen aktiviert werden müssen, sodass zwischen allen Orten - gegebenenfalls über Zwischenorte - eine Telefonverbindung möglich ist, wobei die Summe der insgesammt anfallenden Kosten minimiert wird. Bestimmen Sie eine Optimallösung des Problems durch “Hinsehen”, erkären Sie Ihre Vorgangsweise in kurzen Worten und nennen Sie die Gesamtkosten. 46 KAPITEL 5. BEISPIELE 20. Bestimmen Sie für den zyklenfreien Graphen in Abbildung 5.10, dessen Pfeile mit Kosten bewertet sind, mittels dynamischer Optimierung einen kürzesten Weg vom Knoten a zum Knoten h. 3 6 8 3 1 7 5 6 4 0 7 7 -3 a 5 10 8 0 1 6 2 2 5 c 3 b Abbildung 5.9: Verbindungsnetz 4 2 d 5 e -1 7 -2 g 5 3 4 h f Abbildung 5.10: Zyklenfreier Graph 21. Tramper Theodor bewohnt zur Zeit eine Waldhütte, die in Abbildung 5.11 durch den Knoten 1 dargestellt wird. Der erholsamen Einsamkeit überdrüssig will er sich nun durch die verschlungenen Wege abwärts zu einem der bekannten Küstenerholungsorte 8, 9 oder 10 begeben. Da Theodor sein Feriengebiet schon in- und auswendig kennt, weiß er die einzelnen Pfade runter zum Meer auch gut zu bewerten. Je nach Erholungswert (Umgebung, Anzahl der Wanderer, Gehzeit etc.) bewertet er eine Verbindung umso höher, je größer jener Erholungswert ist. Bestimmen Sie nun für Tramper Theodor jenen Pfad, der ihn aus seiner Einsamkeit an die belebte Küste bringt, sodass der bei der Beschreitung der einzelnen Abschnitte erzielte Erholungswert in Summe maximiert wird. 1 0.6 0.9 4 0.9 0.3 3 1.0 0.7 7 0.5 2 0.4 0.2 0.8 6 0.6 0.1 10 0.1 0.2 9 5 0.4 0.8 0.8 8 Abbildung 5.11: Feriengebiet 5.2 Das Transportproblem 1. Erfinden Sie für ein Transportproblem (TPP) mit drei Anbietern und drei Nachfragern die Angebots- und Nachfragemengen, sowie eine dazugehörige Transportkostenmatrix. Schreiben Sie alle Gleichungen, die zur Darstellung Ihres TTPs als 5.2. DAS TRANSPORTPROBLEM 47 primales Lineares Programm notwendig sind, auf. Bestimmen Sie anschließend die entsprechende duale Formulierung. 2. In der folgenden Tabelle sind die Transportkosten zwischen drei Fertigungsstätten (F1 , F2 und F3 ) und vier Lagerhäusern (Lj ) gegebenen F1 F2 F3 L1 17 18 13 L2 11 20 25 L3 10 19 15 L4 12 30 27 Die Produktion A = ai = (38, 52, 30) Tonnen soll zu den Lagerhäusern transportiert werden. Ihre Kapazitäten sind B = bj = (17, 50, 10, 43) Tonnen. (a) Bestimmen Sie mit der Nordwesteckenregel eine zulässige Ausgangslösung und stellen Sie diese jener der Spaltenminimummethode gegenüber. (b) Errechnen Sie für die Daten von Aufgabe 3 mit Hilfe des Stepping-StoneAlgorithmus die Optimallösung. Grundlage dafür ist die Ausgangslösung x12 = 28, x13 = 10, x22 = 2, x24 = 30, x31 = 17 und x34 = 13. 3. Schreiben Sie in Python oder einer anderen Programmiersprache Ihrer Wahl ein Programm mit dem Sie für größere TPPe eine zulässige Ausgangslösung bestimmen können. Dies sollte je nach Wunsch des Anwenders entweder mit der Nordwesteckenregel oder dem Spaltenminimumverfahren möglich sein. 4. Gesucht ist der optimale Transportplan für das folgende TPP: an den drei Ausgangsorten lagern die Mengen a1 = 20, a2 = 25, a3 = 40 und an den vier Bestimmungsorten existieren Nachfragen von b1 = 10, b2 = 25, b3 = 15, b4 = 35. Die Einheitstransportkostenmatrix ist gegeben mit A1 A2 A3 B1 B2 B3 B4 1 8 4 7 9 0 5 7 3 6 8 1 Wie lautet die mit Hilfe der Nordwesteckenregel und der MODI-Methode errechnete Optimallösung? 5. Lösen Sie das klassische Transportproblem: die angebotenen Mengen betragen ai = {5, 8, 7} und jene der Nachfrager sind ni = {3, 6, 6, 5}. Verwenden Sie dafür die Nordwesteckenregel als Eröffnungsverfahren und wenden Sie danach die MODI-Methode an. 6. Ein österreichischer Konzern, der 4 Raffinerien besitzt, wird beauftragt, 5 inländische Märkte mit Öl zu versorgen. Die Problemdaten sind im folgenden Transportta- 48 KAPITEL 5. BEISPIELE A1 4 5 N1 A2 5 A3 28 N2 2 4 N3 3 N4 Abbildung 5.12: Klassisches Transportproblem bleau dargestellt (Ri = Raffinerie i, Mj = Markt j) R1 R2 R3 R4 bj M1 M2 M3 M4 M5 3 9 5 6 7 2 1 8 10 13 3 12 6 5 2 1 9 14 3 2 30 22 17 19 12 ai 10 25 13 33 Da das Ölangebot der inländischen Raffinerien zur Marktsättigung jedoch nicht ausreicht, müssen die fehlenden Mengen Öl importiert werden. Die Transportkosten zu den Märkten betragen cj = {1, 10, 7, 8, 13} GE je Tonne importierten Öls. (a) Bestimmen Sie mittels Nordwesteckenregel und MODI-Methode den optimalen Verteilungsplan für den Konzern, falls dieser keine Importkosten zu tragen hat. Was sagt die Optimallösung genau aus? (b) Lösen die Aufgabe unter der Annahme, daß der Konzern für die Importkosten aufzukommen hat, mit der Spaltenminimummethode und dem MODIAlgorithmus. Interpretieren Sie die Lösung! 7. Eine Unternehmung mit der Gesamtkapazität von 170 ME fertigt ein Produkt an den drei Fertigungsstellen F1 , F2 und F3 mit den Teilkapazitäten a1 = 60, a2 = 80, a3 = 30 ME. Das von den Fertigungsstellen angebotene Produkt wird von den drei Lagerhäusern L1 , L2 und L3 insgesamt in 130 ME nachgefragt. Die Gesamtnachfrage teilt sich wie folgt auf: b1 = 30, b2 = 35 und b3 = 65 ME. Die variablen Produktionskosten pro ME sind an den einzelnen Fertigungsstätten unterschiedlich hoch und betragen 22 GE/ME in F1 , 20 GE/ME in F2 und 25 GE/ME in F3 . Die Transportkosten gehen aus der folgendenKostenmatrix hervor F1 F2 F3 L1 L2 12 20 20 15 20 7 L3 15 23 10 5.2. DAS TRANSPORTPROBLEM 49 Gesucht ist der kostenminimale Produktions- und Transportplan. Bestimmen Sie ihn unter der Annahme, dass der Überschuß keine zusätzlichen Kosten verursacht, mit Hilfe der Spaltenminimum- und der Stepping-Stone-Methode! 8. Lösen Sie das vorherige Beispiel mit dem gleichen Rechenverfahren unter der veränderten Bedingung, dass das Überschußangebot in einem Zwischenlager Z gelagert werden muß. Dabei entstehen Lagerkosten in der Höhe von 6 GE/ME. Die Transportkosten von den Fertigungsstellen 1, 2 und 3 betragen 10, 17 und 12 GE/ME. 9. Drei Anbieter stehen vier nachfragenden Produktionsstellen eines Betriebes gegenüber. Die Kapazität der Anbieter A, B und C beträgt 300, 200 und 800 ME; die nachfragenden Stellen W, X, Y und Z benötigen 300, 350, 400 und 250 ME. Die Transportkosten betragen W X Y Z 2 1 4 3 3 2 5 2 1 1 3 4 A B C A verkauft zu 30, B zu 25 und C zu 40 GE je Stück. Stellen Sie ein Modell zur Ermittlung des kostenminimalen Bezuges der nachgefragten Stückzahlen auf und berechnen Sie die Optimallösung mit der Spaltenminimum- und der MODIMethode. 10. Wie lautet die Optimallösung des folgenden Transportproblems? Gehen Sie von der Eröffnungslösung x32 = x51 = x52 = 5; x12 = x22 = x44 = 10; x33 = 15 und x24 = 30 aus. Verwenden Sie den MODI-Algorithmus, wobei Sie zur Bestimmung der Dualvariablenwerte immer mit u1 beginnen. Die Einheitstransportkosten von Anbieter Ai zu Nachfrager Bj sind A1 A2 A3 A4 A5 B1 B2 B3 B4 3 2 2 5 1 6 9 3 8 4 3 7 2 3 5 1 1 4 8 7 11. Bestimmen Sie mit einem Verfahren Ihrer Wahl die Optimallösung des durch die folgende Kostenmatrix gegebenen Zuordnungsproblems cij 1 2 3 4 1 6 4 3 6 2 4 3 1 5 3 5 7 4 1 4 4 8 3 6 50 KAPITEL 5. BEISPIELE 12. Gegeben sind die Einheitstransportkosten von Produktionsstelle Pi zu Nachfrager Nj N1 N2 N3 N4 N5 P1 4 7 2 7 3 2 1 6 5 P2 9 P3 6 4 3 2 2 3 4 1 4 P4 3 An variablen Zustellkosten von allen Produktionsstätten zu den Nachfragern 1 bis 3 sind jeweils 3 GE zu berücksichtigen (N4 und N5 haben auf Grund der Liefervereinbarungen die Kosten der Zustellung selbst zu tragen). Die Produktionskosten betragen allgemein 10 GE pro Stück. Die Angebotsmengen sind durch den Vektor (30, 20, 10, 40) gegeben und die Nachfragemengen sind durch (10, 30, 30, 20, 10) gegeben. (a) Wie lautet die durch die Spaltenminimummethode errechnete Ausgangslösung für dieses Transportproblem? Welche Besonderheit läßt sich aus ihr erkennen? (b) Rechnen Sie eine Iteration des MODI-Algorithmus! Haben Sie die Optimallösung erreicht? Wenn ja, wie lautet diese und wie hoch sind die Gesamtkosten des Transportplans? (c) Geben Sie eine andere zulässige Basislösung - falls möglich eine optimale an! Was ändert sich an der Versorgungsstruktur und den Gesamtkosten? 13. Als Abteilungsleiter der Produktionsmaschinen GmbH & Co KG sehen Sie sich dem folgenden Problem gegenübergestellt: in der Werkzeughalle befinden sich 4 vom Typ her identische Maschinen M1 , M2 , M3 und M4 . Es kann jeder der einlangenden Aufträge auch auf jeder dieser Maschinen zur Gänze erledigt werden, jedoch unterscheiden sich die Bearbeitungszeiten in Abhängigkeit vom Nutzungsalter der verwendeten Maschine. Die Bearbeitungszeiten (in h) der momentan abzuarbeitenden Aufträge A1 , A2 , A3 und A4 auf den einzelnen Maschinen sind der folgenden Matrix zu entnehmen M1 M2 M3 M4 A1 A2 A3 A4 4 6 3 8 9 4 2 7 2 5 7 5 3 5 9 1 Um eine gleichmäßige Auslastung der Produktionsmaschinen zu gewährleisten, soll jede Maschine in Betrieb genommen werden. Die Teilung eines Auftrages auf mehrere Maschinen ist aus technischen Gründen nicht möglich. Nach wie vielen Stunden sind alle 4 Aufträge gefertigt? Bestimmen Sie eine Optimallösung! 14. Die Produktionsfirma Huber verfügt über die Standorte S1 , S2 und S3 , die derzeit mit den Kapazitäten 1500, 1200 und 1900 betrieben werden. Diese Standorte versorgen die Nachfrager N1 , N2 und N3 , welche in der nächsten zu betrachtenden Periode das einzige von Huber erzeugte Produkt H in den Mengen 1000, 13000 5.2. DAS TRANSPORTPROBLEM 51 und 1100 nachfragen werden. Die von Huber zu tragenden Zustellkosten pro Stück H sind der folgenden Tabelle zu entnehmen S1 S2 S3 N1 N2 N3 3 7 4 5 4 6 7 5 4 Gemäß dem Plan der Logistikabteilung von Huber soll das Überschußangebot, da kein Standort unter seiner gegenwärtigen Kapazität betrieben werden soll, für spätere Perioden zwischengelagert werden. Die entsprechenden Lagerkosten ci , für die in Si (i ∈ {1, 2, 3}) erzeugten Einheiten H betragen 5, 8 bzw. 6 GE pro Stück H. Allerdings besteht die Möglichkeit einer vollkommenen Betriebsniederlegung an einem der Standorte, jedoch nur unter der Voraussetzung, und dies ist ein Zugeständnis Hubers an seine Kundschaft, dass die Gesamtnachfrage weiterhin gedeckt werden kann. In diesem Fall soll nichts zwischengelagert werden, jedoch wären von Huber die Kosten der Betriebsniederlegung zu tragen. Wie hoch dürften diese Kosten bei optimalem Zustellplan maximal sein, sodass die Lagerfariante auszuschließen ist? 15. Der für den heutigen Tag aktuelle Zustellplan der Verteilungs-AG ist der folgenden Liste zu entnehmen. Insgesamt sind 6 Fahrten zu erledigen, die dabei zu befördernden Mengen sind 1. von Produktionsort A zu Nachfrager N1 2. von Produktionsort B zu Nachfrager N2 3. von Produktionsort B zu Nachfrager N3 4. von Produktionsort C zu Nachfrager N3 5. von Produktionsort D zu Nachfrager N3 6. von Produktionsort D zu Nachfrager N4 10 10 10 10 10 10 Stück Stück Stück Stück Stück Stück Die Logistikabteilung der Verteilungs-AG bittet Sie nun diesen Zustellplan zu überprüfen. Er wird als zulässig in dem Sinne bezeichnet, dass die Lager aller Produktionsorte geleert werden und der Bedarf eines jeden Nachfragers gedeckt ist. Die zu berücksichtigenden Einheitstransportkosten cij sind der folgenden Matrix zu entnehmen cij N1 N2 N3 N4 A 2 6 4 5 B 9 4 5 6 C 7 7 3 4 D 1 5 6 2 Da sämtliche Zustellkosten (Fixkosten sind keine zu berücksichtigen) von der Firma zu tragen sind, werden Sie nun damit beauftragt gegebenenfalls einen besseren Zustellplan zu bestimmen. Ist der vorliegende Zustellplan ein kostenminimaler oder nicht? Wenn ja, erklären Sie warum; wenn nein, bestimmen Sie einen besseren. 52 KAPITEL 5. BEISPIELE 16. Die Alpha-Produktions-AG fertigt in drei Produktionsbereichen B1 , B2 und B3 das Produkt Alpha. Die Kapazitäten der Fertigungsanlagen betragen in der Betrachtungsperiode 20, 10 bzw. 30 Einheiten. Die Gesamtproduktion, die derzeit aus technischen Gründen nicht verringert werden kann, wird den drei Nachfragern N1 , N2 und N3 mit den Nachfragemengen 15, 35 und 5 auf Kosten der AlphaProduktions-AG zugestellt. Die Einheitstransportkosten ci j sind der folgenden Matrix zu entnehmen cij N1 N2 N3 B1 3 4 4 3 4 B2 5 B3 4 5 5 Darüberhinaus sind für dieses Transportproblem in B1 , B2 und B3 variable Produktionskosten von 5, 4 bzw. 3 GE zu berücksichtigen. Das Überschußangebot kann in einer fabrikseigenen Lagerhalle H zu einheitlichen Lagerkosten von 1 GE pro Stück Alpha gelagert werden. Die Überfühung des Überschusses von B1 , B2 und B3 nach H kostet pro Stück 3, 4 bzw. 2 GE. Bestimmen Sie mit der Spaltenminimummethode und dem MODI-Verfahren eine Optimallösung dieses Transportproblems. 17. Die Feinbein-Konstruktions GmbH & Co KG erzeugt das Produkt F. In der vergangenen Planungsperiode wurden auf den 3 Märkten insgesamt 58k Stück F abgesetzt (k steht für 1000). Das entsprach genau der Gesamtkapazität der Unternehmung. Aufgrund der außerordentlichen Beliebtheit erwartet man sich für die nächste Planperiode jedoch eine deutlich steigenden Nachfrage. Man rechnet nunmehr auf den Märkten M1 , M2 und M3 mit 30k, 19k und 29k Stück Nachfrage. Die Feinbein-Konstruktions GmbH & Co KG möchte nun alle Anstrengungen unternehmen, auch diesen neuen Anforderungen gerecht zu werden und erwägt für die Kapazitätsaufstockung die unten beschriebenen Varianten. Beiden Varianten gemeinsam ist die folgende Ausgangssituation: die Produktionsanlagen befinden sich bereits im Besitz der Gesellschaft und müssen nur mehr aufgestellt werden - die Kosten dafür können vernachlässigt werden. Allerdings müssen neue Maschinenhallen angemietet werden. Bisher wurden an den 3 Fertigungsstellen F1 , F2 und F3 mit variablen Stückkosten von 10, 10 und 8 e pro Stück insgesamt 22k, 16k und 20k Stück F produziert und zu den Märkten mit den folgenden Transportkosten pro Stück transportiert cij M1 M2 M3 F1 7 6 3 F2 2 5 7 F3 2 8 6 An der kosten- und mengenmäßigen Vertriebsstruktur der alten Fertigungsstellen wird sich auch für die veränderte Nachfrage nichts ändern. Variante 1 sieht eine neue Produktionsstätte P in einer größeren, bereits in Betracht gezogenen, Maschinenhalle vor. Durch die größere Anlage könnten hier die variablen Stückkosten auf 6 e gesenkt werden. Die Transportkosten zu M1 , M2 und M3 würden 10, 6 und 6 e betragen. An Miete wären dafür in der nächsten Planperiode 17.000 e 5.2. DAS TRANSPORTPROBLEM 53 anzusetzen. In Variante 2 steht die Anmietung von zwei kleineren Maschinenhallen für die neuen Produktionsstätten P1 und P2 zur Diskussion. Die kleineren Anlagen würden jedoch nur zu 8 e pro Stück F produzieren können. Dies gilt für P1 und P2 . Allerdings würden sich im Vergleich zu Variante 1 die für P1 und P2 wiederum identischen Transportkosten um die Hälfte zu M1 und M3 , sowie um zwei Drittel zu M2 verringern lassen. In diesem Fall würden die beiden Anlagen den zusätzlichen, neuen Bedarf jeweils zur Hälfte decken. Die Mietverhandlungen für diese beiden Objekte stehen jedoch noch aus. Die Logistikabteilung der Feinbein GmbH & Co KG betraut Sie mit der Aufgabe, zu bestimmen, wieviel in der nächsten Planperiode insgesamt für die beiden kleineren Maschinenhallen an Miete bezahlt werden kann, wenn der Variante 2 der Vorzug gegeben werden soll. Wie lautet der für diesen Fall optimale Transportplan, wenn die insgesamt anfallenden Produktions- und Transportkosten minimiert werden sollen? 18. Ein Produzent verfügt über die 3 Fertigungsanlagen A1 , A2 und A3 . Auf diesen Anlagen können in dem zu betrachtenden Zeitraum 30, 80 bzw. 40 Stück des Produktes X erzeugt werden. Die Nachfrage N1 , N2 und N3 beträgt 40, 30 und 20 Stück. Neben den variablen Produktionskosten von 6, 8 und 5 GE bei den Anlagen A1 , A2 und A3 fallen für den Produzenten auf Grund vertraglicher Verpflichtungen mit den drei Nachfragern die folgenden Einheitstransportkosten an cij N1 N2 N3 A1 3 7 4 A2 4 5 2 7 6 A3 5 Um die von der Gewerkschaft geforderte Vollbeschäftigung zu gewährleisten werden alle Produktionsanlagen mit Maximalkapazität betrieben. Zur Aufnahme des Überschußangebotes werden in der Firmenleitung zwei Varianten diskutiert. Die erste Variante wäre die Lagerung der Überproduktion am fabrikseigenen Gelände in einer Lagerhalle L1 . Dabei würden variable Lagerkosten von 3, 2 bzw. 6 für ein Stück X von Anlage A1 , A2 bzw. A3 anfallen. Die zweite Variante wäre, eine für diesen Zweck geeignete Lagerhalle L2 außerhalb des Geländes zu mieten. In diesem Fall wären an Lagerkosten nur fixe Mietkosten anzusetzen. Die reinen Transportkosten für die Überproduktion können in beiden Varianten wegen der räumlichen Nähe aller Gebäude vernachlässigt werden. Beide Lagerhallen bieten ausreichend Platz. Wie hoch darf die Miete für Lagerhalle L2 maximal sein, damit die zweite Variante von Vorteil ist? Zur Beantwortung dieser Frage sind zwei Transportprobleme zu lösen. Verwenden Sie dazu die Spaltenminimummethode und das MODI-Verfahren! 19. Die Anlagenbau-AG (ABAG) fertigt an den 3 Produktionsstätten A1 , A2 und A3 . Im Betrachtungszeitraum werden hier 20, 35 und 25 Stück einer Papierpresse PP erzeugt. Die variablen Produktionskosten belaufen sich dabei auf 13, 8 und 10 GE. Di momentag in der Branche gegebene nachfrage bei den Kunden N1 , N2 und N3 beträgt 23, 24 und 18 Einheiten PP. Aufgrund gewerkschaftlicher Verpflichtungen kann im Moment die Produktion nicht der Nachfrage angepaßt werden. Daher hat man sich entschlossen, das 54 KAPITEL 5. BEISPIELE Überschußangebot so wie es den Produktionsstätten verrechnet werden soll, nämlich zu 20% in A1 und jeweils 40% in A2 und A3 zu lagern. Die entsprechenden Lagerkosten bei A1 , A2 bzw. A3 belaufen sich auf 6, 4 und 7 GE. Weiters ist durch vertragliche Verpflichtungen vorgesehen, dass N2 minderstens die Hälfte seines Bedarfs durch A2 gedeckt bekommt und dass N3 mindestens ein Drittel seines Bedarfs von A3 bezieht. Die direkten - von ABAG zu tragenden - Transportkosten zwischen Anbieter und Nachfrager können der folgenden Tabelle entnommen werden cij N1 N2 N3 A1 4 7 6 A2 8 4 5 A3 5 9 8 Die ABAG ist nun daran interessiert, einen Transportplan zu bestimmen, der die Summe aller anfallenden Kosten, also Lager-, Produktions- und Zustellkosten minimiert. Bestimmen Sie eine nicht notwendigerweise optimale Lösung dieses Problems und interpretieren Sie die Lösung! 5.3 Standortprobleme 1. (a) Ermitteln Sie für das WLP in der untenstehenden Tabelle alle Gleichungen, die zur Darstellung des Problems in disaggregierter Form notwendig sind! (b) Lösen Sie das WLP mit dem Add-Algorithmus. (c) Bestimmen Sie die aggregierte Form des WLPs und durch Zuhilfenahme von GLPK die Optimallösung dieses WLPs. Gehen Sie dabei davon aus, dass jeder potentielle Standort höchstens zwei Kunden versorgen kann. A1 A2 A3 A4 A5 B1 B2 B3 B4 B5 fi 2 8 3 4 4 13 6 7 8 12 2 3 5 1 9 1 6 11 8 7 4 1 6 5 4 10 10 9 4 7 2. Berechnen Sie mit dem Add-Algorithmus eine Lösung für das folgende WLP A1 A2 A3 A4 A5 A6 A7 A8 B1 B2 B3 B4 fi 5 1 3 6 9 2 2 8 3 7 7 4 9 1 6 4 2 5 3 8 1 4 2 9 5 8 5 1 4 4 6 2 7 2 6 1 3 7 5 7 5.3. STANDORTPROBLEME 55 3. Lösen Sie das folgende WLP mit dem Add-Algorithmus. Welche Besonderheit besitzt die Lösung? A1 A2 A3 A4 A5 B1 B2 B3 B4 B5 B6 B7 fi 1 2 9 9 6 8 3 4 4 9 0 7 3 6 9 5 8 6 1 5 4 9 4 5 6 5 7 6 6 3 5 7 5 4 2 8 6 7 5 4 4. Gegeben sind die Koordinaten (uj , vj ), j ∈ {1, 2, 3, 4} von Kundenorten: (3,1), (8,3), (7,6) und (4,5). Der Bedarfsvektor B = bj , j ∈ {1, 2, 3, 4} lautet: (25, 15, 20, 10). Rechnen Sie, auf zwei Nachkommastellen genau, die erste Iteration des Standardverfahrens von Miehle ( = 0) und bestimmen Sie den Zielfunktionswert. 5. Eine Speditionsfirma lagert Mehlcontainer in einem Depot in der Nähe der Eisenbahnstation. Der Inhalt eines jeden Containers (10 Tonnen) wird von der Huber KG an die 4 Einzelkunden zugestellt. Um die Transportkosten zu senken plant die Unternehmung nun ein Lagerhaus zu erbauen. Die j ∈ {1, 2, 3, 4} Kundenorte sind durch die Koordinaten (1,9), (2,5), (6,5) und (7,10) gegeben, deren Bedarf 50,10, 30 und 20 Tonnen beträgt. Die Koordinaten des Depots sind (15,2). An Transportkosten vom Depot zum Lagerhaus fallen 20 GE pro LE und Container an. Der Transport einer Tonne Mehl vom Lagerhaus zu einem der Kunden kostet 8 GE pro LE. Finden sie mit dem Miehle-Standardverfahren, durch Rechnen der ersten Iteration, einen Standort für das neu zu erbauende Lagerhaus. Wie hoch sind die Gesamtkosten? 6. Programmieren Sie den (modifizierten) Miehle-Algorithmus zur Lösung stetiger Standortprobleme mit Python oder einer anderen Programmiersprache Ihrer Wahl. 7. Lösen Sie das folgende Warehouse-Location-Problem mit den Add-Algorithmus (S?i bzw. fj bezeichnen die potentialen Standorte bzw. deren Fixkosten und Bj die Nachfrager) B1 B2 B3 B4 B5 fi S1 3 5 1 5 9 6 S2 7 2 6 2 2 8 S3 1 4 8 2 5 5 S4 8 5 6 4 1 3 S5 3 3 4 6 9 4 8. Zwei Punkte sind genau einen Kilometer voneinander entfernt. Punkt 1 wird mit b1 = 2 und Punkt 2 mit b2 = 3 gewichtet. Wieviele Meter von Punkt 1 entfernt ist ein optimaler Standort S zu errichten? Beantworten Sie diese Frage indem Sie eine Iteration des Standort-Miehleverfahrens rechnen. Wie hoch ist der Zielwertfunktion dieses Problems? 56 KAPITEL 5. BEISPIELE 9. Der Herbst zieht ins Land, die Tage werden kürzer und die Nächte kühl und feucht. Hamster Heinrich plant den optimalen Standort für seinen unterirdischen Winterbau. Während des ganzen Sommers schon hat er Vorräte für diese harte Zeit gesammelt und an insgesamt drei Stellen vergraben. Diese Verstecke haben folgende Koordinaten (in Metern): das Getreide lagert bei der alten Eiche (8,4), ein Vorrat an Obst unter dem Holunderstrauch (1,3) und das Gemüse letztlich hat Heinrich neben dem Garteneingang (5,9) verscharrt. Von allem ist ausreichend vorhanden. Heinrich ist ernährungsbewusst und kombiniert sein tägliches Menü aus 8 HBT (Hamsterbackentaschen) Getreide, 4 HBT Obst und 3 HBT Gemüse. Wo nun soll er für seinen Winterbau zu graben beginnen, wenn er die tägliche Laufarbeit - pro “Beschaffungsausgang” kann er naturgemäß höchstens 2 HBT transportieren - minimieren will? Welche Strecke hat Heinrich insgesamt pro Tag zurückzulegen? Beantworten Sie diese Fragen durch Rechnen einer Iteration des Standard-Miehle-Verfahrens! 10. Die eben gegründete Zuckerbäcker-Productions-AG-Österreich erwägt den Bau von höchstens 3 inländischen Produktionsstätten. Geplant ist die Erzeugung von Schokoladespezialpralinen. Ein Marktforschungsinstitut hat für die 3 zu beliefernden Konsumzonen Kj , j ∈ {1, 2, 3} einen Bedarf an Schokoladespezialpralinen von 276.000, 132.000 und 192.000 Stk./Jahr erhoben. Die für den Betrachtungszeitraum von einem Monat anfallenden, anteiligen Errichtungskosten der Produktionsstätten Pi (i ∈ {1, 2, 3} betragen 80.000, 50.000 und 70.000 GE, während die variablen Stückkosten 3, 2 bzw. 4 GE betragen. Die Maximalkapazitäten sind 37.000, 28.000 und 25.000 Stk./Monat. Die Transportkosten (GE/Stk.) zwischen den Produktionsstätten Pi und den Konsumzonen Kj sind in der folgenden Matrix angeben cij K1 K2 K3 P1 4 8 3 P2 7 5 2 P3 1 9 6 Das Ziel der jungen Unternehmung ist es, die im Betrachtungszeitraum anfallenden Gesamtkosten zu minimieren und daher zu entscheiden, wie viele und welche Produktionsstätten erbaut werden. Darüberhinaus sollen die optimalen Lieferbeziehungen und Transportmengen festgelegt werden. Erstellen Sie zur Lösung des Problems ein Lineares Programm, erklären Sie die von Ihnen verwendete Problemformulierung bzw. deren Variabeln und Gleichungen und lösen Sie es mit GLPK. 5.3. STANDORTPROBLEME 57 11. Gegeben sei die folgende Matrix A = (aij ) i\j 1 2 3 4 5 6 7 1 0 0 1 0 1 1 1 2 1 0 0 0 1 0 1 3 1 0 0 0 1 0 1 4 1 1 1 0 0 0 1 5 0 0 0 1 0 0 1 6 0 0 1 0 1 0 0 7 1 1 1 0 0 1 0 8 1 1 0 0 1 1 0 9 1 0 1 0 1 0 1 Der Kostenvektor lautet c = (3, 8, 12, 3, 7, 10, 4, 9, 8, )T . Bestimmen Sie (falls möglich) mit Hilfe der Reduktionsregeln eine heuristische Lösung des entsprechenden Überdeckungs- und Partitionsproblems. 12. Der Brandschutzbeauftragte Florian F. wird mit der folgenden Aufgabe bedacht: Der ihm zur Überwachung zugeteilte Bürobereich umfasst die 10 Büroräume B1 , B2 , ..., B10 . Innerhalb des Bürobereichs sind insgesamt 6 mögliche Standorte für die Feuerlöschgeräte F1 , F2 , ..., F6 vorgesehen. Die folgende Matrix D = (dij ) gibt die Entfernungen (in Meter) der einzelnen Büroräume von diesen Standorten an: dij B1 B2 B3 B4 B5 B6 B7 B8 B9 B1 0 F1 30 25 5 10 10 10 5 5 40 10 F2 10 10 50 45 20 50 20 20 10 40 F3 60 55 25 35 35 40 10 45 50 45 F4 45 20 35 5 65 30 60 25 40 20 F5 20 40 30 55 15 35 25 35 30 5 F6 10 70 65 10 30 20 40 40 40 5 Die Kosten der Aufstellung eines Feuerlöschers betragen c = (15, 5, 10, 5, 20, 5)T . Bestimmen Sie für Florian die minimalen Gesamtkosten der Installation, wenn Sicherheitsvorgaben die Aufstellung eines Feuerlöschers innerhalb von 30 Metern eines jeden Büroraumes vorschreiben! Verwenden Sie dazu GLPK! Welche Feuerlöscher werden installiert? 13. Bestimmen Sie eine Lösung des durch die folgende Matrix A = (aij ) gegeben Überdeckungs- und Partitionsproblems, wenn alle Kosten cj = 10, j ∈ {1, 2, 3, 4, 5, 6} betragen. Interpretieren Sie die Lösung bzw. die Zielfunktion dieses Problems! i\j 1 2 3 4 5 6 1 1 0 1 0 0 1 2 0 1 0 1 0 0 3 1 0 1 1 1 1 4 0 1 0 0 0 0 5 1 0 0 0 1 1 58 KAPITEL 5. BEISPIELE 14. Bestimmen Sie mit der Umlaufmethode eine Lösung des folgenden QZOPs (die linke Tabelle gibt die Entfernungen djk , die rechte die Transportintensitäten thi an) von \ bis A B C D E A 0 130 70 60 160 140 0 80 150 80 B C 70 70 0 90 90 70 150 80 0 160 D E 150 70 90 170 0 von \ bis 1 2 3 4 5 1 0 4 1 2 2 2 3 0 6 8 2 3 4 5 5 0 4 2 10 3 0 5 10 4 0 3 7 5 1 15. (nach Domschke 1985, S.175) Hamster Heinrich hat ein Problem! Er möchte in Zukunft die Vorräte in seinem Vorratslager so anordnen, daß die Lauferei für die Zusammenstellung seines täglichen Menüs minimiert wird. Sie sollten ihm dabei behilflich sein. Dazu müssen Sie folgendes wissen: Heinrichs Lieblingsspeise sind Weizenkörner, aber auch Kukuruz und Haselnusskerne mag er gern. Er ergänzt sein Menü täglich mit etwas Frischem (Karotten, Salat oder Obst). Den Speiseplan einer Woche zeigt folgende Tabelle Montag Weizen, Salat Dienstag Kukuruz, Karotten Mittwoch Weizen, Obst Donnerstag Hasselnuß, Karotten Freitag Weizen, Salat Samstag Kukuruz, Obst Sonntag Weizen, Salat, Obst Heinrich holt die Speisen für sein Menü stets durch einmaliges Aufsuchen des Vorratsraumes, der aus den 6 Lagerplätzen A,B,C,D,E,F besteht. Am Sonntag pflegt er den Weizen zuerst, danach den Salat und zum Schluß das Obst in seinem Korb zu geben. Die symmetrischen Entfernungen der Plätze vom Eingang sowie voneinander zeigt die folgende Tabelle Ein A Ein − 5 A − B C D E B 3 2 − C D E 5 3 1 4 2 4 2 4 2 − 6 4 − 2 − F 3 6 4 2 4 2 Wie soll Heinrich die Plätze belegen, wenn er das obengenannte Ziel verfolgt und bei diesbezüglich gleichgünstigen Plätzen Karotten, Salat und Obst lieber auf den kühleren Plätzen B oder D lagert? 16. Der Bahnhof einer österreichischen Stadt besteht aus den 5 Bahnsteigen B1 , B2 , B3 , B4 , B5 . Zeitig in der Früh am Beginn eines jeden Tages muß auf jedem 5.3. STANDORTPROBLEME 59 Bahnsteig eine Lokomotive (Lok) bereitstehen. Über nacht sind alle Loks in den 5 Lokschuppen L1 , L2 , L3 , L4 , L5 unterzubringen. Jeder dieser Lokschuppen kann bis zu 5 Loks aufnehmen. Die Zeit (in Minuten), in der eine Lok vom Lokschuppen Li zum Bahnsteig Bj , i, j ∈ {1, 2, 3, 4, 5} rangiert werden kann, ist der folgenden Matrix T := (tij ) zu entnehmen tij B1 B2 B3 B4 B5 L1 5 7 2 8 2 L2 2 2 6 7 4 L3 2 5 2 6 6 L4 4 8 1 3 4 L5 1 3 5 5 6 Die Bahnhofsleitung steht nun vor dem Problem, die täglich in der Früh anfallende Gesamtbereitstellungszeit möglichst kurz zu halten. Diese setzt sich zusammen aus den Rangierzeiten und den Servicezeiten: wegen unterschiedlicher örtlicher Gegebenheiten sind bei den Lokschuppen L2 und L4 jeweils 5 Minuten und bei den restlichen jeweils 3 Minuten an Servicezeit für das Aufsperren und Öffnen der Tore und einige sonstige Servicearbeiten des Bedienungspersonals einzuberechnen, bis die erste - und jede weitere - Lok den Lokschuppen in Richtung Bahnsteige verlassen kann. Um die Annahmen zu vereinfachen, kann davon ausgegangen werden, dass sich mehrere Loks in einem Lokschuppen gegenseitig nicht behindern, d.h. sie können ihn gegebenenfalls gleichzeitig verlassen. (a) Welche Empfehlungen geben Sie - auf Grund einer Berechnung - für die nächtliche Unterbringung der insgesamt 5 vorhandenen Loks; wie hoch ist die Gesamtbereitstellungszeit? Interpretieren Sie Ihre Lösung! (b) Bestimmen Sie mit Hilfe von GLPK eine Optimallösung für das Problem! 17. Gegeben sie das folgende unkapazitierte Warehouse-Location-Problem: cij seien die Kosten der Bedienung von Nachfrager Bj durch Anbieter Aj , die Fixkosten des potentiellen Standortes i seien durch Fi beschrieben cij B1 B2 B3 B4 B5 Fi A1 8 3 2 8 2 7 A2 7 2 6 6 7 7 A3 2 2 6 3 6 6 A4 3 8 7 3 5 5 A5 4 6 2 7 4 8 A6 6 8 1 4 8 6 A7 9 3 3 5 5 3 (a) Die Standorte 3, 6 und 7 werden nun eröffnet. Versuchen Sei diese Lösung mit dem Node-Partitionierung-Verfahren zu verbessern! (b) Bestimmen Sie mit Hilfe von GLPK eine Optimallösung für das Problem und analysieren Sie das Ergebnis im Vergleich zur vorgeschlagenen Lösung! 60 KAPITEL 5. BEISPIELE 18. Gegeben sei die Matrix U := (uij ), die den Nutzen einer benachbarten Anordnung zwischen den Organisationseinheiten i und j beschreibt uij 1 2 3 4 5 6 1 − 3 2 7 1 6 2 3 − 8 4 2 5 3 2 8 − 4 3 1 4 7 4 4 − 6 3 5 1 2 3 6 − 8 6 6 5 1 3 8 − (a) Bestimmen Sie für dieses Layout-Problem einen Deltaeder, die Menge aller Außen- und Innendreiecke und den Zielfunktionswert. (b) Entwerfen Sie ein layout, in dem Knoten 1 die Umwelt repräsentiert. 19. Der steirische Fahrradhersteller Friedrich F. verfügt über eine Produktionsstätte in Graz. Von hier versorgt er die vier Großräume Knittelfeld (K), Mürzzuschlag (M), Bad Aussee (B) und Graz (G) selbst. An diesen vier Orten sollen nun firmeneigene Vertriebsstellen eröffnet werden - an jedem höchstens eine - um die Kosten für den steirischen Vertrieb, der bislang von einem externen Transportunternehmen übernommen wurde, zu senken. Der Bedarf und die geplanten Lagerkapazitäten in der zu betrachtenden Zeitperiode sowie die Errichtungskosten für die Vertriebsstellen sind der folgende Tabellen zu entnehmen Kapazität in Stück Bedarf in Stück Errichtungskosten in (in 1000e) K 6000 2000 150 M 3000 1000 130 B 4000 2000 190 7000 3000 210 G Friedrich F. stellt die von den Kunden (es handlet sich ausschließlich um Katalogkunden) bestellten Fahrräder frei Haus zu. Diese Versandkosten (in e) bertragen pro Fahrrad cij K M B G K 1 3 1.5 6 M 2.5 3 4 7.5 B 3 2.5 2 3.5 G 7.5 6 5 3 Für der Transport in der Graz produzierten Fahrräder zu den Vertriebsstellen sind keine Kosten anzusetzen, sie können direkt über unterschiedliche Verkaufspreise abgegolten werden. Erstellen Sie alle Gleichungen eines entsprechenden Linearen Programms mit dem entschieden werden kann, in welchen Orten ein Vertriebsstelle eröffnet werden soll, wenn die Zielsetzung die Minimierung der insgesamt anfallenden Kosten ist. Erklären Sie alle von Ihnen verwendeten Symbole. Lösen Sie abschließend das Problem mit Hilfe von GLPK und interpretieren Sie die Lösung! 5.3. STANDORTPROBLEME 61 20. Die Daten eines unkapazitierten Warehouse-Location-Problems sind mit den Kosten cij , den Kosten der Bedienung von Nachfrager Bj durch Anbieter Ai , und durch die Fixkosten Fi der potentiellen Standorte i gegeben cij B1 B2 B3 B4 B5 Fi A1 5 6 2 6 4 8 A2 3 2 3 5 5 6 A3 7 3 3 8 3 7 A4 4 3 8 3 4 5 A5 4 5 6 6 7 7 Nun werden die Standorte 1, 2 und 3 eröffnet. Berechnen Sie, durch Rechnen einer Iteration des Node-Partitioning-Verfahrens, die möglichen Kosteneinsparungen, die sich gegebenenfalls durch eine andere Lösung ergeben. 21. Entlang einer 200 km langen Straße sind bei Kilometer 50, 100, 130 und 180 die 4 Nachfrager B1 , B2 , B3 und B4 lokalisiert; ihr Bedarf beträgt 30, 10, 20 bzw. 40 Stück eines von der Firma Liefer-GesmbH zuzustellenden Gutes. Um eine kostengünstige Zustellstrategie zu entwickeln, plant die Liefer-GesmbH entlang der erwähnten Straße zwei Auslieferungslager zu errichten. Lager L1 wird eine Kapazität von 60 Stück und Lager L2 von 40 Stück aufweisen. Die Transportkosten pro Längen- und Mengeneinheit sind der folgenden Tabelle zu entnehmen cij B1 B2 B3 B4 L1 4 4 3 6 L2 3 5 7 2 Wo sollen nun diese Lager errichtet werden und welche Kunden sind ihnen jeweils zuzuordnen, sodaß die gesamten Transportkosten möglichst gering sind? Beantworten Sie dazu an Hand einer Iteration des heuristischen TransportationLocation-Verfahrens von Cooper die folgenden Fragen (a) Gehen Sie von einer Startlösung aus, in der Lager 1 bei Kilometer 120 und Lager 2 bei Kilometer 150 errichtet wird. Welche Nachfrager werden mit welchen Mengen von Lager 1 versorgt, wenn die Kapazität von Lager 2 jeweils zur Hälfte für B1 und B4 genützt wird? Wie hoch sind die Gesamtkosten dieser Startlösung? (b) Berechnen Sie nunmehr die der Startlösung entsprechende verbesserte Position entweder von Lager 1 oder von Lager 2! 22. Das folgende durch die Entfernungsmatrix D := (dij ) und die Intensitätsmatrix T := (tij ) gegebene quadratische Zuordnungsproblem ist mit der Methode der Sukzessiven Einbeziehung zu lösen. Die Auswahl der noch freien Plätze bzw. Organisationseinheiten (OE) erfolgt lexikographisch; im Startschritt wird OE1 auf Platz A gesetzt. Berechnen Sie aber nicht die vollständige Lösung, sondern nur eine Teillösung, und zwar jene in der OE1 , OE2 und OE3 möglichst kostengünstig 62 KAPITEL 5. BEISPIELE angeordnet sind. dij A B C A 0 40 60 B 30 0 10 C 80 30 0 D 60 90 70 D 20 50 20 0 tij 1 2 3 4 1 0 8 3 9 2 7 0 4 1 3 2 5 0 6 4 4 6 3 0 23. Die Werkzeugerzeugungs-AG, WAG, produziert derzeit auf den Maschinen M1 bis M4 und erwägt auf Grund der anhaltenden Hochkonjunktur mit weiteren 3 Anlagen, also M5 bis M7 , ihre Kapazität aufzustocken. Für die neuen Anlagen stehen die Plätze P1 , P2 , P3 und P4 zur Verfügung. Die räumliche Situation (die Entfernungen in Meter) der betreffenden Maschinenhalle kann durch die folgende Matrix veranschaulicht werden P1 P2 P3 P 4 5 7 5 5 6 4 6 5 4 6 3 8 3 5 6 8 M1 M2 M3 M4 Die Werkzeugproduktion macht es erforderlich, dass die teilweise fertiggestellten Produkte zwischen bestehenden und neuen Maschinen ausgetauscht werden. Die Anzahl dieser Transporte beträgt: M1 M2 M3 M4 M1 M2 M3 1 4 5 6 2 3 4 6 3 4 6 3 Die dadurch entstehenden Kosten cij (pro Meter) für einen Transport zwischen einer Maschine Mi , i ∈ {1, 2, 3, 4} und einer Maschine Mj , j ∈ {5, 6, 7} sind lediglich von Mi abhängig Cij M1 M2 M3 M4 1 4 5 4 Bestimmen Sie einen möglichst kostengünstigen Aufstellungsplan für die neuen Aggregate. Wo werden diese aufgestellt und wie hoch sind die Gesamtkosten? 24. Der Chef einer Logistikabteilung, Herr Leopold, hat folgendes Problem: seine Firma will insgesamt bis zu 5 Vertriebsplätze Vi , i ∈ {1, 2, 3, 4, 5} eröffnen, von denen die 5 Nachfrager Nj , j ∈ {1, 2, 3, 4, 5} versorgt werden sollen. Da jeder Vertriebsplatz in der Lage ist, die Gesamtnachfrage zu decken, müssen keine Kapazitätsrestriktionen berücksichtigt werden. In der folgenden Tabelle hat Leopold die Kosten für eine Lieferung der Nachfrage des Kunden Nj durch den Vertrieb 5.3. STANDORTPROBLEME 63 Vi eingetragen V1 V2 V3 V4 V5 N1 N2 N3 N4 N5 6 7 5 6 5 4 4 6 5 5 3 5 1 8 7 3 4 1 9 5 8 7 6 6 5 An Kosten für die Eröffnung eines Vertriebes an der Stelle i wären 6, 5, 4, 6 und 5 (für i=1,2,3,4,5) anzusetzen. Bestimmen Sie einen Zustellplan, der angibt welcher Kunde von welchem Vertrieb versorgt wird. Gehen Sie dabei auf die folgenden Fragen ein (a) Wie lautet der mit einem heuristischen Verfahren bestimmte Zustellplan und wie hoch sind die Gesamtkosten für Leopolds Firma? (b) Läßt sich die in eben ermittelte Lösung mit den vorhandenen Informationen auf Optimalität hin untersuchen? Begründen Sie warum diese Lösung optimal beziehungsweise nicht optimal ist! (c) Leopold erfährt in letzter Sekunde, dass sich die Fixkosten des Vertriebes 4 doch noch senken ließen. Ab welchem Betrag würden sich gegenüber dem bisherigen Zustellplan Einsparungen ergeben? Erklären Sie warum! 25. Gegeben sei das folgende Standortproblem: in der folgenden Matrix bezeichnen P1 , P2 , P3 und P4 mögliche Standorte, die die Nachfrager N1 , N2 , N3 und N4 versorgen können und mit cij sind die Kosten beschrieben, die auftreten, wenn der Bedarf von Nachfrager Nj ausschließlich vom Standort Pi gedeckt wird P1 P2 P3 P4 N1 N2 N3 N4 6 3 9 5 9 9 1 6 5 4 9 6 4 8 5 6 Wird ein Standort Pi eröffnet, so fallen Errichtungskosten Fi , i ∈ {1, 2, 3, 4} in der Höhe von 4, 2, 3 und 3 an. Beantworten Sie die folgenden Fragen unter der Annahme, dass alle anfallenden Kosten minimiert werden sollen und unter der Bedingung, dass die Gesamtnachfrage erfüllt werden muss. (a) Bestimmen Sie für diese Problemstellung, unter der Annahme, dass jeder Standort höchstens 2 Nachfrager versorgen kann, die Zielfunktion sowie die notwendigen Gleichungen eines Linearen Programms und erklären Sie alle von Ihnen verwendeten Symbole und Abkürzungen. (b) Lösen Sie das Problem, unter der Annahme, dass jeder Standort beliebig viele Nachfrager versorgen kann, mit einem heuristischen Verfahren und geben Sie die Struktur der Lösung sowie die ihr entsprechenden Gesamtkosten an. 64 KAPITEL 5. BEISPIELE (c) Läßt sich die eben errechnete Lösung verbessern? Wenn ja, um wieviel? Begründen Sie Ihre Aussage. 26. Tischler Theobald hat sich eines graphentheoretischen Verfahrens bedient, um die Maschinen in seiner Schreinerhalle neu anzuordenen. Und zwar so, dass der durch die einzelnen Nachbarschaften gegebene Nutzen in Summe möglichst groß ist. Theobald, Modernem stets aufgeschlossen, hat bereits das fertige Layout gemäß seinen Berechnungen auf ein Platt Papier gezeichnet und will sich eben an die Arbeit machen, seine Maschinen neu anzuordnen. Dabei hat er entdeckt, dass er in der Aufregung wohl besagte Skizze verloren hat. Zum Glück findet er nach einiger Zeit noch seine Berechnungen. In der letzten Zeile des zerschlissenen Blattes ist da noch folgendes auszumachen ∆ = {σ135 , σ136 , σ146 , σ148 , σ158 , σ235 , σ237 , σ258 , σ278 , σ368 , σ378 , σ468 } Meister Theobald weiß noch, dass der Index 2 die 5 mal 5 Meter große Schreinerhalle selbst repräsentierte und kennt natürlich nachwievor noch die Grundfläche aller seiner Maschinen, die er umzustellen gedenkt: je 1 m2 für die Maschinen 4 und 6, je 2 m2 für Maschinen 1 und 5, 6 m2 für Maschine 8, 5 m2 für Maschine 3 und letztlich 8 m2 für Maschine 7. Alle Maschinen sind so flexibel aufgebaut, dass sie in jeweils ein Quadratmeter große Stücke zerlegt und anschließend wieder beliebig zusammengebaut werden können. Bei allen Maßangaben hat Theobald natürlich den Platzbedarf für sich, also zum Gehen und Arbeiten, bereits einberechnet. Helfen Sie ihm sein Layout zu rekonstruieren, wobei Sie Ihrer Konstruktion das Außendreieck σ237 zu Grunde legen. 27. Gegeben sei ein quadratisches Zuordnungsproblem mit 5 Organisationseinheiten (OE), die auf 5 Plätze verteilt werden sollen. Im Startschritt wird OE1 auf den Platz A gesetzt, die Auswahl der noch freien Plätze bzw. OE erfolgt lexikographisch. Zeigen Sie alle 30 Zuordnungsvarianten auf, die in Abhängigkeit von den 4 einzelnen Iterationen des Lösungsverfahrens der Sukzessiven Einbeziehung berücksichtigt werden. Unterstellen Sie dabei den folgenden Rechenverlauf: am Ende der ersten Iteration wird OE2 auf Platz C gesetzt, in der zweiten Iteration verdrängt OE3 die OE1 , welche auf D angeordnet wird und in Iteration drei wird der Platz B von OE4 eingenommen. 28. Zwei Nachfrageorte, N1 und N2 , die von der Speditionsfirma Hurtig & Hilfreich beliefert werden, sind 13 Kilometer voneinander entfernt und durch genau eine Straße miteinander verbunden, an welcher Herr Hurtig plant, ein Auslieferungslager zu errichten. Im Betrachtungszeitraum sind von dort 5 Fahrten zu N1 und 3 Fahrten zu N2 erforderlich. Pro gefahrenem Kilometer sind 7 Geldeinheiten anzusetzen. Zeigen Sie nun, Ihres Zeichens Logistikleiter(in) bei Hurtig & Hilfreich, wieviele Geldeinheiten mindestens einzusparen sind, wenn das Auslieferungslager nicht an dem durch die Schwerpunktkoordinaten gegebenen Punkt besagter Straße - Herrn Hilfreichs Lösungsvorschlag - errichtet wird. 29. Distributionsvariante I: Eisverkäufer Engelbert unterhält zur Zeit in Graz die Eissalons E1 , E2 , E3 und E4 . Im Rahmen einer Geschäftserweiterung plant Engelbert nun den Straßenverkauf, und somit in der Innenstadt die Verkaufsstände 5.3. STANDORTPROBLEME 65 V1 , V2 und V3 zu errichten. Auf Grund seiner guten Verbindungen zum örtlichen Magistrat hat man ihm zur Errichtung seiner Verkaufsstände sogar 4 mögliche Standorte, nämlich S1 , S2 , S3 und S4 , angeboten. Er fertigt eine Skizze an, ermittelt die folgenden Entfernungen (in km) und fährt im Zuge der angestrebten Gesamtfinanzplanung auch die derzeitig anfallenden Fixkosten FEi seiner Eissalons an (in 1.000 epro Betrachtungszeitraum) E1 E2 E3 E4 S1 S2 S3 S4 FEi 3 6 5 6 5 6 2 3 5 1 7 6 3 1 2 4 3 8 7 1 Die Eisproduktion ist seit jeher schon unterschiedlich auf alle Salons aufgeteilt gewesen. Die gesamten Transportkosten für die von den Salons an die Verkaufsstände gemäß einer Markterhebung zuzustellenden Mengen sind der folgenden Tabelle zu entnehmen (in epro km und Betrachtungszeitraum). FV i beschreibt analog zu oben die Fixkosten für die Verkaufsstände: E1 E2 E3 E4 FV i V1 1 3 2 7 3 1 V2 2 5 4 5 V3 5 6 1 3 2 (a) Bestimmen Sie einen möglichst kostengünstigen Aufstellungsplan, wenn Engelbert keinen Eissalon schließen und alle Verkaufsstände eröffnen will. Wo werden die Verkaufsstände errichtet und wie hoch sind die Gesamtkosten? (b) Distributionsvariante II: Engelberts Logistiküberlegungen beinhalten auch folgende Idee: er überlegt, auf den Straßenverkauf vollständig zu verzichten. Seine Kunden sollen sich schon selbst in einen seiner Eissalons bemühen, dafür will er aber im Gegenzug die Kunden aller 4 (ehemals als mögliche Straßenverkaufsstandorte vorgesehenen) Absatzbereiche bedienen. Engelbert geht davon aus, dass er, unter Einhaltung seiner sich selbstlos auferlegten Restriktion der vollen Nachfragebefriedigung, nicht alle Eissalons weiterführen muss. Welche Eissalons sollen nun in Zukunft geöffnet bleiben, wenn keiner seiner Kunden mehr als 5 Kilometer von zumindest einem seiner Betriebe entfernt sein soll? Bestimmen Sie nach Möglichkeit eine kostenminimale Lösung für die weitere Betriebsführung und erklären Sie warum Ihre Vorgangsweise zu einer bzw. keiner Optimallösung geführt hat! (c) Distributionsvariante III: In der vorweihnachtlichen Aufregung ist Engelbert ein Fehler unterlaufen: in der Entfernungsmatrix hat er versehentlich Kosten (in 1.000 epro Betrachtungszeitraum) eingetragen. Und zwar an der Stelle Ei /Sj jene, die für ihn anfallen, wenn Eissalon i zur Gänze den Bedarf aller Kunden des Absatzbereichs j deckt. Wiederum soll auf den Straßenverkauf verzichtet werden und es müssen nicht alle Salons weitergeführt werden. Welche Betriebe sind bei voller Bedarfsbefriedigung und möglichst kostengünstiger Verteilungsstruktur aufrechtzuhalten? Wie setzen sich die von Engelbert zu tragenden Kosten zusammen? 66 KAPITEL 5. BEISPIELE Anhang A Programmierbeispiele Alle abgedruckten Beispiele stehen (eventuell aktualisiert) auch auf https://85.124. 230.179/~gerald/uni/pws/ zur Verfügung und können gerne als Ausgangspunkt eigener Experimente verwendet werden. Um zu programmieren ist stets ein Texteditor nötig. In Windows ist bereits das notepad1 enthalten, jedoch ist es einer der schlechtesten Programmiereditoren. Wir empfehlen Notepad++, eine sehr gute Open Source Alternative, die auf http://notepad-plus.sourceforge.net frei zur Verfügung steht. A.1 GNU Linear Programming Kit The GLPK (GNU Linear Programming Kit) package is intended for solving large-scale linear programming (LP), mixed integer programming (MIP), and other related problems. It is a set of routines written in ANSI C and organized in the form of a callable library. GLPK supports the GNU MathProg language, which is a subset of the AMPL language. The GLPK package includes the following main components: • Revised simplex method • Primal-dual interior point method • Branch-and-bound method • Translator for GNU MathProg • Application program interface (API) • Stand-alone LP/MIP solver [Fou06] 1 Das notepad ist im deutschsprachigen Raum auch als “Editor” bekannt. 67 68 ANHANG A. PROGRAMMIERBEISPIELE Im professionellen Bereich wird zur Lösung der im Kurs besprochenen Probleme häufig AMPL2 verwendet. Die dafür nötigen Solver wie zum Beispiel CPLEX sind jedoch sehr teuer. GLPK verwendet GMPL3 , eine für unsere (und viele andere Probleme) vollkommend ausreichende Teilmenge von AMPL. Der große Vorteil von GLPK ist, dass es Open Source Software ist und damit frei verwendet werden kann (auch die kommerzielle Verwendung ist frei). Weiters steht es für verschiedene Betriebssysteme wie MS Windows und Linux zur Verfügung. Ein Tutorial in GLPK sowie eine vollständige Anleitung und ein Referenzhandbuch stehen auf https://85.124.230.179/~gerald/uni/pws/manuals/ zur Verfügung. Der Sourcecode von GLPK kann von einem Mirror der TU Wien4 heruntergeladen werden. Eine kompilierte Version für die Verwendung unter Microsoft Windows stellt die Oakland University5 zur Verfügung. Die Installation unter Linux, zum Beispiel Debian oder Ubuntu ist natürlich (für Kenner) viel Einfacher als unter Windows sudo apt-get install glpk Sobald man eine Modelldatei erstellt hat, kann diese mit folgendem Befehl gelöst werden glpsol -m modelldatei.mod -o loesungsdatei.txt wobei “modelldatei.mod” natürlich durch den Namen Ihrer Modelldatei zu ersetzen ist und “loesungsdatei.txt” durch einen frei wählbaren Namen ersetzbar ist. Um den Befehl glpsol unter Windows verwenden zu können, lesen Sie bitte im oben erwähnten Tutorial nach; eine Linux manpage von GLPK steht online auch für Windowsbenutzer zur Verfügung6 . Unter Linux sind nach der Installation wie gewohnt keine weiteren Einstellungen nötig. Viel Freude beim experimentieren! A.1.1 1 2 3 4 5 6 7 Candy Problem /∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ Module name: candy problem ∗ Description: Linear Program solving a candy problem :) ∗ Language: glpk ∗ Author: Gerald Senarclens de Grancy, Rita Stueckler, Aniko Tobi ∗ Copyright: GPL see file COPYING ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ 2 AMPL - “A Mathematical Programming Language” GMPL - “GNU Mathematical Programming Language” 4 ftp://gd.tuwien.ac.at/gnu/gnusrc/glpk 5 http://personalwebs.oakland.edu/~echeng/mor342.html 6 http://www.penguin-soft.com/penguin/man/1/glpsol.html 3 A.1. GNU LINEAR PROGRAMMING KIT 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 69 ################################################### # Sets and Parameters ################################################### # Production plants set P; # Consumers set K; # capacity of plant p in cases param b{p in P}; # demand of consumer k in cases param d{k in K}; # variable cost for production and delivery param c{p in P, k in K}; # fixed cost per plant param f{p in P}; ################################################### # Variables ################################################### # shipping quantities var x{p in P, k in K}, integer, >= 0; # plant construction var y{p in P}, binary; ################################################### # Objective ################################################### # The objective needs a name, in this case ’cost’ minimize cost: sum{p in P, k in K} c[p,k] ∗ x[p,k] + sum{p in P} f[p] ∗ y[p]; ################################################### # Constraints ################################################### s.t. demand{k in K}: sum{p in P} x[p,k] = d[k]; s.t. supply{p in P}: sum{k in K} x[p,k] <= b[p]; s.t. fixed{p in P}: y[p] >= (sum{k in K} x[p,k]) / b[p]; ################################################### # Data ################################################### data; set P := plant1 plant2 plant3; set K := customer1 customer2 customer3; param b := plant1 444000 plant2 336000 plant3 300000; param d := customer1 276000 customer2 132000 70 ANHANG A. PROGRAMMIERBEISPIELE 57 customer3 192000; 58 param ccustomer1 : customer2 customer3 := 59 plant1 711 6 60 plant2 97 4 61 plant3 513 10; 62 param f := plant1 960000 63 plant2 600000 64 plant3 840000; 65 end; A.1.2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Extinguisher Problem /∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ Module name: extinguisher problem ∗ Description: Linear Program solving a location problem ∗ Language: glpk ∗ Author: Rita Stueckler, Tobi Aniko, Senarclens de Grancy Gerald ∗ Copyright: GPL see file COPYING ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/ ####################### # Sets and Parameters # ####################### # office rooms set O; # possible locations for extinguishers set L; # fixed cost for each location param c{l in L}; # reachability matrix param r{o in O, l in L}; ############# # Variables # ############# # installation of extinguisher var y{l in L}, binary; ############# # Objective # ############# # the goal is to minimize the cost minimize cost: sum{l in L} c[l] ∗ y[l]; ############### # Constraints # A.2. PYTHON 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 71 ############### # we need at least one extinguisher for each office demand{o in O}: sum{l in L} y[l] ∗ r[o,l] >= 1; ######## # Data # ######## data; set O := office1 office2 office3 office4 office5 office6 office7 office8 office9 office10; set L := extinguisher1 extinguisher2 extinguisher3 extinguisher4 extinguisher5 extinguisher6; param c := extinguisher1 15 extinguisher2 5 extinguisher3 10 extinguisher4 5 extinguisher5 20 extinguisher6 5; param r : extinguisher1 extinguisher2 extinguisher3 extinguisher4 extinguisher5 extinguisher6 := office1 1 1 0 0 1 1 office2 1 1 0 1 0 0 office3 1 0 1 0 1 0 office4 1 0 0 1 0 1 office5 1 1 0 0 1 1 office6 1 0 0 1 0 1 office7 1 1 1 0 1 0 office8 1 1 0 1 0 0 office9 0 1 0 0 1 0 office10 1 0 0 1 1 1; end; A.2 Python Auch die Programmiersprache Python7 ist plattformunabhängig und steht (auch für kommerzielle) Nutzung kostenfrei (weil Open Source) zur Verfügung. Es ist auch ausreichend Dokumentation in mehreren Sprachen vorhanden ist, unter anderem auch einige Unterlagen für jene, die noch nie programmiert haben8 . Die angefügten Python Beispiele erheben nicht den Anspruch “sauber” programmiert zu sein. Sie zeigen jedoch sehr schön, wie man schnell und dennoch elegant einige der im Skriptum gezeigten Algorithmen in einer sehr einfachen frei Verfügbaren und Plattformunabhängigen Sprache implementieren kann. 7 8 http://www.python.org/ http://wiki.python.org/moin/BeginnersGuide/NonProgrammers 72 A.2.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 Nordwesteckenregel #!/usr/bin/env python # Copyright (c) 2007 Gerald Senarclens de Grancy # You may copy, modify and distribute this software according to the terms of # the Gnu GPL (see file COPYING for details)””” # sample data a = [25,15,10] b = [30,15,5] x = [] m = len(a) n = len(b) # initialize the array x for i in range(m): x.append([]) for j in range(n): x[i].append(’ ’) i=0 j=0 while(True): x[i][j] = min(a[i],b[j]) a[i] = a[i] x[i][j] b[j] = b[i] x[i][j] if i==m 1 and j==n 1: break if a[i] == 0: i+=1 else: j+=1 # print the result to the screen (with a leading linebreak print for i in range(m): print x[i] A.2.2 1 2 3 4 5 6 ANHANG A. PROGRAMMIERBEISPIELE Spaltenminimummethode #!/usr/bin/env python # Copyright (c) 2007 Gerald Senarclens de Grancy # You may copy, modify and distribute this software according to the terms of # the Gnu GPL (see file COPYING for details)””” # sample data A.2. PYTHON 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 a = [25,15,10] b = [30,15,5] # c is an array of columns (this is easier when comparing the cost in # each column) c = [[1,2,2],[2,1,3],[1,2,3]] x = [] # m is the number of rows m = len(a) # n is the number of columns n = len(b) # initialize the array x for i in range(m): x.append([]) for j in range(n): x[i].append(0) # initialize lists of marked rows and columns # 0 means unmarked, 1 means marked marked columns=[] marked rows=[] for i in range(m): marked rows.append(0) for j in range(n): marked columns.append(0) def unmarkedColumns(): return marked columns.count(0) def markColumn(j): marked columns[j] = 1 def columnIsMarked(j): return marked columns[j] def markRow(i): marked rows[i] = 1 def rowIsMarked(i): return marked rows[i] def allRowsMarked(): if marked rows.count(0)==0: return True def allButOneColumnsMarked(): if marked columns.count(0)==1: return True def getUnmarkedRowWithMinCost(j): possibilities = [] for elem in range(m): if marked rows[elem] == 1: possibilities.append("marked") else: possibilities.append(c[j][elem]) return possibilities.index(min(possibilities)) 73 74 ANHANG A. PROGRAMMIERBEISPIELE 56 57 while(True): 58 for j in range(m): 59 if columnIsMarked(j): continue 60 min index = getUnmarkedRowWithMinCost(j) 61 x[min index][j] = min(a[min index],b[j]) 62 a[min index] = a[min index] x[min index][j] 63 b[j] = b[j] x[min index][j] 64 if unmarkedColumns()>=2 and b[j]==0: 65 markColumn(j) 66 if a[min index]==0 and b[j]!=0: 67 markRow(min index) 68 elif a[min index]==b[j]==0 and not columnIsMarked(j): 69 markRow(min index) 70 if allRowsMarked() and allButOneColumnsMarked(): 71 # print the result to the screen 72 for i in range(m): 73 print x[i] 74 exit() 75 A.2.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Miehle Algorithmus #!/usr/bin/env python # Copyright (c) 2007 Gerald Senarclens de Grancy # You may copy, modify and distribute this software according to the terms of # the Gnu GPL (see file COPYING for details)””” from math import ∗ ################################################### ## data and options ################################################### epsilon = 10 ∗∗ ( 5) iterations = 9 ## the coordinates are two dimensional, the third figure is the weight ## following the schema (u,v,b) points = ((1,3,4),(2,8,10),(2,10,3),(8,16,1),(10,18,5)) ################################################### ## calculation ################################################### u=0 v=1 b=2 ## calculate the base solution A.2. PYTHON 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 75 sum ub = 0.0 sum vb = 0.0 sum b = 0.0 for point in points: sum ub += point[u]∗point[b] sum vb += point[v]∗point[b] sum b += point[b] x0 = sum ub/sum b y0 = sum vb/sum b solution = 0.0 for point in points: solution += point[b] ∗ sqrt((x0 point[u])∗∗2 + (y0 point[v])∗∗2 + epsilon) print "x0 = %f, y0 = %f, Z’(x0,y0) = %f" % (x0,y0,solution) ## iterations x old = x0 y old = y0 for iteration in range(iterations+1)[1:]: x numerator = 0.0 y numerator = 0.0 denominator = 0.0 for point in points: x numerator += (point[b]∗point[u]/sqrt((x old point[u])∗∗2 + (y old point[v])∗∗2 + epsilon)) denominator += (point[b]/sqrt((x old point[u])∗∗2 + (y old point[v])∗∗2 + epsilon)) y numerator += (point[b]∗point[v]/sqrt((x old point[u])∗∗2 + (y old point[v])∗∗2 + epsilon)) x = x numerator / denominator y = y numerator / denominator solution = 0.0 for point in points: solution += point[b] ∗ sqrt((x point[u])∗∗2 + (y point[v])∗∗2 + epsilon) print "x%d = %f, y%d = %f, Z’(x%d,y%d) = %f" % (iteration,x,iteration,y,iteration,iteration,solution) x old = x y old = y 76 ANHANG A. PROGRAMMIERBEISPIELE Literaturverzeichnis [Aic02] Oswin Aichholzer. Entwurf und Analyse von Algorithmen. Technische Universität Graz, 2002. http://fmysql.tu-graz.ac.at/~igi/Skript/ NoFrame/index.html [Online; Stand 27. Februar 2008]. [Fou06] Free Software Foundation. GLPK (GNU Linear Programming Kit). GNU Project, 11 2006. http://www.gnu.org/software/glpk/#introduction [Online; Stand 11. Jänner 2008. [Gre07] Peter Greistorfer. Unterlagen zu den Lehrveranstaltungen Produktionswirtschaft. Universität Graz, 2007. [Pre03] Bruno R. Preiss. Data Structures and Algorithms with Object-Oriented Design Patterns in Python. Bruno R. Preiss, P.Eng., 2003. http://www. brpreiss.com/books/opus7/ [Online; Stand 27. Februar 2008]. [Wik07a] Wikipedia. Lineare optimierung — wikipedia, die freie enzyklopädie, 2007. http://de.wikipedia.org/w/index.php?title=Lineare_ Optimierung&oldid=40156343 [Online; Stand 6. März 2008]. [Wik07b] Wikipedia. Produktionswirtschaft — wikipedia, die freie enzyklopädie, 2007. http://de.wikipedia.org/w/index.php?title= Produktionswirtschaft&oldid=39134282 [Online; Stand 25. November 2007]. [Wik08a] Wikipedia. Algorithmus — wikipedia, die freie enzyklopädie, 2008. http:// de.wikipedia.org/w/index.php?title=Algorithmus&oldid=41923750 [Online; Stand 3. Februar 2008]. [Wik08b] Wikipedia. Graph (graphentheorie) — wikipedia, die freie enzyklopädie, 2008. http://de.wikipedia.org/w/index.php?title=Graph_ %28Graphentheorie%29&oldid=41105452 [Online; Stand 4. Februar 2008]. [Wik08c] Wikipedia. Modi-methode — wikipedia, die freie enzyklopädie, 2008. http://de.wikipedia.org/w/index.php?title=MODI-Methode&oldid= 43455964 [Online; Stand 8. März 2008]. [Wik08d] Wikipedia. Netzplantechnik — wikipedia, die freie enzyklopädie, 2008. http: //de.wikipedia.org/w/index.php?title=Netzplantechnik&oldid= 42434345 [Online; Stand 2. März 2008]. 77 78 LITERATURVERZEICHNIS [Wik08e] Wikipedia. Opportunitätskosten — wikipedia, die freie enzyklopädie, 2008. http://de.wikipedia.org/w/index.php?title=Opportunit%C3% A4tskosten&oldid=43070274 [Online; Stand 6. März 2008]. [Wik08f] Wikipedia. Stepping-stone-methode — wikipedia, die freie enzyklopädie, 2008. http://de.wikipedia.org/w/index.php?title= Stepping-Stone-Methode&oldid=43375606 [Online; Stand 6. März 2008]. [Wik08g] Wikipedia. Transportproblem — wikipedia, die freie enzyklopädie, 2008. http://de.wikipedia.org/w/index.php?title= Transportproblem&oldid=42985148 [Online; Stand 4. März 2008]. Index Überdeckungsproblem, 36 Ausgangslösung, siehe Basislösung azyklischer Graph, 3 Bäume, 3 Basislösung, 20 Computerterminals, 1 Digraph, 3 Edge, siehe Kante elementarer Kreis, 26 Entfernungen, 3 Eröffnungsheuristik, 20 FIFO-Algorithmus, 10 Partitionsproblem, 36 Prim, siehe Algorithmus von Prim Programmierbeispiele, 67 Python, 36, 47, 55 quadratisches Zuordnungsproblem, siehe KoopmansBeckman-Problem QZOP, siehe Koopmans-Beckman-Problem set covering, siehe Überdeckungsproblem set partitioning, siehe Partitionsproblem Shortest Path Problem, 7 Spaltenminimummethode, 23 Startlösung, siehe Basislösung Stepping-Stone Methode, 26 Tripel-Algorithmus, 10 Vertex, siehe Knoten gerichteter Graph, siehe Digraph GLPK, 54, 56, 57, 59, 60, 67 Warehouse Location Problem, 33 GNU Linear Programming Kit, siehe GL- Wege, 3 PK WLP, siehe Warehouse Location Problem Iterationen, 2 zyklischer Graph, 3 Kante, 3 Knoten, 2 Koopmans-Beckman-Problem, 38 Logistik, 1 Longest Path Problem, 8 minimal spannende Bäume, 3 MODI-Methode, 28 modifizierte Distributionsmethode, siehe MODIMethode MST, 3 Nordwesteckenregel, 21 79