Prof. Dr. habil. Knut Haase. Quantitative Methoden Teil A Aufgaben- und Foliensammlung

Ähnliche Dokumente
Klausur zur Vorlesung Einführung in das Operations Research im Wintersemester 2005/2006

10. Die Berücksichtigung nicht vorzeichenbeschränkter Variablen

Simplex-Verfahren. Kapitel 4. Simplex-Verfahren. Peter Becker (H-BRS) Operations Research I Sommersemester / 298

Lösung allgemeiner linearer Programme

Eigenschaften von LPs

Veranstaltung und Übung: Optimierungssysteme Modelle, Software, Praxisanwendungen. Uwe Suhl Veronika Waue SS 2008

Probeklausur Optimierung

Klausur zur Vorlesung Einführung in das Operations Research im Wintersemester 2007/2008

4.3.3 Simplexiteration

Klausur zur Vorlesung Operations Research im Wintersemester 2009/10

Lineare Optimierung: Simplexverfahren Phase Ⅰ

Lineare Optimierungsmodelle

Kombinatorische Optimierung

Schnittebenenverfahren von Gomory. Stefan Allescher 30. Juni 2005

Leibniz Universität Hannover Wirtschaftswissenschaftliche Fakultät Institut für Produktionswirtschaft Prof. Dr. Stefan Helber

Vorlesung Wirtschaftsmathematik I WS 2007/2008, Wirtschaftingenieurwesen. Kapitel IV: Grundlagen der Linearen Optimierung

Klausur zur Vorlesung Operations Research im Sommersemester 2009

Übung 3, Simplex-Algorithmus

Inhaltsverzeichnis Grundlagen der Linearen Optimierung

Übung QM 1 EINFÜHRUNG 1. 1 Einführung. ohne Übungsaufgaben

Die duale Simplexmethode

Lineare Optimierung Teil 2

Mathematische Grundlagen für Wirtschaftswissenschaftler Lösungshinweise zu den Übungsaufgaben aus Kapitel 3 - Lineare Optimierung

Minimumproblem. Definition 4.7. Ein LP der Form. unter den Nebenbedingungen. d ij x j b i (i =1,...,m)

Dualitätssätze der linearen Optimierung

Zugeordneter bipartiter Graph

1 Der Simplex Algorithmus I

Lineare Gleichungssystem

Inhalt. 8.1 Motivation. 8.2 Optimierung ohne Nebenbedingungen. 8.3 Optimierung unter Nebenbedingungen. 8.4 Lineare Programmierung

Computer Science Department - High Performance and Web Computing Group. Optimierungsprobleme

Übung: Algorithmen und Datenstrukturen Einführung: Aufgabe 1. Malte Heins Helga Karafiat

VORLESUNG 11 Lineare Optimierung (Viele Folien nach Ulf Lorenz, jetzt TU Darmstadt)

Klausurrepetitorium ABWL

Kapitel 7 : Lineare Programmierung Die Simplexmethode (G.B.Dantzig, 1947) Beispiel:

7.1 Matrizen und Vektore

3.2.5 Dualität der linearen Optimierung I

Teil I. Lineare Optimierung

6. Softwarewerkzeuge für die Lineare Programmierung

Lineares Optimieren. W. Kippels 12. April Inhaltsverzeichnis. 1 Einleitung 2. 2 Die Beispielaufgabe 2. 3 Einführung von Schlupfvariablen 2

Kapitel 5. Peter Becker (H-BRS) Operations Research I Sommersemester / 298

Einführung in Verkehr und Logistik

Optimierung. Vorlesung 02

CARL HANSER VERLAG. Peter Stingl. Operations Research Linearoptimierung

A2.3 Lineare Gleichungssysteme

Kurseinheit 2»Dualität und weiterführende Methoden«

Modellieren mit AMPL

Berufliches Gymnasium (WG, EG, AG, SG) Hauptprüfung 2008 Teil 2, Lineare Optimierung, Aufgabe 2 Baden-Württemberg

Anwendungen der Wirtschaftsmathematik und deren Einsatz im Schulunterricht

Operations Research. Linearoptimierung. Bearbeitet von Peter Stingl

Hauptsatz und Optimalitätskriterium der Simplexmethode

Lineare Gleichungssysteme

Die duale Simplexmethode zur Lösung rein ganzzahliger linearer Programme

Lineare Gleichungssysteme

1 Lineare Gleichungssysteme und Matrizen

Lineare Gleichungssysteme (Teschl/Teschl 11.1)

8. Lineare Optimierung

Lineare Gleichungssysteme (Teschl/Teschl 11.1)

3. Schnittebenenverfahren

Optimale Steuerung 1 Prozessoptimierung 1

Operations Research. Die Simplexmethode. LP-Dualität. Die Simplexmethode. Rainer Schrader. 18. Juni Zur Erinnerung: Gliederung

Kurs über Lineare Gleichungssysteme. PD Dr. Karin Halupczok

Mischungsverhältnisse: Nehmen wir an, es stehen zwei Substanzen (zum Beispiel Flüssigkeiten) mit spezifischen Gewicht a = 2 kg/l bzw.

Optimierung. Optimierung. Vorlesung 8 Lineare Programmierung III: Simplex Algorithmus Fabian Kuhn

Optimierung für Wirtschaftsinformatiker: Lineare Programme

z = c T x : Ax = b, x 0 }, - die Darstellung der Nichtbasisvektoren durch die Basis ist

Simplex-Verfahren. Kapitel 3. Simplex-Verfahren. Peter Becker (H-BRS) Lineare und kombinatorische Optimierung Wintersemester 2017/ / 372

Aufgaben zu Kapitel 23

Operations Research. Ganzzahlige lineare Programme. ganzzahlige lineare Programme. Ganzzahlige lineare Programme. Rainer Schrader. 25.

Der Simplex-Algorithmus

Abbildung 1: Graphische Lösung der ersten Übungsaufgabe

05. Lineare Gleichungssysteme

Über- und unterbestimmte

Mathematik für Naturwissenschaftler II SS 2010

1. Transport- und Zuordnungsprobleme Optimierungsalgorithmus für Transportprobleme. Duales Problem. a i u i + i=1. j=1

Mathematik: Mag. Schmid Wolfgang Arbeitsblatt Semester ARBEITSBLATT 11 GLEICHUNGEN UND ÄQUIVALENZUMFORMUNGEN

Prof. Dr. Roland Griesse. Höhere Mathematik für Bachelorstudiengänge I.2

Wiederholung. Wir gehen von LP s in Standardform aus, wobei A R m n vollen Zeilenrang hat: minc T x A x = b

Mathematik für Naturwissenschaftler II SS 2010

Aufgabe 5.3 Duale Simplexverfahren

1. Lineare Optimierungsaufgaben (LOA) als Teilklasse konvexer Optimierungsprobleme. f(x) min, x G (1.1) (Legende)

Lineare Optimierung Dantzig 1947

LINEARE GLEICHUNGSSYSTEME. Wir besprechen hier, wie MathematikerInnen an das Lösen linearer Gleichungssysteme wie. x + y + z = 1

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Das Linear Ordering Problem Exakte Lösungsverfahren. für NP-schwierige. VO Algorithm Engineering

Kapitel 2: Lineare Optimierung

Lineare Optimierungsaufgaben - eine Einführung

Kuhn-Tucker Bedingung

Kapitel 3. Kapitel 3 Gleichungen

Mathematik II für Studierende der Informatik (Analysis und lineare Algebra) im Sommersemester 2018

$Id: lgs.tex,v /11/26 08:24:56 hk Exp hk $ Definition 5.1: Ein lineares Gleichungssystem besteht aus m linearen Gleichungen

textlichen Problem heraus. Hier folgt nun ein zugegebenermaßen etwas künstliches Problem :

Studientag zur Algorithmischen Mathematik

37 Gauß-Algorithmus und lineare Gleichungssysteme

Fachakademie für Wirtschaft der FHM A2: Lineare Optimierung und das Simplexverfahren

Mathematik für Naturwissenschaftler II SS 2010

Lineare Gleichungssysteme mit zwei Variablen

