Technische Universit¨at M¨unchen SS 2010 Institut f¨ur Informatik
Prof. Dr. H.-J. Bungartz Prof. Dr. T. Huckle Kristof Unterweger
Perlen der Informatik II
Sommersemester 2010 L¨ osung 5
Lineare Programmierung und der Simplex-Algorithmus
In der Linearen Programmierung bzw. Linearen Optimierung spielt der Simplex-Algorithmus eine entscheidende und interessante Rolle. In diesem Aufgabenblatt werden wir uns mit linearen Programmen im Allgemeinen und dem Simplex-Algorithmus zur L¨osung sel- biger im Speziellen besch¨aftigen.
Aufgabe 1: Lineare Programmierung
1.1 Standard- und Schlupfform
Gegeben sei folgendes lineares Programm:
minimiere −2x1+x2 −2x3 unter den Nebenbedingungen x1+x3 = 4
2x1−x2 ≥0 x ≥0
• Uberf¨¨ uhre dieses Programm in die Standard- und in die Schlupfform.
• Angenommen man hat ein lineares Programm mit n Variablen und m Nebenbe- dingungen. Wie viele Variablen und Nebenbedingungen k¨onnen maximal in der Standardform auftreten? Wie viele in der Schlupfform?
L¨osung:
Standardform:
maximiere 2x1−x2+ 2x3
x1+x03−x003−4≥0
−x1−x03+x003+ 4 ≥0 2x1−x2 ≥0
x1, x2, x03, x003 ≥0 Schlupfform:
maximiere 2x1−x2+ 2x3 x1+x03−x003−4 = s1
−x1−x03+x003+ 4 =s2
2x1−x2 =s3
x1, x2, x03, x003, s1, s2, s3 ≥0
Standardform: Wenn f¨ur allem Variablen keine Nichtnegativit¨atsbedingungen angegeben sind, dann werden bei der ¨Uberf¨uhrung in die Standardform m weitere Variablen und 2m weitere Nebenbedingungen (Nichtnegativit¨atsbed.) eingef¨uhrt.
Eine Gleichungsnebenbedingungen wird in zwei Ungleichungsnebenbed. umgewandelt.
Sollten alle n Nebenbed. Gleichungsnebenbed. sein, f¨uhrt das zu n weiteren Nebenbedin- gungen.
Insgesamt kann es also zu2mVariablen und 2n+ 2mNebenbedingungen kommen, wobei von letzteren 2m Nichtnegativit¨atsbed. sind.
Schlupfform: F¨ur jede Nebenbedingung in der Standardform, die keine Nichtnegativit¨atsbed.
ist, wird eine weitere Variable und daf¨ur eine weitere Nichtnegativit¨atsbedingung an- gelegt. Insgesamt kann es also zu 2n+ 2m Variablen sowie 4n+ 2m Nebenbedingungen kommen, davon 2n+ 2m Nichtnegativit¨atsbed.
1.2 L¨ osbarkeit
Wir haben gesehen, dass Probleme in der Linearen Programmierung durch Ungle- ichungen eingeschr¨ankt werden. In vielen F¨allen bildet sich dadurch ein endlicher L¨osungsraum, der durch die Ungleichungen beschr¨ankt wird. Tats¨achlich kann es allerd- ings auch zu F¨allen kommen, in denen die Ungleichungen keinen endlichen L¨osungsraum erzeugen.
• Zeige dass folgende Nebenbedingungen zu einem nicht-l¨osbaren linearen Programm f¨uhren:
x1+x2 ≤2
−2x1−2x2 ≤ −10 x1, x2 ≥0
L¨osung: Stellen wir die ersten beiden Nebenbedingungen nach x1 um, erhalten wir
x1 ≤2−x2 x1 ≥5−x2
damit k¨onnen wir die Reihenfolge 5−x2 ≤x1 ≤2−x2
aufstellen, was zu 5−x2 ≤2−x2
f¨uhrt. Addieren wir x2, erhalten wir den Wiederspruch 5≤2.
• Zeige, dass folgende Nebenbedingungen zu einem unbeschr¨ankten linearen Pro-
−2x1+x2 ≤ −1 x1−2x2 ≤ −2 x1, x2 ≥0
• Finde eine Zielfunktion, so dass es trotz unbeschr¨anktem L¨osungsraum eine endliche L¨osung f¨ur das lineare Programm gibt.
L¨osung: Diesmal stellen wir die Ungleichungen nach x2 um:
x2 ≤2x1−1 x2 ≥ x21 + 1
Wenn wir die beiden Ungleichungen zusammenfassen ergibt sich:
x1
2 + 1≤x2 ≤2x1−1 und damit
x1
2 + 1≤2x1−1 x1 ≤4x1−4 x1 ≥ 43
Damit sind die Nebenbedingungen f¨ur allex1 ≥ 43 und einx2 aus dem sich dann ergeben- den Bereich x21 + 1≤x2 ≤2x1−1 erf¨ullt.
Nachdem die Ungleichungen schon nach x2 aufgel¨ost wurden, kann man sie einfach als Geraden zeichnen:
Hier zeigen die roten Linien die Ungleichungen, w¨ahrend der blaue Bereich den g¨ultigen L¨osungsraum f¨ur das lineare Programm darstellt. Beispielsweise vervollst¨andigt die Ziel- funktion maximiere−x1, bei der die Isogewinngeraden parallel zurx2-Achse liegen, das lineare Programm, womit dies sein Optimum im Schnittpunkt der beiden Geraden, bei (43,53) hat.
1.3 K¨ urzeste-Pfad-Suche
Zur Berechnung von k¨urzesten Pfaden in Graphen gibt es eine Vielzahl von Algorithmen.
Interessanterweise l¨asst sich dieses Problem auch als lineares Programm ausdr¨ucken.
Hierzu betrachten wir den Bellman-Ford-Algorithmus:
1 Bellman−Ford (G, w, s ) 2 i n i t i a l i s i e r e ( s )
3 f o r i =1 b i s |V[G ]| − 1 :
4 f u e r a l l e Kanten ( u , v ) aus E [G ] : 5 r e l a x i e r e ( u , v , w)
6 f u e r a l l e Kanten ( u , v ) aus E [G ] : 7 f a l l s d [ v ] > d [ u ] + w( u , v ) : 8 r e t u r n f a l s e
9 r e t u r n t r u e
In diesem St¨uck Pseudocode bezeichnetwdie Gewichtungsfunktion, die den Kanten des Graphen ein Gewicht zuweist. G ist der Graph selber, wobei V[G] die Knoten und E[G]
die Kanten von G liefert. s ist der Startknoten, von dem aus gesucht werden soll. d[v]
wiederum beschreibt die Pfadl¨ange vom Startknoten bis zum Knoten v.
Betrachten wir folgenden gerichteten Graphen:
0
1
2
In diesem Graphen sind alle Kanten mit 1 gewichtet und es soll der k¨urzeste Weg zwischen Knoten 0 und 2 gefunden werden. Fangen wir mit den Nebenbedingungen an.
Zeile 7 des Bellman-Ford-Algorithmus bietet daf¨ur einen guten Ansatz. Existieren keine negativen Kreise im Graphen, muss f¨ur jede Kante (u, v) gelten, dass die Differenz der Pfadl¨angen bis u bzw. v sich h¨ochstens um das Gewicht der Kante (u, v) unterscheiden darf. Andernfalls g¨abe es ja einen k¨urzeren Pfad zu einem der beiden Knoten.
Wenn wir f¨ur jede Kante vonGeine Ungleichungsnebenbedingung aus Zeile 7 herleiten, welche Variablen ben¨otigen wir dann? Welche zus¨atzliche (Un-)Gleichungsnebenbedingung(en) ben¨otigen wir?
L¨ose das resultierende Lineare Programm f¨ur den oben gezeigten Graphen graphisch.
Wie muss die Zielfunktion definiert werden, damit das richtige Ergebnis erzielt wird?
L¨osung: Die Ungleichung d[v] ≤ d[u] +w(u, v) f¨ur jede Kante l¨asst sich als Ungle- ichungsnebenbedingung verwenden, wenn f¨ur jeden Knoten v aus G die Variable d[v]
eingef¨uhrt wird. Damit ergibt sich der Ansatz f¨ur ein lineares Programm:
d[v]≤d[u] +w(u, v) f¨ur jede Kante (u, v) aus G d[v]≥0 f¨ur jeden Knoten v aus G
Damit ist der Verlauf der Pfadkosten im Graph definiert. Um den Anfangspunkt f¨ur diesen Verlauf festzulegen, setzen wir die Kosten f¨ur den Startknoten s ein und verwen- den diesen als weitere Nebenbedingung: d[s] = 0
Prinzipiell ist d[t], wenn t der Zielknoten ist, am Anfang von Bellman-Ford unendlich.
Am Ende entspricht er genau der L¨ange des k¨urzesten Pfades. F¨ur unser Problem heißt das, dass wir im Unendlichen f¨ur d[2] beginnen und uns nach und nach dem Ursprung n¨ahern. Das entspr¨ache einer Parallelen zur d[1]-Achse, die nach und nach Richtung d[1]-Achse gezogen wird. Das gesuchte Ergebnis ist der erste zul¨assige Punkt des linearen Programms, den wir treffen.
Die Zielfunktion basiert also nur auf d[2]und muss interessanter Weise maximiert wer- den, um den h¨ochsten zul¨assigen Punkt im L¨osungsbereich zu finden.
Das entg¨ultige Programm sind demnach folgendermaßen aus:
maximiere d[s]
d[v]≤d[u] +w(u, v) f¨ur jede Kante (u, v) aus G d[v]≥0 f¨ur jeden Knoten v aus G
d[s] = 0
Der L¨osungsbereich des Programms sieht folgendermaßen aus:
Aufgabe 2: Simplex-Algorithmus
Zum Berechnen von optimalen L¨osungen kann, wie gesagt, der Simplexalgorithmus ver- wendet werden. Dieser l¨auft entlang von Kanten des Simplex, der durch die Nebenbe- dingungen bestimmt wird und sucht in den Ecken nach der optimalen L¨osung f¨ur das Optimierungsproblem.
2.1 Komplexit¨ at
Der Simplexalgorithmus ist ein interessanter Fall, da er unser normales Verst¨andnis von Algorithmenkomplexit¨at etwas zuwider l¨auft. Da der Simplex jede Ecke nur ein Mal besuchen kann – ansonsten w¨urde er, da er deterministisch ist, immer wieder durch diese Ecke laufen, man sagt der Algorithmus ”kreiselt” – kann man die Laufzeit nach oben hin durch die Anzahl an Ecken des Simplex absch¨atzen.
• Uberlege, wie in der Schlupfform eine Ecke dargestellt wird.¨
• Nimm an, dass ein Lineares Programm vorliegt, dass in Standardform n Vari-
gleichungen hat. Bestimme daf¨ur die obere Schranke f¨ur die Anzahl an Ecken.
(Hinweis: Benutze Stirlings Formel n!∈ O(nn)).
L¨osung: Eine Ecke des Simplex wird durch eine Reihe von Hyperebenen definiert. Be- trachten wir den Eckpunkt in Schlupfform, stellen wir fest, dass einige Schlupfvariablen (die, die zu den Hyperebenen geh¨oren, die die Ecke bilden) null sein m¨ussen.
Wir k¨onnen folglich eine Teilmenge der Schlupfvariablen ausw¨ahlen, um eine Ecke zu bilden. Nehmen wir an bei n Ungleichungen und damit n Schlupfvariablen bilden genau
n
2 Schlupfvariablen eine Ecke. Dann ergibt sich eine Gesamtzahl von n
n 2
!
Ecken. Dies wiederum l¨asst sich ¨uber Stirlings Formel absch¨atzen zu n
n 2
!
= n!
n
2!n2! ≈ nn
(n2)n2(n2)n2 = nn
(n2)n = nn
nn 2n
= 2n
2.2 Kreiseln
Wie oben beschrieben, kann es beim Simplexalgorithmus vorkommen, dass er immer wieder die selbe Eckenfolge durchl¨auft, ohne zu terminieren. Da dies nat¨urlich nicht w¨unschenswert ist, wurden verschiedene Vorgehensweisen entwickelt, um dieses Verhal- ten zu verhindern.
• Wie k¨onnte mit der oben berechneten Schranke f¨ur die Anzahl an Ecken festgestellt werden, ob der Algorithmus kreiselt?
• Falls festgestellt wurde, dass sich der Algorithmus in einem Zustand befindet, in dem er immer wieder die selbe Eckenfolge durchl¨auft, was k¨onnte man tun, um daraus eine vern¨unftige L¨osung zu bestimmen? ¨Uberlege, was auf die Zielfunk- tionswerte der durchlaufenen Ecken zutreffen muss, damit der Algorithmus entlang dieser Ecken kreiselt?
• Der Simplexalgorithmus hat ¨Ahnlichkeiten mit dem Gaußschen Eliminationsver- fahren. Kann man daraus auf ein weiteres Verfahren schließen, das das Kreiseln unterbindet?
L¨osung: Sobald der Algorithmus mehr Ecken durchl¨auft als die obige Schranke angibt, muss er zwangsl¨aufig kreiseln. In diesem Fall kann es sein, dass der Algorithmus in jeder Ecke keine andere M¨oglichkeit hat, als in diesem Zyklus weiterzulaufen. Dann sind allerdings alle L¨osungen in diesem Zyklus optimale L¨osungen f¨ur das lineare Programm.
Gibt es hingegen eine Ecke in der es dem Algorithmus m¨oglich ist anders weiterzu- laufen, dann muss man ihn zwingen diesen Weg zu w¨ahlen. Das kann man beispiel- sweise machen, in dem man bereits durchlaufene Kanten markiert und im Zweifel nicht- markierte Kanten verfolgt.
Aus dem Gaußschen Eliminationsverfahren ergibt sich ein ¨ahnliches Vorgehen. Hier wird versucht sukkzessive Variablen zu eliminieren. D.h. eine Variable, die bereits eli- miniert wurde, wird nicht wieder angetastet. Meistens geschieht dies, indem man die Variablen durchnummeriert und sie mit steigendem Index betrachtet. Die Variablen in unseren linearen Programmen sind auch bereits durchnummeriert. L¨osen wir das System auch immer nach einer Variable auf, die vorher noch nicht betrachtet wurde, kann das Ph¨anomen ”kreiseln” von vornherein ausgeschlossen werden, da der Algorithmus eine bereits besuchte Ecke nicht wieder besuchen kann.