10.2 Dualitätstheorie Operations Research. In der Standardform eines Maximierungsproblem: b e ) mit ( w) + a ej ) x j + x g = ( b g + g G

Transkript:

Institut für Verkehrswirtschaft Lehrstuhl für Betriebswirtschaftslehre, insb. Verkehr Schwerpunkt: Operations & Supply Chain Management Universität Hamburg Fakultät Wirtschafts- und Sozialwissenschaften Institut für Verkehrswirtschaft Professur für Betriebswirtschaftslehre, insb. Verkehr Prof. Dr. habil. Knut Haase Quantitative Methoden Teil A Aufgaben- und Foliensammlung Sommersemester 2013 Hamburg, 28. März 2013

Inhaltsverzeichnis 1 Der Weg zur erfolgreichen Teilnahme 3 2 Lineare Optimierung 5 2.1 Einführendes Beispiel eines linearen Optimierungsproblems und dessen graphische Lösung...................................... 5 2.2 Bestimmung einer optimalen Lösung durch iteratives Lösen von Gleichungssystemen und erste Analyse............................. 10 2.3 Lösen linearer Optimierungsprobleme per Hand unter Verwendung des Simplextableaus..................................... 15 2.4 Lineare Optimierung mit GAMS.......................... 17 2.5 Duale Simplexmethode - Reoptimierung zur Berücksichtigung einer zusätzlichen Nebenbedingung................................. 26 2.6 Berücksichtigung zusätzlicher Alternativen.................... 29 2.7 Zweiphasenmethode................................ 32 2.8 Dualität...................................... 34 2.9 Sonderfälle..................................... 38 2.10 Aufgaben..................................... 43 3 Graphentheoretische Grundlagen 47 3.1 Grundbegriffe................................... 47 3.2 Speicherung von Graphen............................. 48 3.3 FIFO-Algorithmus zur Bestimmung kürzester Wege................ 49 3.4 Modifikation des FIFO-Algorithmus........................ 51 3.5 Netzwerkflussproblem zur Bestimmung kürzester Wege.............. 52 3.6 Minimaler spannender Baum........................... 53 3.7 Minimaler 1-Baum................................. 55 3.8 Aufgaben...................................... 57 4 Das klassische Transportproblem 59 4.1 Entscheidungsproblem............................... 59 4.2 Vogel sche Approximationsmethode........................ 62 4.3 MODI-Methode.................................. 63 4.4 Aufgaben...................................... 67 5 Ganzzahlige Optimierung: Branch-and-Bound 71 5.1 Erläuterung anhand eines Beispieles........................ 71 5.2 Komponenten von B&B-Verfahren........................ 74 i

INHALTSVERZEICHNIS 1 5.3 Ein Beispiel mit Binärvariablen.......................... 74 5.4 Ganzzahlige Optimierung mit GAMS....................... 79 5.5 Aufgaben...................................... 81

2 INHALTSVERZEICHNIS

1 Der Weg zur erfolgreichen Teilnahme Im Rahmen der Veranstaltung werden Modelle und Methoden zur Lösung mathematischer Entscheidungsprobleme bereitgestellt. Zur Vorbereitung der einzelnen Veranstaltungen wird zumeist auf Inhalte des Einführungsbuches [?] Domschke/Drexl (2011, 8. Aufl.) verwiesen. Diese sind vor der zugehörigen Vorlesung eigenständig durchzuarbeiten. Daher bleiben die theoretischen Ausführungen im Skript auf ein Minimum beschränkt. Die didaktische Konzeption ist auf eine beispielorientierte Herangehensweise ausgerichtet, d.h. die wesentlichen Ideen werden anhand von Zahlenbeispielen verdeutlicht. Zur Überprüfung von per Hand ermittelten Lösungen und zur Entwicklung eines tieferen Verständnisses für die formalisierten Problemstellungen ist der praktische Umgang mit der algebraischen Modellierungssprache GAMS zu erlernen. In diesem Semester wird eine webbasierte Lernumgebung (Klausurtrainer) eingesetzt, in der Aufgaben zeitlich befristet zum Lösen freigegeben werden. Sie erhalten einen Zugang über die Webadresse http://klausurtrainer.qbwl.de Richtig gelöste Aufgaben werden mit der angegebenen Punktzahl bewertet. In Abhängigkeit der Gesamtpunktzahl am Ende des Semesters werden je nach Klausurlänge maximal 3 Punkte (60 Minuten) bzw 4.5 Punkte (90 Minuten) vergeben, die zu der in der Klausur erzielten Punktzahl hinzugerechnet werden. Ferner wird empfohlen, die Grundlagen zum Aufstellen und Lösen von Gleichungssystemen aufzufrischen. Es wird darauf hingewiesen, dass zur Klausur lediglich ein nicht programmierbarer und nicht grafikfähiger Taschenrechner und Schreibmaterialien als Hilfsmittel zugelassen sind. 3

4 Kapitel 1: Der Weg zur erfolgreichen Teilnahme

2 Lineare Optimierung Vorbereitung: [?], S. 13ff 2.1 Einführendes Beispiel eines linearen Optimierungsproblems und dessen graphische Lösung Ein lineares Optimierungsproblem besitzt eine lineare Zielfunktion und ausschließlich lineare Nebenbedingungen. Zur Verdeutlichung betrachten wir ein einfaches Beladungsproblem. Beispiel 2.1 Ein Frachtführer bedient per LKW die Relation Hamburg-Kiel. Für eine Fahrt von Kiel nach Hamburg hat er noch 5 Palettenstellplätze zur Verfügung, wobei die maximale Zuladung nicht mehr als 9 Tonnen betragen darf. Über eine Frachtbörse erhält er zwei Auftragsangebote. Angebot 1 umfasst Paletten, die jeweils eine Tonne wiegen und 20 EUR an Erlösen erbringen. Auch bei Angebot 2 sind Paletten zu transportieren. Dabei wiegt eine Palette drei Tonnen und es werden 30 EUR pro Palette bezahlt. Beschränkungen hinsichtlich minimaler oder maximaler Abnahmemengen liegen nicht vor. Der Frachtführer möchte wissen, wie viele Paletten er zur Maximierung seiner Erlöse vom ersten und vom zweiten Angebot übernehmen soll. Die Fragestellung soll durch ein lineares Modell abgebildet werden. Hierzu definieren wir die folgenden (Entscheidungs-) Variablen: x 1 Anzahl zu transportierender Paletten gemäß Angebot 1 x 2 Anzahl zu transportierender Paletten gemäß Angebot 2 In Abhängigkeit der Werte von x 1 und x 2 variieren die Umsatzerlöse. Daher benötigen wir eine weitere Variable: F Umsatzerlöse in EUR Die Umsatzerlöse sind zu maximieren, was wir durch die Zielfunktion max F = 20x 1 + 30x 2 zum Ausdruck bringen. Zur graphischen Veranschaulichung in der Ebene geben wir einen Zielfunktionswert vor. So erhalten wir beispielsweise für F = 60 folgende Abbildung: 5

6 Kapitel 2: Lineare Optimierung x 2 3 2 1 0 0 1 2 3 4 5 x 1 Offensichtlich liefert jeder Punkt auf der Geraden die Werte für x 1 und x 2, bei denen sich Umsatzerlöse von F = 60 einstellen. Zum Zeichnen benötigen wir somit nur zwei verschiedene Punkte, durch die wir eine Gerade legen. Zweckmäßigerweise wählt man hierzu die Achsenschnittpunkte (0, x 2 ) und (x 1, 0), d.h. wir setzen eine Variable auf null und bestimmen dann den Wert der anderen Variablen. Für x 1 = 0 und F = 60 erhalten wir 20 0 + 30x 2 = 60. woraus x 2 = 2 unmittelbar folgt. Analog liefern x 2 = 0 und F = 60 die Gleichung 20x 1 = 60, woraus wir x 1 = 3 ableiten. Der Zielfunktionswert F = 60 führt somit zu den Wertepaaren (0,2) und (3,0). Analog bestimmen wir zusätzlich für F = 90 die Wertepaare (0, 3) und (4.5,0). Die folgende Graphik zeigt die Ergebnisse:

2.1 Einführendes Beispiel 7 x 2 3 2 1 0 0 1 2 3 4 5 x 1 Eine Veränderung des Zielfunktionswertes F bewirkt stets eine Parallelverschiebung der Zielfunktionsgeraden. In unserem Beispiel entspricht eine Verschiebung nach rechts einer Erhöhung und nach links einer Reduzierung des Zielfunktionswertes. Da wir in unserem Beispiel die Umsatzerlöse maximieren wollen, möchten wir die Zielfunktion so weit wie möglich nach rechts verschieben. Dabei sind aber Nebenbedingungen (Restriktionen) zu beachten. Beispielsweise stehen uns nur fünf Palettenstellplätze zur Verfügung, d.h. die Summe von x 1 und x 2 darf den Wert fünf nicht überschreiten. Formal schreiben wir x 1 + x 2 5. Zur graphischen Veranschaulichung dieser Restriktion betrachten wir die Gerade x 1 + x 2 = 5. Zusammen mit der Zielfunktion für F = 60 erhalten wir folgende Abbildung:

8 Kapitel 2: Lineare Optimierung x 2 5 4 3 2 1 0 0 1 2 3 4 5 x 1 Sämtliche Punkte auf und unterhalb der gepunkteten Geraden gewährleisten, dass nicht mehr als 5 Palettenstellplätze in Anspruch genommen werden. Für die Gewichtsbeschränkung formulieren wir folgende Nebenbedingung: x 1 + 3x 2 9. Wir erweitern obige Abbildung, indem wir wieder die Gleichheitssituation x 1 + 3x 2 = 9 darstellen:

2.1 Einführendes Beispiel 9 x 2 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 x 1 Auch hier gilt, dass alle Punkte, die auf oder unterhalb der gestrichelten Geraden liegen, die Nebenbedingung (Gewichtsbeschränkung) x 1 + 3x 2 9 erfüllen. Bei der graphischen (zeichnerischen) Bestimmung einer optimalen Lösung muss sichergestellt werden, dass beide Restriktionen erfüllt sind. Wir verschieben daher die Zielfunktion soweit wie möglich parallel nach rechts, wobei wir darauf achten, dass mindestens noch ein Punkt der Zielfunktionsgeraden im zulässigen Bereich (konvexer Lösungsraum) liegt. Die nachfolgende Graphik zeigt das Ergebnis dieser Vorgehensweise: x 2 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 x 1 Offensichtlich lautet somit die optimale Lösung: x 1 = 3 und x 2 = 2

10 Kapitel 2: Lineare Optimierung Setzen wir die optimalen Werte in die Zielfunktion ein, so erhalten wir den optimalen Zielfunktionswert: F = 20 3 + 30 2 = 120 Zur vollständigen Formalisierung des Entscheidungsproblems ist zu beachten, dass die Entscheidungsvariablen keine negativen Werte annehmen dürfen. Zusammengefasst haben wir folgendes Entscheidungsproblem graphisch gelöst: max F = 20x 1 + 30x 2 unter den Nebenbedingungen x 1 + x 2 5 x 1 + 3x 2 9 x 1, x 2 0. Vorweggenommen sei, dass neben der Nichtnegativität auch die Ganzzahligkeit für die Entscheidungsvariablen als Restriktion aufzunehmen wäre. Da die optimale Lösung glücklicherweise ganzzahlige Werte für die Entscheidungsvariablen liefert, können wir diesen Aspekt hier vernachlässigen. Betrachten wir noch einmal die obige Lösung: Die optimale Lösung liegt an einem Eckpunkt des konvexen Lösungsraumes. Diese Beobachtung gilt allgemein für lineare Optimierungsprobleme, die eine zulässige Lösung besitzen. Klassische Methoden zur Bestimmung einer optimalen Lösung beruhen gerade auf dieser Beobachtung, d.h. sie suchen systematisch Eckpunkte ab. Bemerkung: Darf eine Variable x j auch negative Werte gemäß der vorliegenden Problemstellung annehmen, so ist diese durch x j := x + j x j zu ersetzen, wobei x + j, x j 0 gilt. Daher brauchen wir auch nur Problemstellungen betrachten, in denen alle Variablen nichtnegativ definiert sind. 2.2 Bestimmung einer optimalen Lösung durch iteratives Lösen von Gleichungssystemen und erste Analyse Wir bleiben weiterhin bei der Problemstellung unseres Einführungsbeispieles 2.1. Die Beschränkung der Palettenstellplätze haben wir folgendermaßen abgebildet: x 1 + x 2 5

2.2 Lösungsprinzip 11 Diese Ungleichung lässt sich, ohne dass wir das Problem verändern, durch Einführen einer zusätzlichen nichtnegativ und reellwertig definierten Variablen y 1 in eine Gleichung überführen: mit x 1 + x 2 + y 1 = 5 y 1 0. Weitere Einschränkungen gibt es für y 1 nicht, d.h. y 1 ist nicht in einer anderen Restriktion und auch nicht in der Zielfunktion enthalten. Gilt beispielsweise x 1 = 1 und x 2 = 1, so wird y 1 zwangsläufig den Wert drei annehmen. Da y 1 stets den nicht genutzten Rest erfasst, bezeichnet man eine derartige Variable auch als Schlupfvariable. Die Variablen x 1 und x 2 sind dagegen die sogenannten Strukturvariablen. Analog überführen wir die Gewichtsbeschränkung in die Gleichung x 1 + 3x 2 + y 2 = 9, wobei auch für die zweite Schlupfvariable y 2 die Nichtnegativitätsbedingung y 2 0 gilt. Die Zielfunktion war von vornherein durch die Gleichung F = 20x 1 + 30x 2 gegeben. Diese ist äquivalent mit 20x 1 30x 2 + F = 0. Infolgedessen stehen in allen Gleichungen die Variablen auf der linken und die Konstanten auf der rechten Seite. Insgesamt haben wir für unser Optimierungsproblem folgendes Gleichungssystem aufgestellt: x 1 + x 2 + y 1 = 5 x 1 + 3x 2 + y 2 = 9 20x 1 30x 2 + F = 0 Mit den drei (unabhängigen) Gleichungen können wir drei Variablen (eindeutig) bestimmen. Da wir aber fünf Variablen haben, sind zwei Variablen frei wählbar. Setzen wir x 1 = 0 und x 2 = 0, so ist offensichtlich y 1 = 5, y 2 = 9 und F = 0 eine zulässige Lösung des Gleichungssystems. Die Variablen, nach denen wir das Gleichungssystem auflösen, bezeichnen wir als Basisvariablen (y 1, y 2, F ). Dagegen bezeichnen wir die Variablen, die zu Beginn auf null gesetzt worden sind, als Nichtbasisvariablen (x 1, x 2 ). Der Zielfunktionswert ist stets Basisvariable. Angemerkt sei, dass auch Basisvariablen den Wert null annehmen können. Eine Basislösung gibt die Werte der Basisvariablen (und damit auch der Nichtbasisvariablen) an. Eine Basislösung ist zulässig, wenn die Nichtnegativitätsbedingungen eingehalten werden. Obige Lösung ist daher eine zulässige Basislösung.

12 Kapitel 2: Lineare Optimierung Wir versuchen nun, Basislösungen mit einem höheren Zielfunktionswert zu bestimmen, wobei wir darauf achten, dass wir keine unzulässigen Basislösungen erzeugen. Hierzu ersetzen wir eine Basisvariable durch eine Nichtbasisvariable. Wir sprechen dabei von einem Basistausch. Grundsätzlich stellt sich die Frage, welche Variable in die Basis aufgenommen und welche Variable die Basis verlassen soll. Schauen wir uns die Zielfunktionszeile unseres Beispieles an, so stellen wir fest, dass bei einer Erhöhung von x 2 der Zielfunktionswert um 30 und bei x 1 lediglich um 20 jeweils pro Einheit ansteigt. Bei einem Maximierungsproblem ist es eine sinnvolle (aber nicht zwingend notwendige) Vorgehensweise, die Nichtbasisvariable in die Basis aufzunehmen, die den Zielfunktionswert augenscheinlich am stärksten pro Einheit ansteigen lässt. Wir wollen daher x 2 in die Basis aufnehmen. Welche Variable soll aber dafür die Basis verlassen? Grundsätzlich soll x 2 so groß wie möglich werden. Dabei müssen wir aber darauf achten, dass wir nicht in die Unzulässigkeit hineinrutschen, d.h. alle Variablen sollen weiterhin die Nichtnegativitätseigenschaft erfüllen. Da für den Zielfunktionswert die Nichtnegativitätsbedingung nicht gilt, brauchen wir die Zielfunktion nicht zu betrachten. Unter Berücksichtigung, dass x 1 weiterhin null bleibt, können wir die beiden Nebenbedingungen wie folgt umstellen: y 1 = 5 x 2 y 2 = 9 3x 2 Ein Basistausch gemäß der ersten Gleichung beinhaltet, dass y 1 für x 2 die Basis verlässt. y 1 = 0 liefert x 2 = 5. Zugleich folgt dabei aber aus der zweiten Gleichung y 2 := 9 3 5 = 6 d.h. die Basislösung wäre somit unzulässig. Dieser Basistausch ist daher ungeeignet. Eine weitere Möglichkeit ist, dass y 2 die Basis verlässt. Aus y 2 = 9 3x 2 wird ersichtlich, dass x 2 dann den Wert drei annimmt. Damit ist zugleich sichergestellt, dass weiterhin y 1 0 gilt: y 1 := 5 3 = 2 Wir ersetzen daher in der Basis y 2 durch x 2 (Basistausch). Um die genauen Werte der Basislösung zu bestimmen, ist das Gleichungssystem nach den Basisvariablen aufzulösen. Da y 1 und F bereits isoliert sind, müssen wir dafür sorgen, dass auch x 2 nur noch in einer Gleichung enthalten ist. Zweckmäßigerweise ist dies die Gleichung mit der Basisvariable, die die Basis zu verlassen hat. Hierzu multiplizieren wir zunächst einmal die zweite Gleichung mit 1/3. Daraus folgt: x 1 + x 2 + y 1 = 5 1 x 1 3 1 + x 2 + y 3 2 = 3 20x 1 30x 2 + F = 0 Die Multiplikation einer Gleichung mit einem Wert ungleich null ist eine zulässige Elementaroperation, d.h. der Informationsgehalt des Gleichungssystems bleibt erhalten. Ferner können

2.2 Lösungsprinzip 13 wir auf eine Gleichung eine andere addieren oder davon subtrahieren, ohne den Informationsgehalt zu verändern. Um nun x 2 zu isolieren, subtrahieren wir zunächst von der ersten Gleichung die zweite Gleichung, was zu 2 x 3 1 + y 1 1y 3 2 = 2 1 x 3 1 + x 2 + 1y 3 2 = 3 20x 1 30x 2 + F = 0 führt. Um x 2 auch aus der Zielfunktion zu entfernen, müssen wir das 30-fache der zweiten Gleichung auf die Zielfunktionsgleichung addieren, woraus 2 x 3 1 + y 1 1y 3 2 = 2 1 x 3 1 + x 2 + 1y 3 2 = 3 10x 1 + 10y 2 + F = 90 folgt. Da für die Nichtbasisvariablen x 1 = 0 sowie y 2 = 0 gilt, lesen wir die Lösung y 1 = 2, x 2 = 3 und F = 90 ab. Die Zielfunktionsgleichung lässt sich wie folgt umstellen: F = 90 + 10x 1 10y 2 Offensichtlich kann durch eine Erhöhung von x 1 der Zielfunktionswert weiter gesteigert werden, d.h. auch x 1 ist in die Basis aufzunehmen. Wieder ist die Basisvariable zu bestimmen, die die Basis zu verlassen hat. Hierzu analysieren wir die aktuellen Nebenbedingungen (ohne y 2 ): y 1 = 2 2 3 x 1 x 2 = 3 1 3 x 1 Daraus wird ersichtlich, dass x 1 maximal den Wert drei annehmen darf und y 1 die Basis zu verlassen hat. Durch Elementaroperationen isolieren wir nachfolgend x 1. Zunächst multiplizieren wir die erste Gleichung mit 3/2 und erhalten: x 1 + 3 2 y 1 1 2 y 2 = 3 1 3 x 1 + x 2 + 1 3 y 2 = 3 10x 1 + 10y 2 + F = 90 Um x 1 aus der zweiten und dritten Gleichung zu entfernen, subtrahieren wir das 1/3-fache der ersten Gleichung von der zweiten Gleichung und addieren das 10-fache auf die dritte Gleichung, was zu x 1 + 3 2 y 1 1 2 y 2 = 3 x 2 1 2 y 1 + 1 2 y 2 = 2 15y 1 + 5y 2 + F = 120 führt. Nachfolgend stellt sich die Frage, ob ein weiterer Basistausch angeraten ist. Die Zielfunktion liefert folgenden Zusammenhang: F = 120 15y 1 5y 2

14 Kapitel 2: Lineare Optimierung Offensichtlich bewirkt eine Erhöhung von y 1 oder y 2 eine Reduzierung des Zielfunktionswertes. Ein weiterer Basistausch würde daher nur eine Verschlechterung der Lösung nach sich ziehen. Damit ist x 1 = 3, x 2 = 2 und F = 120 eine optimale Lösung, was bereits im vorangegangenen Abschnitt graphisch gezeigt wurde. Bemerkung: Basislösungen (BL) korrespondieren zu Eckpunkten des Lösungsraumes. Bei einem Basistausch erfolgt ein Wechsel von einem Eckpunkt zu einem benachbarten Eckpunkt, wie folgende Graphik verdeutlicht: x 2 5 4 BL = Basislösung 3 2. BL 2 3. BL 1 0 1. BL 0 1 2 3 4 5 6 7 8 9 10 x 1 Erste Analyse der Gleichungssysteme: Wir schauen uns noch einmal das Ausgangsgleichungssystem x 1 + x 2 + y 1 = 5 x 1 + 3x 2 + y 2 = 9 20x 1 30x 2 + F = 0 und das Gleichungssystem der optimalen Lösung x 1 + 3 2 y 1 1 2 y 2 = 3 x 2 1 2 y 1 + 1 2 y 2 = 2 15y 1 + 5y 2 + F = 120 an. Im Ausgangsgleichungssystem steht nur in der ersten Gleichung y 1. Im zweiten Gleichungssystem steht 15y 1 in der Zielfunktion. Es muss also das 15-fache der ersten Gleichung auf die Zielfunktion addiert worden sein. Analog haben wir insgesamt das 5-fache der zweiten Gleichung auf die Zielfunktion addiert. Da wir mit F = 0 gestartet sind, gilt somit F = 0 + 15 5 + 9 5 = 75 + 45 = 120

2.3 Simplextableau 15 Ferner muss die erste Gleichung des Ausgangsgleichungssystem mit 3/2 multipliziert und das 1/2-fache der zweiten Gleichung subtrahiert worden sein, um die erste Gleichung im Gleichungssystem der optimalen Lösung zu erhalten. Diese einfachen Überlegungen erleichtern die Interpretation optimaler Lösungen. Ferner sind diese Beobachtungen von unmittelbarer Bedeutung für die Bewertung zusätzlicher Alternativen. 2.3 Lösen linearer Optimierungsprobleme per Hand unter Verwendung des Simplextableaus Die im vorangegangenen Abschnitt dargestellte Vorgehensweise entspricht grundsätzlich der Vorgehensweise des sogenannten primalen Simplex-Algorithmus. Für Handrechnungen wird ein Simplextableau verwendet. Für unser Einführungsbeispiel 1x 1 + 1x 2 + 1y 1 = 5 1x 1 + 3x 2 + 1y 2 = 9 20x 1 30x 2 + 1F = 0 erhalten wir folgendes Simplextableau: BV x 1 x 2 y 1 y 2 F b y 1 1 1 1 0 0 5 y 2 1 3 0 1 0 9 F -20-30 0 0 1 0 Die erste Spalte zeigt dabei die Basisvariablen an, d.h. die Variablen, nach denen wir das Gleichungssystem aufgelöst haben. Die letzte Spalte, b, gibt die Werte der Basisvariablen an. Die Werte unter den Variablen von der zweiten bis vorletzten Spalte des Gleichungssystems geben die Ausprägungen der Koeffizienten vor den einzelnen Variablen an, die sich zu Beginn oder nach einigen Elementaroperationen einstellen. Die letzte Zeile wird auch als F -Zeile (Zielfunktion) bezeichnet. Die Spalte einer Basisvariable muss stets ein Einheitsvektor sein; ansonsten ist das Gleichungssystem nicht richtig aufgelöst worden und wir können keine Lösung unmittelbar ablesen. Da der Zielfunktionswert stets Basisvariable ist, wird die F -Spalte grundsätzlich weggelassen, da sie stets unverändert bleibt: BV x 1 x 2 y 1 y 2 b y 1 1 1 1 0 5 y 2 1 3 0 1 9 F -20-30 0 0 0 Zunächst ist zu überprüfen, ob eine Variable in die Basis aufzunehmen ist. Der kleinste Wert in der Zielfunktionszeile unterhalb der Nichtbasisvariablen gibt darüber Auskunft. Bei einem Maximierungsproblem entscheiden wir uns für die Variable, die den Zielfunktionswert am stärksten pro Einheit ansteigen lässt. In unserem Beispiel ist die Entscheidung eindeutig, d.h. wir wählen x 2 aus. Stehen mehrere Variablen zur Auswahl, kann eine willkürlich per Zufall bestimmt werden. Die korrespondierende Spalte bezeichnen wir als Pivotspalte. Als nächstes ist eine Basisvariable zu bestimmen, die die Basis verlassen soll. Hierbei müssen wir

16 Kapitel 2: Lineare Optimierung darauf achten, dass durch einen Basistausch die Nichtnegativitätsforderung nicht verletzt wird. Hierzu dividieren wir elementweise die Werte der b-spalte mit den positiven Koeffizienten der Pivotspalte und bestimmen den minimalen Koeffizienten: min{(5/1), (9/3)} = 3 Der minimale Quotient korrespondiert zur zweiten Zeile, d.h. zur Nichtbasisvariable y 2. Diese Zeile bezeichnen wir als Pivotzeile. Also hat y 2 die Basis zu verlassen. Bevor die Rechenoperationen für den Basistausch vorgenommen werden, soll noch einmal betont werden, dass wir nur positive Koeffizienten zu betrachten haben. Angenommen, wir hätten zwischen einer Basisvariablen y 3 und einer Nichtbasisvariablen x 3, die in die Basis aufgenommen werden soll, folgende Gleichung vorliegen: bzw. y 3 4 x 3 = 8 y 3 = 8 + 4x 3 Nach dem Basistausch soll für y 3 weiterhin die Nichtnegativität gelten. Diese ist aber stets gewährleistet, wenn wir x 3 einen nichtnegativen Wert zuordnen. Daraus folgt, wenn alle Koeffizienten einer Pivotspalte kleiner gleich null sind, dass die Lösung unbeschränkt ist. Zurück zum eigentlichen Beispiel: Durch Transformationen ist der Basistausch zu bewerkstelligen. Hierzu isolieren wir x 2 aus der ersten Gleichung und aus der Zielfunktionsgleichung, d.h. wir erzeugen einen Einheitsvektor unter der neuen Basisvariablen x 2. Das Pivotelement ist der Koeffizient der Pivotzeile und Pivotspalte. Wir multiplizieren die Pivotzeile mit dem Kehrwert des Pivotelementes, d.h. mit 1/3. Um in der ersten Zeile der Pivotspalte eine null zu erhalten, müssen wir von der ersten Zeile ein Mal die transformierte Pivotzeile subtrahieren. Um eine null in der Pivotspalte der Zielfunktion zu erhalten, ist das 30-fache der transformierten Pivotzeile auf die Zielfunktion zu addieren. Das Ergebnis dieser Transformationen liefert folgende Tableauübersicht, wobei wir das Pivotelement durch eckige Klammern hervorheben: BV x 1 x 2 y 1 y 2 b y 1 1 1 1 0 5 y 2 1 [3] 0 1 9 F -20-30 0 0 0 y 1 2/ 3 0 1-1/ 3 2 x 2 1/ 3 1 0 1/ 3 3 F -10 0 0 10 90 Die F-Zeile zeigt an, dass eine Erhöhung von x 1 den Zielfunktionswert ansteigen lassen würde. Mithin wird die erste Spalte neue Pivotspalte. Die Pivotzeile erhalten wir wie folgt: min{ 2 2/3, 3 } = min{3, 9} = 3 1/3 Folglich ist die erste Zeile unsere neue Pivotzeile. Nach Durchführung der erforderlichen Tableautransformationen zur Erzeugung eines Einheitsvektors in der ersten Spalte erhalten wir folgendes Gesamtergebnis:

2.4 Lineare Optimierung mit GAMS 17 BV x 1 x 2 y 1 y 2 b y 1 1 1 1 0 5 y 2 1 [3] 0 1 9 F -20-30 0 0 0 y 1 [2/ 3] 0 1-1/ 3 2 x 2 1/ 3 1 0 1/ 3 3 F -10 0 0 10 90 x 1 1 0 3/ 2-1/ 2 3 x 2 0 1-1/ 2 1/ 2 2 F 0 0 15 5 120 Da nun alle Koeffizienten in der Zielfunktionszeile nichtnegativ sind, kann durch einen weiteren Basistausch keine weitere Zielfunktionswerterhöhung erzielt werden. Die vorliegende Lösung ist optimal. Die zugehörigen Basisvariablen entnehmen wir der ersten (BV) und deren Ausprägungen der letzten Spalte (b) des letzten Tableaus, d.h. es gilt x 1 = 3 und x 2 = 2. Ferner liefert uns die F -Zeile in der letzten Spalte den optimalen Zielfunktionswert: F = 120 2.4 Lineare Optimierung mit GAMS Wir werden nun eine Möglichkeit kennen lernen, mit der sich lineare, aber auch andere Optimierungsprobleme ohne spezielles Methodenwissen lösen lassen. Dazu eignen sich algebraische Modellierungssprachen, mit deren Hilfe Entscheidungsmodelle ähnlich der mathematischen Notation kompakt dargestellt und mittels integrierter Lösungsverfahren per Knopfdruck gelöst werden können. Wir werden in unserer Lehrveranstaltung die in den späten 70ern von einer Gruppe um Alex Meeraus an der World Bank entwickelte Modellierungssprache GAMS (General Algebraic Modeling System) vorstellen. Weitere bekannte algebraische Modellierungssprachen sind u. a.: AIMMS (Advanced Integrated Multi-dimensional Modeling Software) AMPL (A Modeling Language for Mathematical Programming) LINGO MPL (Mathematical Programming Language) OPL (Optimization Programming Language) Einen Überblick über diese und weitere Modellierungssprachen gibt [?]. Unter http://www.gams.com ist eine Demoversion von GAMS herunterladbar, mit der kleinere Beispiele gelöst werden können. Für größere Probleme ist eine lizensierte Version erforderlich.

18 Kapitel 2: Lineare Optimierung Für windowsbasierte Systeme gibt es für die Arbeit mit GAMS eine Entwicklungsumgebung, die GAMS Integrated Development Environment, kurz GAMSIDE. Gestartet wird die GAMSIDE nach der Installation standardmäßig über das Menü Start - Programme - GAMS - gamside. Beim erstmaligen Aufruf der GAMSIDE wird der Nutzer aufgefordert, ein neues Projekt anzulegen. Projektdateien erhalten die Endung.gpr. Ein Projekt sollte an einem Ort alle Dateien zusammenfassen, die miteinander in Verbindung stehen. Werden keine konkreten Angaben zum Speicherort von eventuell einzulesenden bzw. zu schreibenden Dateien gemacht, werden diese in dem Verzeichnis, in dem die aktuelle.gpr-datei gespeichert ist, gesucht bzw. abgelegt. Sämtliche Dateien, die bei der Ausführung von Programmen erzeugt werden, bspw. das im späteren Verlauf beschriebene Listing, werden ebenfalls an diesem Ort abgelegt. Weitere Projekte können über den Menüpunkt File - Project - New Project angelegt werden. Wird vor dem Beenden von GAMS das zuletzt bearbeitete Projekt nicht geschlossen, so wird dieses beim nächsten Start erneut mit allen zuletzt geöffneten Dateien geladen. Ein Projekt lässt sich aber auch über den Menüpunkt File - Project - Open Project laden. Die eigentliche Eingabe des GAMS-Skriptes erfolgt in Dateien mit der Endung.gms. Eine solche neue Eingabedatei lässt sich über den Menüpunkt File - New oder den ensprechenden Button anlegen. Das Menü Help der GAMSIDE bietet Zugriff auf umfangreiche englischsprachige Dokumente, die ebenfalls auf der oben genannten Internetseite herunter geladen werden können. Ein Dokument, welches einen umfassenden Überblick über die GAMSIDE liefert, ist über Help - docs - gams - gamside.pdf erreichbar. Unter Help - GAMS Users Guide ist ein Benutzerhandbuch, GAMS A Users Guide, zu finden. Zu empfehlen ist insbesondere dessen zweites Kapitel, das GAMS Tutorial, welches überblicksartig anhand eines Anwendungsbeispiels alle wesentlichen Aspekte der zu verwendenden Syntax kompakt darstellt, die in den nachfolgenden Kapiteln detailliert erläutert und vertieft werden. Ferner sind über File - Model Library - Open GAMS Model Library eine Fülle von Beispielen verfügbar, die geeignet sind, die vielfältigen Einsatzmöglichkeiten kennen zu lernen und auch den Umgang mit GAMS zu studieren. An dieser Stelle werden wir die Syntax von GAMS weiterhin an dem einführenden Beispiel 2.1 in seinen wesentlichen Grundzügen vorstellen. Detailliertere Informationen sind den separat zum Download bereitgestellten GAMS-(Übungs-)Unterlagen und dem Users Guide zu entnehmen. Zunächst betrachten wir eine sehr einfache und zugleich sehr problemnahe Umsetzung des Entscheidungsproblems in GAMS-Syntax, welches an dieser Stelle noch einmal aufgeführt sei: max F = 20x 1 + 30x 2 unter den Nebenbedingungen x 1 + x 2 5 x 1 + 3x 2 9 x 1, x 2 0 Grundsätzlich gilt, dass bspw. jede Menge, jede Variable und jeder Parameter (Entities), der z.b. in den Restriktionen verwendet wird, zunächst deklariert werden muss, womit man erklärt,

2.4 Lineare Optimierung mit GAMS 19 dass etwas existiert. Die Deklaration ist für jedes Entity identisch und besteht aus der Angabe des Typs des Entities und der Vergabe eines eindeutigen Namens (Bezeichners). Jeder Bezeichner muss mit einem Buchstaben beginnen, dem bis zu 30 weitere Buchstaben oder Zeichen folgen können. Dabei wird nicht zwischen Groß- und Kleinschreibung unterschieden. Gleichnamige Bezeichner dürfen nicht für unterschiedliche Entities verwendet werden. Zusätzlich kann nach jeder Deklaration eine Beschreibung in Form eines Kommentars angefügt werden, um eine bessere Nachvollziehbarkeit zu gewährleisten. Allgemein erfolgt die Deklaration nach folgendem Schema: TypDesEntities NameDesEntities OptionalerKommentar ; Für die unterschiedlichen Entities gibt es fest stehende Schlüsselworte, auf die wir im Folgenden eingehen werden. Die Deklaration gleicher Entities kann auch zusammengefasst werden, indem nach dem Schlüsselwort die einzelnen Entities gleichen Typs, jeweils getrennt durch Komma oder Zeilenumbruch, aufgezählt werden. Somit ergibt sich: TypDesEntities NameDesErstenEntities OptionalerKommentar NameDesZweitenEntities OptionalerKommentar ; Dabei können wir Leerzeichen und Leerzeilen beliebig für eine bessere Lesbarkeit einsetzen. Eine Anweisung sollte wie oben auch immer durch ein Semikolon abgeschlossen werden, wobei angemerkt sei, dass nicht alle Semikolons zwingend erforderlich sind. Nach der Deklaration kann dem Entity ein Wert zugewiesen oder eine bestimmte mathematische Form gegeben werden, wobei dies in einigen Fällen in einem Schritt zusammen mit der Deklaration oder beides separat erfolgen kann, worauf wir im Einzelnen eingehen werden. Belassen wir die vorgegebenen Daten als Konstanten, so finden sich in unserem Modell lediglich Variablen. Die Deklaration von Variablen besteht aus der Angabe des Typs Variable und ihres Wertebereichs sowie der Vergabe eines eindeutigen Namens. Da die Variablen x 1 und x 2 nichtnegativ definiert sind, d.h. nur einen Wert größer oder gleich 0 annehmen dürfen, handelt es sich um positive variables und wir deklarieren sie wie folgt: positive variable x_1 Variable x_1 ; positive variable x_2 Variable x_2 ; Wobei wir wahlweise auch schreiben können: positive variables x_1 Variable x_1 x_2 Variable x_2 ; Diese Variante werden wir im Folgenden bevorzugen. Ob wir variable oder variables schreiben, ist wie bei allen Schlüsselwörtern für Entities frei wählbar. Wir werden die Einzahl verwenden, wenn wir ein Entity deklarieren, bei mehreren Entities die Mehrzahl. Eine weitere Variable ist der Zielfunktionswert, dessen Wertebereich jedoch unbeschränkt ist. Daher deklarieren wir den Zielfunktionswert als freie Variable (free variable bzw. variable): variable F Zielfunktionswert ;

20 Kapitel 2: Lineare Optimierung Nun können wir die Zielfunktion und die Nebenbedingungen in GAMS überführen. Dies erfolgt immer in zwei Schritten. Zunächst müssen wir diese Un- bzw. Gleichungen ebenso wie Mengen, Parameter und Variablen deklarieren, indem wir ihnen den Typ equation zuweisen und einen eindeutigen Namen geben, den wir um einen (optionalen) Kommentar ergänzen: equations zielfunktion Zielfunktion stellplaetze Stellplatzrestriktion gewicht Gewichtsrestriktion ; Erst in einem zweiten Schritt können wir die eigentliche mathematische (Un-) Gleichung angeben, indem wir hinter den Namen der Equation zwei Punkte setzen, gefolgt von der mathematischen Formulierung: zielfunktion.. F =e= 20 * x_1 + 30 * x_2 ; stellplaetze.. x_1 + x_2 =L= 5 ; gewicht.. x_1 + 3 * x_2 =L= 9 ; Gleichheitszeichen drücken wir dabei durch =e=, kleiner-gleich-zeichen durch =L= und größer-gleich-zeichen durch =G= aus. Bisher liegt jedoch noch kein Modell vor. Dieses müssen wir, um es anschließend lösen zu können, erst deklarieren, d.h. ein Entity vom Typ model mit einem eindeutigen Namen deklarieren. Anschließend werden die Equations, die in dem Modell enthalten sind, dem Modell zugewiesen: model LKW LKWBeladung /zielfunktion, stellplaetze, gewicht/ ; Sollen, wie in unserem Fall, alle Equations enthalten sein, so lässt sich vereinfachend schreiben: model LKW LKWBeladung /all/ ; Der Vorteil der Modelldeklaration liegt darin, dass sich in einer Eingabedatei somit auch mehrere Modelle mit unterschiedlichen Nebenbedingungen erstellbar und separat lösbar sind. Damit ist das mathematische Modell nun in GAMS-Quellcode überführt. Es fehlt jedoch noch eine Anweisung, die einen geeigneten Solver damit beauftragt, dieses Modell mit Hilfe der zur Verfügung stehenden Lösungsverfahren zu lösen. Dies erfolgt über die solve-anweisung, die aus drei Teilen besteht. Der erste Teil enthält das Schlüsselwort solve und dahinter den Namen des zu lösenden Modells. Der zweite Bestandteil gibt dem Solver darüber Auskunft, welche Richtung die Zielfunktion aufweist (maximizing oder minimizing) und welche Variable den Zielfunktionswert darstelllt. Der letzte Teil trifft Aussagen zur Art des Modells. Sind keine diskreten Variablen, also binäre oder ganzzahlige (integer) Variablen enthalten, handelt es sich um ein lp (linear programming). Die Anweisung lautet damit wie folgt: solve LKW maximizing F using lp ; Vollständig sieht das GAMS-Skript demnach folgendermaßen aus:

2.4 Lineare Optimierung mit GAMS 21 positive variables x_1 Variable x_1 x_2 Variable x_2 ; variable F Zielfunktionswert ; equations zielfunktion Zielfunktion stellplaetze Stellplatzrestriktion gewicht Gewichtsrestriktion ; zielfunktion.. F =E= 20 * x_1 + 30 * x_2 ; stellplaetze.. x_1 + x_2 =L= 5 ; gewicht.. x_1 + 3 * x_2 =L= 9 ; model LKW LKWBeladung /zielfunktion, stellplaetze, gewicht/ ; solve LKW maximizing F using lp ; Durch Knopfdruck auf das Icon Run bzw. über das Menü File - Run in der GAMSIDE kann die Ausführung des GAMS-Skriptes gestartet werden. Der Fortschritt beim Lösen des Modells wird in einer Logfile angezeigt, die den Namen der.gms-datei und die Endung.log erhält. Daneben wird eine zweite Datei erzeugt, welche den ebenfalls Namen der GAMS-Datei, aber die Dateiendung.lst erhält. Dieses Listing enthält zunächst den Quellcode aus der.gms- Datei, das so genannte ECHO PRINT: 1 positive variables 2 x_1 Variable x_1 3 x_2 Variable x_2 ; 4 5 variable 6 F Zielfunktionswert ; 7 8 equations 9 zielfunktion Zielfunktion (Erlösmaximierung) 10 stellplaetze Stellplatzrestriktion 11 gewicht Gewichtsrestriktion ; 12 13 zielfunktion.. F =E= 20 * x_1 + 30 * x_2 ; 14 stellplaetze.. x_1 + x_2 =L= 5 ; 15 gewicht.. x_1 + 3 * x_2 =L= 9 ; 16 17 model LKW LKWBeladung /zielfunktion, stellplaetze, gewicht/ ; 18 19 solve LKW maximizing F using lp ; Im sich anschließenden EQUATION LISTING werden die im Modell enthaltenen Equations aufgeführt. Diese werden dabei in eine solche Form gebracht, dass alle Konstanten jeweils auf der rechten Seite zusammengefasst und alle Terme mit Variablen und deren Koeffizienten auf die linke Seite gebracht werden, falls diese Form nicht bereits vorliegt: ---- zielfunktion =E= Zielfunktion (Erlösmaximierung)

22 Kapitel 2: Lineare Optimierung zielfunktion.. - 20*x_1-30*x_2 + F =E= 0 ; (LHS = 0) ---- stellplaetze =L= Stellplatzrestriktion stellplaetze.. x_1 + x_2 =L= 5 ; (LHS = 0) ---- gewicht =L= Gewichtsrestriktion gewicht.. x_1 + 3*x_2 =L= 9 ; (LHS = 0) LHS (Left-hand-side) gibt dabei über den Wert der linken Seite der jeweiligen Equation vor dem Lösen des Modells Auskunft. Da zu Beginn alle Variablen den Wert 0 besitzen, ist dieser Wert jeweils 0. Im darauf folgenden COLUMN LISTING werden die Koeffizienten vor den einzelnen Variablen in den Equations aufgelistet. So kommt bspw. der Zielfunktionswert, die Variable F, nur in der Equation zielfunktion mit dem Koeffizienten 1 vor. Zu jeder Variable wird darüber hinaus in Klammern die untere Grenze (.LO = LOWER BOUND) und die obere Grenze (.UP = UPPER BOUND) ihres zulässigen Wertebereichs sowie der initiale Wert (.L) angegeben. Dabei steht +INF für positiv unendlich, -INF für negativ unendlich: ---- x_1 Variable x_1 x_1 (.LO,.L,.UP = 0, 0, +INF) -20 zielfunktion 1 stellplaetze 1 gewicht ---- x_2 Variable x_2 x_2 (.LO,.L,.UP = 0, 0, +INF) -30 zielfunktion 1 stellplaetze 3 gewicht ---- F Zielfunktionswert F (.LO,.L,.UP = -INF, 0, +INF) 1 zielfunktion Die MODEL STATISTICS gibt über die Größe des Modells Auskunft: MODEL STATISTICS BLOCKS OF EQUATIONS 3 SINGLE EQUATIONS 3 BLOCKS OF VARIABLES 3 SINGLE VARIABLES 3 NON ZERO ELEMENTS 7 Das SOLVE SUMMARY fasst den Status des Solvers und des Modells zusammen. In unserem Fall erkennen wir, dass der (von uns auch im Weiteren immer wieder verwendete, für lp standardmäßig voreingestellte) Solver Cplex die optimale Lösung für unser lp gefunden hat.

2.4 Lineare Optimierung mit GAMS 23 Wir erhalten auch hier den optimalen Zielfunktionswert (OBJECTIVE VALUE bzw. Objective) 120: S O L V E S U M M A R Y MODEL LKW OBJECTIVE F TYPE LP DIRECTION MAXIMIZE SOLVER CPLEX FROM LINE 18 **** SOLVER STATUS 1 NORMAL COMPLETION **** MODEL STATUS 1 OPTIMAL **** OBJECTIVE VALUE 120.0000 RESOURCE USAGE, LIMIT 0.031 1000.000 ITERATION COUNT, LIMIT 2 10000 Optimal solution found. Objective : 120.000000 Der Zielfunktionswert und die Werte der anderen Variablen sind im sich anschließenden SOLVER SOLUTION REPORT dem LEVEL der entsprechenden Variable VAR zu entnehmen, also x 1 = 3 und x 2 = 2. LOWER und UPPER bei den Variablen geben nochmals deren zulässigen Wertebereich an, wobei ein Punkt (.) bedeutet, dass es sich um den Wert 0 handelt. LOWER und UPPER bei den einzelnen Equations EQU zeigen entsprechend den zulässigen Wertebereich der linken Seite der Un- bzw. Gleichung nach der evtl. notwendigen Umformung in die bereits beschriebene Form an, LEVEL gibt über den Wert der linken Seite in der Lösung Auskunft. Wir erkennen, dass die beiden Nebenbedingungen vollkommen ausgeschöpft sind. Zu den MARGINALs sei auf Abschnitt 2.5 verwiesen. LOWER LEVEL UPPER MARGINAL ---- EQU zielfunkt~... 1.000 ---- EQU stellplae~ -INF 5.000 5.000 15.000 ---- EQU gewicht -INF 9.000 9.000 5.000 zielfunktion stellplaetze gewicht Zielfunktion Stellplatzrestriktion Gewichtsrestriktion LOWER LEVEL UPPER MARGINAL ---- VAR x_1. 3.000 +INF. ---- VAR x_2. 2.000 +INF. ---- VAR F -INF 120.000 +INF. x_1 Variable x_1 x_2 Variable x_2 F Zielfunktionswert Eine gute Möglichkeit, um sich diese Werte einzeln im Listing anzeigen zu lassen, bietet die display-anweisung. Um den jeweiligen Wert der Variablen ausgeben zu lassen, würde man bspw. formulieren: display F.l, x_1.l, x_2.l ;

24 Kapitel 2: Lineare Optimierung Diese Anweisung ist hinter die solve-anweisung zu setzen und führt zu folgender Ausgabe im Listing: ---- 22 VARIABLE F.L = 120.000 Zielfunktionswert VARIABLE x_1.l = 3.000 Variable x_1 VARIABLE x_2.l = 2.000 Variable x_2 Werte werden nur dann angezeigt, wenn sie von 0 verschieden sind. Gleiches gilt ebenfalls für LOWER BOUND (.lo), UPPER BOUND (.up) und MARGINAL (.m). Das REPORT SUMMARY beinhaltet Angaben zu den nichtoptimalen, nicht lösbaren und unbeschränkten Zeilen bzw. Spalten: **** REPORT SUMMARY : 0 NONOPT 0 INFEASIBLE 0 UNBOUNDED Zum Abschluss wird in einer FILE SUMMARY der Speicherort der Eingabe- und Ausgabedatei angezeigt: Input Output D:\Bsp2_1.gms D:\Bsp2_1.lst Es ist offensichtlich, dass die Form, in der wir unser Problem in GAMS modelliert haben, nur für sehr kleine Probleminstanzen geeignet ist. Ein weiterer Nachteil liegt darin, dass bei Änderung der zugrunde liegenden Daten, z. B. der Umsatzerlöse, direkt Änderungen in der Zielfunktion oder den Restriktionen vorgenommen werden müssen. Aus diesem Grund ist es sinnvoller, die konkreten Daten von der Modellformulierung zu trennen, d.h. wir formulieren ein allgemeines Modell, in dem wir alle vorgegebenen Daten durch Symbole ersetzen. So könnte das allgemeine Modell für unser Beispiel 2.1 dann wie folgt aussehen: Mengen und Indices J Parameter e j g j G P Variablen x j Menge der Auftragsangebote (Index: j mit j {1,..., J }) Umsatzerlös pro Palette des Angebotes j Gewicht einer Palette des Angebotes j Gewichtskapazität Palettenstellplatzkapazität Anzahl zu transportierender Paletten des Angebotes j Modellformulierung max F = j J e j x j (2.1)

2.4 Lineare Optimierung mit GAMS 25 unter den Nebenbedingungen x j P (2.2) j J g j x j G j J (2.3) x j 0 j J (2.4) Erläuterungen: (2.1) maximiert den Umsatzerlös. (2.2) berücksichtigt die Anzahl aufnehmbarer Paletten (Stellplatzrestriktion). (2.3) gewährleistet, dass das zulässige Gewicht nicht überschritten wird (Gewichtsrestriktion). (2.4) gibt den Wertebereich der Variablen x j an, wobei noch einmal angemerkt sei, dass wir keine Ganzzahligkeit fordern müssen, da wir für unser Datenbeispiel zufällig eine ganzzahlige Lösung erhalten. Allgemein wäre Ganzzahligkeit natürlich zu fordern. Um dieses Modell in GAMS umzusetzen und für die gegebenen Daten zu lösen, müssen wir die zusätzlich verwendeten Mengen und Parameter deklarieren. Da wir die Menge j als Index für einige Parameter benötigen, müssen wir diese vorher deklarieren. Die Deklaration von Mengen erfolgt über das Schlüsselwort set. Die Deklaration können wir mit der Angabe der Daten, den in dieser Menge enthaltenen Elementen, kombinieren, indem wir die Element in Schrägstriche setzen und durch Komma oder Zeilenumbruch trennen: set j Menge der Auftragsangebote /1, 2/ ; Parameter mit einem Index werden über das Schlüsselwort parameter deklariert, wobei der Index in Klammern hinter den Namen des Parameters gesetzt wird. Sollte es mehrere Indices geben, so werden diese durch Komma getrennt. Auch hier kann die Dateneingabe gleich anschließend eingebunden in Schrägstrichen vorgenommen werden: parameters e(j) Erlös des Auftrages j /1 20, 2 30/ g(j) Ladegewicht des Auftrages j /1 1, 2 3/ ; Parameter, die keinen Index besitzen, also Konstanten, können als scalar deklariert werden. Die Angabe des Wertes der Konstante kann in Schrägstrichen erfolgen: scalars GG Gewichtskapazität /9/ P Palettenstellplatzkapazität /5/ ; Dabei müssen wir darauf achten, dass wir keinen Bezeichner wie z. B. das g doppelt verwenden. Verändert werden muss ebenfalls die Deklaration der Variable:

26 Kapitel 2: Lineare Optimierung positive variable x(j) Variable x_j ; Unverändert bleibt die Deklaration des Zielfunktionswertes und der Un- bzw. Gleichungen. Lediglich die Definition der Equations ist entsprechend anzupassen: zielfunktion.. F =E= sum(j, e(j)*x(j)) ; stellplaetze.. sum(j, x(j)) =L= P ; gewicht.. sum(j, g(j)*x(j)) =L= GG ; Die Summenfunktion wird über das Schlüsselwort sum eingeleitet, dem eine öffnende Klammer, der Summationsindex, ein Komma, der summierende Term und eine abschließende Klammer folgt. Sollte es mehrere Summationsindizes geben, so werden diese zusammen in Klammern gesetzt und jeweils durch ein Komma voneinander getrennt. Die Modelldeklaration und -definition sowie der Aufruf des Solvers ändert sich nicht: model LKW LKWBeladung /all/ ; solve LKW LKWBeladung maximizing F using lp ; Schauen wir uns nun noch einmal das EQUATION LISTING an, dann sehen wir, dass die allgemein formulierten Equations mit den angegebenen Daten ausgestaltet wurden: ---- zielfunktion =E= Zielfunktion (Erlösmaximierung)) zielfunktion.. - 20*x(1) - 30*x(2) + F =E= 0 ; (LHS = 0) ---- stellplaetze =L= Stellplatzrestriktion stellplaetze.. x(1) + x(2) =L= 5 ; (LHS = 0) ---- gewicht =L= Gewichtsrestriktion gewicht.. x(1) + 3*x(2) =L= 9 ; (LHS = 0) Anzumerken ist an dieser Stelle, dass auch Equations indiziert werden können. In diesem Fall werden pro allgemein formulierter Equation für die ersten drei Elemente der Menge mit den gegebenen Daten ausformulierten Equations angezeigt, was sich jedoch ändern lässt. Ähnliches gilt auch für das COLUMN LISTING. Für detailliertere Informationen und weitere Aspekte wie bspw. andere Möglichkeiten der Datenangabe, die Berücksichigung von Bedingungen, das Abbilden von Schleifen oder die Gestaltung von Ausgabedateien sei auf die GAMS-(Übungs-)Unterlagen sowie den Users Guide verwiesen. 2.5 Duale Simplexmethode - Reoptimierung zur Berücksichtigung einer zusätzlichen Nebenbedingung Wir betrachten weiterhin das einführende Beispiel 2.1. Angenommen, aus ladungstechnischen Gründen soll die Anzahl der Paletten des ersten Angebotes nicht größer als die Anzahl der Paletten des zweiten Angebotes sein. Diese Forderung führt zu der zusätzlichen Nebenbedingung x 1 x 2.

2.5 Duale Simplexmethode 27 Unter Verwendung einer weiteren Schlupfvariablen bilden wir die Gleichung x 1 x 2 + y 3 = 0. Insgesamt ist daher folgendes Ausgangsgleichungssystem heranzuziehen: x 1 + x 2 + y 1 = 5 x 1 + 3x 2 + y 2 = 9 x 1 x 2 + y 3 = 0 20x 1 30x 2 + F = 0 Mit Hilfe des Simplextableaus lösen wir die neue Problemstellung: BV x 1 x 2 y 1 y 2 y 3 b y 1 1 1 1 0 0 5 y 2 1 [3] 0 1 0 9 y 3 1-1 0 0 1 0 F -20-30 0 0 0 0 y 1 2/ 3 0 1-1/ 3 0 2 x 2 1/ 3 1 0 1/ 3 0 3 y 3 [4/ 3] 0 0 1/ 3 1 3 F -10 0 0 10 0 90 y 1 0 0 1-1/ 2-1/ 2 1/ 2 x 2 0 1 0 1/ 4-1/ 4 9/ 4 x 1 1 0 0 1/ 4 3/ 4 9/ 4 F 0 0 0 25/ 2 15/ 2 225/ 2 Die graphische Veranschaulichung x 2 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 x 1

28 Kapitel 2: Lineare Optimierung zeigt, dass die Restriktion x 1 + x 2 5 (gepunktete Gerade) weggelassen werden kann. Ferner ist die Lösung nicht umsetzbar, da die Lösung nicht ganzzahlig ist. Um beispielsweise für x 2 einen ganzzahligen Wert zu erhalten, könnten wir das Problem in zwei Teilprobleme zerlegen. Im ersten Teilproblem nehmen wir die Restriktion x 2 2 auf. Anschließend vergleichen wir die Lösung mit der Lösung (2. Teilproblem), die wir erhalten, wenn wir stattdessen x 2 3 als Restriktion einfügen. Diese Vorgehensweise kommt insbesondere im Rahmen der Lösung ganzzahliger Optimierungsprobleme zum Einsatz. Das jeweilige Durchrechnen mit einer dieser Restriktionen muss aber nicht sowohl die Ganzzahligkeit von x 2 als auch sofort die Ganzzahligkeit von x 1 garantieren, so dass womöglich weitere Restriktionen einzufügen sind; wir werden im Rahmen der ganzzahligen Optimierung darauf zurückkommen. Nach Einfügen einer Restriktion ist das Optimierungsproblem erneut zu lösen. Starten wir dabei wieder von vorne mit einem veränderten Ausgangstableau, so stellt dies insbesondere bei großen linearen Optimierungsproblemen einen enormen Rechenaufwand dar. Dieser lässt sich reduzieren, wenn wir auf der bestehenden optimalen Zwischenlösung aufbauen. Die Vorgehensweise wollen wir erneut anhand der optimalen Lösung BV x 1 x 2 y 1 y 2 b x 1 1 0 3/ 2-1/ 2 3 x 2 0 1-1/ 2 1/ 2 2 F 0 0 15 5 120 unseres Ausgangsproblems 2.1 und der zusätzlich aufzunehmenden Restriktion x 1 x 2 erläutern. Dazu ist die Gleichung x 1 x 2 + y 3 = 0 aufzunehmen. Diese fügen wir nun, anstatt das ergänzte LOP zu lösen, einfach in unser Optimaltableau wie folgt ein: BV x 1 x 2 y 1 y 2 y 3 b x 1 1 0 3/ 2-1/ 2 0 3 x 2 0 1-1/ 2 1/ 2 0 2 y 3 1-1 0 0 1 0 F 0 0 15 5 0 120

2.6 Zusätzliche Alternative 29 Offensichtlich sind die Basisvariablen x 1 und x 2 durch entsprechende Transformationen noch aus der neuen Restriktion zu entfernen, was zu folgendem Ergebnis führt: BV x 1 x 2 y 1 y 2 y 3 b x 1 1 0 3/ 2-1/ 2 0 3 x 2 0 1-1/ 2 1/ 2 0 2 y 3 0 0 [-2] 1 1-1 F 0 0 15 5 0 120 Damit liegt eine Basislösung vor, die hinsichtlich der Nichtnegativitätsbedingung nicht zulässig ist, da y 3 = 1 gilt. y 3 ist daher aus der Basis zu entfernen. In die Basis ist eine Variable aufzunehmen, die durch den Basistausch einen nichtnegativen Wert annehmen wird. In Frage kommen hier nur Nichtbasisvariablen, die in der Pivotzeile einen negativen Koeffizienten haben, da durch die Multiplikation der Pivotzeile mit dem Kehrwert des Koeffizienten die rechte Seite und somit auch die neue Basisvariable einen positiven Wert annehmen wird. Als Kandidat kommt daher nur y 1 in Frage. Nach Durchführung der Elementaroperationen erhalten wir folgendes bereits bekanntes Optimaltableau: BV x 1 x 2 y 1 y 2 y 3 b x 1 1 0 0 1/ 4 3/4 9/4 x 2 0 1 0 1/ 4-1/4 9/4 y 1 0 0 1-1/2-1/2 1/2 F 0 0 0 25/2 15/2 225/2 Diese Vorgehensweise wird auch als Reoptimierung bezeichnet. Ferner spricht man auch von der dualen Simplexmethode, wenn wir aufgrund der Nichtnegativität zuerst die Pivotzeile und dann die Pivotspalte auswählen. Sind mehrere Basisvariablen negativ, so wird üblicherweise die mit dem kleinsten Wert ausgewählt, d.h. diejenige, die am stärksten die Nichtnegativitätsbedingung verletzt. Durch den Basistausch wird sich der Zielfunktionswert verschlechtern. Daher wird diejenige Variable in die Basis aufgenommen, die pro Einheit den Zielfunktionswert am geringsten verschlechtert. 2.6 Berücksichtigung zusätzlicher Alternativen Wir betrachten erneut die Ausgangssituation unseres Einführungsbeispieles 2.1. Kurzfristig geht ein drittes Angebot ein: Pro Palette werden 24 EUR in Aussicht gestellt, wobei jede Palette 2 Tonnen wiegt. Definieren wir zusätzlich die Strukturvariable x 3 Anzahl zu transportierender Paletten gemäß des dritten Angebotes, so haben wir die Problemstellung max F = 20x 1 + 30x 2 + 24x 3 unter den Nebenbedingungen x 1 + x 2 + x 3 5

30 Kapitel 2: Lineare Optimierung x 1 + 3x 2 + 2x 3 9 x 1, x 2, x 3 0 zu lösen. Unter Verwendung des Simplextableaus liefert der primale Simplex-Algorithmus folgendes Ergebnis: BV x 1 x 2 x 3 y 1 y 2 b y 1 1 1 1 1 0 5 y 2 1 [3] 2 0 1 9 F -20-30 -24 0 0 0 y 1 [2/ 3] 0 1/ 3 1-1/ 3 2 x 2 1/ 3 1 2/ 3 0 1/ 3 3 F -10 0-4 0 10 90 x 1 1 0 1/ 2 3/ 2-1/ 2 3 x 2 0 1 1/ 2-1/ 2 1/ 2 2 F 0 0 1 15 5 120 Dem Ergebnis entnehmen wir, dass das dritte Angebot nicht zu einer verbesserten Lösung führt. Insbesondere bei mehreren zusätzlichen Angeboten (Alternativen) kann es relativ aufwendig sein, jedesmal das entsprechende lineare Optimierungsproblem zu lösen. Ob eine zusätzliche Alternative für einen Basistausch in Frage kommt, lässt sich auch ohne das Durchrechnen der Problemstellung beantworten: Bekanntermaßen ist das 15-fache der ersten Zeile und das 5-fache der zweiten Zeile des Ausgangstableaus auf die Zielfunktion des Optimaltableaus addiert worden. Dies folgt aus den Eintragungen in der F -Zeile unter den Schlupfvariablen, die daher auch als Simplexmultiplikatoren bezeichnet werden. Wir definieren: c j Zielfunktionskoeffizient der Variablen x j. c j aktueller Wert in der Zielfunktionszeile des Simplextableaus unter der Variablen x j. Im Ausgangstableau gilt stets c j = c j, woraus c j = c j folgt. Im Optimaltableau lesen wir beispielsweise c 3 = 1 ab. Dieser Wert ist wie folgt entstanden: c 3 = 24 + 1 15 + 2 5 = 1 Bezeichnen wir mit π 1 und π 2 die zur ersten und zweiten Zeile korrespondierenden Simplexmultiplikatoren sowie mit a ij den Koeffizienten in der i-ten Zeile und j-ten Spalte, so gilt bzw. c j = c j + a 1j π 1 + a 2j π 2 c j = c j a 1j π 1 a 2j π 2. Dabei ist zu beachten, dass die Koeffizienten a ij des Ausgangsproblems verwendet werden. Die Simplexmultiplikatoren liegen nach jedem Basistausch vor.