Transshipment problemen Simplex methode en netwerk optimalisatie algoritmes. Luuk van de Sande Begeleider: Judith Keijsper 20 januari 2013

Vergelijkbare documenten
TW2020 Optimalisering

Hoofdstuk 13: Integer Lineair Programmeren

TW2020 Optimalisering

TW2020 Optimalisering

TW2020 Optimalisering

TW2020 Optimalisering

1 In deze opgave wordt vijftien maal telkens drie beweringen gedaan waarvan er één juist is. Kruis de juiste bewering aan. (2pt. per juist antwoord).

TW2020 Optimalisering

TW2020 Optimalisering

Sommige praktische IP problemen kunnen worden geformuleerd als optimalisering op een netwerk.

TW2020 Optimalisering

l e x e voor alle e E

Tie breaking in de simplex methode

Grafen. Indien de uitgraad van ieder punt 1 is, dan bevat de graaf een cykel. Indien de ingraad van ieder punt 1 is, dan bevat de graaf een cykel.

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen

Samenvatting college 1-12

Tentamen combinatorische optimalisatie Tijd:

TW2020 Optimalisering

Tentamen: Operationele Research 1D (4016)

TW2020 Optimalisering

Lineaire Algebra TW1205TI. I.A.M. Goddijn, Faculteit EWI 12 februari 2014

Tie breaking in de simplex methode

A.1 Grafentheorie 64 BIJLAGE A. OPLOSSING VAN DE VRAGEN A.1. GRAFENTHEORIE 65. dan heeft deze kring in ieder knooppunt een even aantal takken).

1. Een kortste pad probleem in een netwerk kan worden gemodelleerd als a. een LP probleem. b. een IP probleem. c. een BIP probleem. d.

TW2020 Optimalisering

Netwerkstroming. Algoritmiek

Toewijzingsprobleem Bachelorscriptie

Transport-, Routing- en Schedulingproblemen. Wi4062TU / Wi487TU / a86g. Uitwerkingen

Lineaire Algebra voor ST

TW2020 Optimalisering

TW2020 Optimalisering

Tentamen Optimalisering (IN2520) Datum: 5 november 2004, Docent: Dr. J.B.M. Melissen

Stelsels lineaire vergelijkingen

2WO12: Optimalisering in Netwerken

TW2020 Optimalisering

De statespace van Small World Networks

l e x e voor alle e E

Netwerkstroming. Algoritmiek

Lineaire Algebra voor ST

Bijlage A Simplex-methode

Begrenzing van het aantal iteraties in het max-flow algoritme

TU/e 2DD50: Wiskunde 2 (1)

TU/e 2DD50: Wiskunde 2

2WO12: Optimalisering in Netwerken

Lineaire Algebra voor ST

Uitwerking tentamen Analyse van Algoritmen, 29 januari

Optimalisering/Besliskunde 1. College 1 6 september, 2012

Optimaliseren in Netwerken

Optimalisering/Besliskunde 1. College 1 2 september, 2015

TW2020 Optimalisering

Optimalisering/Besliskunde 1. College 1 3 september, 2014

1. Het aantal optimale oplossingen van een LP probleem is 0, 1, of oneindig. 2. De vereniging van twee konvexe verzamelingen is niet convex. 3.

Universiteit Utrecht Faculteit Wiskunde en Informatica. Examen Optimalisering op maandag 18 april 2005, uur.

Geheeltallige programmering

TU/e 2DD50: Wiskunde 2 (1)

1 Transportproblemen. 1.1 Het standaard transportprobleem

Kortste Paden. Algoritmiek

Hoofdstuk 8: Algoritmen en Complexiteit

Discrete Wiskunde, College 12. Han Hoogeveen, Utrecht University

Universiteit Utrecht Betafaculteit. Examen Discrete Wiskunde II op donderdag 6 juli 2017, uur.

Matrixoperaties. Definitie. Voorbeelden. Een matrix is een rechthoekig array van getallen, die kentallen of elementen heten.

TW2020 Optimalisering

Elfde college complexiteit. 23 april NP-volledigheid III

Branch-and-Bound en Cutting Planes

Lineaire Algebra (2DD12)

Universiteit Utrecht Betafaculteit. Examen Discrete Wiskunde op donderdag 13 april 2017, uur.

SPECIALE LINEAIRE MODELLEN

Discrete Wiskunde 2WC15, Lente Jan Draisma

Matrices en Grafen (wi1110ee)

Overzicht. Inleiding. Toepassingen. Verwante problemen. Modellering. Exacte oplosmethode: B&B. Insertie heuristieken. Local Search

Radboud Universiteit Nijmegen

Hebzucht loont niet altijd

Taak 2: LP: simplex en sensitiviteitsanalyse Voorbeeld uitwerking

Lineaire Algebra voor ST

Lineaire programmering

Hoofdstuk!7!Kortste!paden!

Het minimale aantal sleutels op niveau h is derhalve

Combinatorische Algoritmen: Binary Decision Diagrams, Deel III

BESLISKUNDE 2 L.C.M. KALLENBERG UNIVERSITEIT LEIDEN

Het oplossen van stelsels lineaire vergelijkingen Wiskunde 2, 2DM60 College 2b

3. Elke lijn van een graaf draagt twee bij tot de som van alle graden.

TW2020 Optimalisering

Voorbeeld simplexmethode. Max Z = 3x 1 + 2x 2 0.5x 3 z.d.d. 4x 1 + 3x 2 + x 3 10, 3x 1 + x 2-2x 3 8, en x 1, x 2, x 3 0.

Tentamen Discrete Wiskunde 1 10 april 2012, 14:00 17:00 uur

1 Vervangingsstrategie auto

3. Structuren in de taal

V = {a, b, c, d, e} Computernetwerken: de knopen zijn machines in het netwerk, de kanten zijn communicatiekanalen.

Tiende college algoritmiek. 13/21 april Gretige Algoritmen Algoritme van Dijkstra

Uitgebreide uitwerking Tentamen Complexiteit, mei 2007

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Ruimtewiskunde. college. Stelsels lineaire vergelijkingen. Vandaag UNIVERSITEIT TWENTE. Stelsels lineaire vergelijkingen.

Lineaire Algebra WI1048WbMt. I.A.M. Goddijn, Faculteit EWI 4 september 2016

Vierde huiswerkopdracht Lineaire algebra 1

In dit gedeelte worden drie problemen genoemd die kunnen voorkomen in netwerken.

TW2020 Optimalisering

Computationele Intelligentie

Faculteit der Economie en Bedrijfskunde

Samenvatting Lineaire Algebra, periode 4

Tiende college algoritmiek. 26 april Gretige algoritmen

Optimalisering en Complexiteit, College 10. Begrensde variabelen. Han Hoogeveen, Utrecht University

Transcriptie:

Transshipment problemen Simplex methode en netwerk optimalisatie algoritmes Luuk van de Sande Begeleider: Judith Keijsper 20 januari 2013 1

Inhoudsopgave 1 Transport problemen 3 2 Definities en stellingen 3 3 b-transshipment probleem 5 3.1 Reductie.............................. 5 4 Netwerk optimalisatie problemen 7 4.1 Kortste pad............................ 7 4.2 Max flow.............................. 8 4.3 Minimaal gewicht perfecte bipartiete matching......... 9 5 Simplex methode 12 6 Vergelijking simplex methode met bekende netwerk algoritmes 13 6.1 Kortste pad............................ 14 6.2 Max flow.............................. 25 2

1 Transport problemen Dit project gaat over de connectie tussen onderwerpen uit de convexe optimalisatie (lineair programmeren en de simplex methode) en onderwerpen uit de optimalisatie in netwerken (kortste pad algoritme, max flow algoritme, enz.). De opdracht is om het minimum cost b-transshipment problem, de formulering van het bijbehorende LP probleem en de toepassing van de simplex methode op de LP te bestuderen. Het doel is om te ontdekken welke bekende netwerk optimalisatie problemen speciale gevallen zijn van het b-transshipment probleem. Verder kan er dan ook worden gekeken naar welke algoritmes die bekend zijn voor het oplossen van netwerk optimalisatie problemen speciale gevallen zijn van de simplex methode. In sommige gevallen kan een goed gekozen pivot regel ervoor zorgen dat de simplex methode overeenkomt met een bekend algoritme voor het oplossen van een netwerk optimalisatie probleem. Het is nog niet bekend of er zo n pivotregel bestaat voor het b-transshipment probleem. Voor de netwerk algoritmes is bekend dat deze in polynomiale tijd gedaan kunnen worden. Dat betekent dat er een polynomiale functie van de grootte van de invoer bij het probleem hoort die een bovengrens is voor het aantal rekenstappen van het algoritme. Voor de simplex methode is dat in het algemeen niet het geval. 2 Definities en stellingen Gerichte graaf Een gerichte graaf is een paar D = (V, A) van een set V, waarvan de elementen vertices worden genoemd een set A van geordende paren vertices, deze worden de pijlen of arcs in de graaf genoemd Totaal unimodulaire matrices Een matrix A is totaal unimodulair (TU) als det(b) { 1, 0, 1} voor elke vierkante deelmatrix B van A. Incidentie matrix Zij D=(V,A) een gerichte graaf. Dan is de incidentie matrix van D de 3

V A matrix M = (m va ) v V,a A zodanig dat 1 als v de kop is van a m va = 1 als v de staart is van a 0 anders b-transshipment Zij D=(V,A) een gerichte graaf, zij d : A R { } en c : A R { } een demand- en een capaciteitsfunctie met d(a) c(a) voor alle a A. Zij b : V R met v V b(v) = 0. Een functie x : A R is een b-transshipment als de volgende twee voorwaarden gelden: d(a) x(a) c(a) a A a: kop van a is v x(a) a: staart van a is v x(a) = b(v) v V De functie wordt ook wel de stroom genoemd. De tweede voorwaarde geeft aan dat b(v) gelijk is aan de inkomende stroom min de uitgaande stroom voor ieder punt v. b is dus wat er netto v in gaat. In vectornotatie is dit te schrijven als Mx = b d x c. Polynomiaal algoritme Een polynomiaal algoritme is een algoritme dat in polynomiale tijd wordt uitgevoerd, dus de benodigde tijd, als functie van de grootte van de invoer, wordt begrensd door een polynoom. Polynomiale tijd wordt genoteerd door O(n k ), waarbij n de grootte van de invoer is en k een constante die per probleem kan verschillen. Stelling Zij A een totaal unimodulaire matrix en b Z m, dan zijn de hoekpunten van {Mx = b, x 0} geheeltallig Stelling Gegeven een gerichte graaf D = (V, A) met V A-incidentie matrix M. Voor een set B A zijn de volgende beweringen equivalent: 1. (V,B) is een opspannende boom 4

2. de kolommen van de inicidentiematrix M geïndiceerd door B vormen een basis voor de kolommenruimte van M. [Bron: A. Schrijver, Combinatorial opitimization, Algorithms and Combinatorics, vol. 24, Springer-Verslag, Berlin, first ed., 2003, Polyhedra and Efficiency.] 3 b-transshipment probleem Het algemene b-transshipment probleem kan als volgt geformuleerd worden Gegeven: Een gerichte graaf D = (V, A), overschot b R V, kosten k R A, capaciteit and demand c, d R A. Vind: Een flow x R A zodanig dat d x c, en zodanig dat kx zo klein mogelijk is. 3.1 Reductie Het b-transshipment probleem kan worden gereduceerd naar het geval waarin de capaciteit oneindig is en de demand 0. Als een pijl demand d heeft kan deze worden vervangen door drie pijlen waarbij de demand 0 wordt, door de b aan te passen. Dit wordt weergegeven in figuur 1. De betekenis van de twee representaties is hetzelfde. Bij de reductie wordt de b tussen de eerste twee pijlen gelijk aan d. Dit betekent dat er d achterblijft. Aangezien de eerste pijl de enige manier is om dat punt te bereiken moet er minimaal d door die pijl gaan. De hoeveelheid flow die achterblijft wordt na de tweede pijl weer toegevoegd zodat er geen flow verloren gaat. Op een soortgelijke manier kan de capaciteit van de pijlen met d = 0 veranderd worden in oneindig. Ook dan wordt de pijl vervangen door drie nieuwe pijlen: a 1, a 2 en a 3. Deze krijgen allemaal capaciteit oneindig. Pijl a 2 staat in tegengestelde richting. Dit wordt weergegeven in figuur 2. Deze drie pijlen hebben samen dezelfde betekenis als de originele pijl. De b- waarden zorgen ervoor dat er maximaal c door stroomt. De hoeveelheid flow die door a 1 stroomt is net zo groot als de hoeveelheid flow die door a 3 stroomt (x(a 1 ) = x(a 3 )), dus er gaat geen flow verloren. De hoeveelheid die door a 2 stroomt is de capaciteit van de originele pijl min de stroom door a 1 (x(a 2 ) = c x(a 1 )). De stroom kan niet negatief zijn, want d 0. Dus 5

Figuur 1: Reductie naar d = 0 Figuur 2: Reductie naar c x(a 1 ) c en x(a 3 ) c. Het gereduceerde probleem, met c en d 0 kan worden geformuleerd als een LP: min{kx Mx = b, x 0, x R A } met M de incidentie matrix van D. Een transshipment is niet per definitie geheeltallig, maar omdat de incidentie matrix totaal unimodulair is, zijn de hoekpunten van {Mx = b, x 0} geheeltallig en zal de simplexmethode op de LP dus een geheeltallige oplossing vinden. Dat wil zeggen dat min{kx Mx = b, x 0} = min{kx Mx = b, x 0, x Z A } Een geheeltallig transshipmentprobleem is equivalent met zijn LP-relaxatie. 6

4 Netwerk optimalisatie problemen Er zijn verschillende soorten b-transshipment problemen. Hier worden enkele speciale gevallen besproken en er wordt aangegeven waarom dit geheeltallige b-transshipment problemen zijn. 4.1 Kortste pad Het kortste pad probleem is het vinden van een pad tussen twee vertices in een graaf zodat de som van de gewichten van de arcs op het pad minimaal is. Formeel kan het als volgt worden gedefinieerd. Gegeven: Een gewogen graaf D = (V, A) met afstand functie d : A R + en punten s, t V. Vind: Een pad P van s naar t zodanig dat a A(P ) d(a) minimaal is over alle paden van s naar t. Hierbij is A(P ) de verzameling van arcs waarover het pad P loopt. Het kortste pad probleem is een b-transshipment probleem op netwerk D met demand 0 en capaciteit voor alle pijlen, b(s) = 1 en b(t) = 1 en voor alle u V met u s, t geldt b(u) = 0. Dit betekent dat er 1 flow vertrekt bij s en die gaat naar t. Hierbij hoeven niet alle pijlen gebruikt te worden. De kosten van de pijlen komen overeen met de afstand tussen twee vertices, dus k(a) = d(a). Dit is dus een geheeltallig transshipment probleem. De MIP die bij dit probleem hoort is: Minimize (i,j) A k ijxij Subject to x {0, 1} Voor alle i: j:(j,i) A x ji j:(i,j) A 1 als i=s x ij = 1 als i=t 0 anders 7

4.2 Max flow Het maximum flow probleem is het vinden van een stroom van een bron naar een eindpunt waarbij de waarde van de stroom maximaal is. De stroom is een afbeelding x : A R +. Als a = (u, v), dan wordt x(a) weergegeven door x uv. De waarde van de stroom is gedefinieerd door x = v V x sv. Formeel ziet het er als volgt uit: Gegeven: Een netwerk N = (V, A) met bron s V en eindpunt t V en de capaciteit van een arc is gegeven door de afbeelding C : A R +. Vind: Een flow x R A + met maximale waarde waarvoor geldt: x uv c uv voor alle (u, v) A (de flow door een pijl kan niet groter zijn dan zijn capaciteit) u:(u,v) A x uv = u:(v,u) A x vu voor elke v V \{s, t} (behoud van flow: de som van de inkomende flow is gelijk aan de som van de uitgaande flow, behalve bij de bron en het eindpunt) Er wordt een pijl (t, s) van het eindpunt naar de bron toegevoegd, met oneindige capaciteit (dus c ts = ). De flow die door deze pijl stroomt is gelijk aan de totale flow die van s naar t is gestroomd. Het geeft de hoeveelheid flow van de bron naar het eindpunt weer. Dit is een speciaal geval van het b-transshipment probleem op het netwerk N {t, s}, met b = 0 voor alle punten, d = 0 voor alle arcs, c(a) = C(a) voor alle a A en { 1 als (u,v)=(t,s) k(u, v) = 0 anders De LP die bij dit probleem hoort is: Minimize (i,j) A {t,s} k ijxij Subject to Voor alle i: j:(i,j) A x ij j:(j,i) A x ji = 0 0 x ij c ij 8

Figuur 3: bipartiete graaf, matching en perfecte matching 4.3 Minimaal gewicht perfecte bipartiete matching Een matching in een graaf G(W, E) is een set van niet aangrenzende kanten. Dat wil zeggen dat er geen twee kanten zijn die een vertex delen. Een perfecte matching is een matching F waarbij alle vertices gekoppeld zijn, dat wil zeggen dat alle vertices deel zijn van een kant uit F. Een bipartiete graaf is een graaf zodat W kan worden verdeeld in twee disjuncte deelverzamelingen U en V, zodanig dat iedere edge een punt u U verbindt met een punt v V. Als een bipartiete graaf een perfecte matching heeft, dan geldt U = V. Formeel kan het minimaal gewicht perfecte bipartiete matching probleem als volgt worden geformuleerd. Gegeven: Een bipartiete gewogen graaf D = (W, A) met bipartitie W = U V en met gewichtsfunctie w : A R +. Vind: Een perfecte matching x {0, 1} A waarvoor geldt dat (u,v) A x uvw uv minimaal is. Ook dit probleem is een speciaal geval van het b-transshipment probleem. Hiervoor wordt het probleem eerst op een andere manier beschreven. Dit is weergegeven in figuur 4. Het probleem wordt gegeven door een bipartiete graaf G = (W, E) met gewichtsfunctie w : E R +. Er wordt een nieuwe gerichte graaf geconstrueerd. Er worden vertices s en t toegevoegd. Ook 9

Figuur 4: Minimaal gewicht perfecte bipartiete matching in b-transshipment vorm worden er pijlen toegevoegd van s naar alle vertices in U en van alle vertices in V naar t. Verder worden alle kanten tussen U en V vervangen door pijlen van U naar V. De verzameling pijlen wordt in het vervolg A genoemd. Het probleem kan dan als volgt worden geformuleerd: Gegeven: Een bipartiete gewogen graaf D = (W, E) met bipartitie W = U V en met gewichtsfunctie w : A R +. Een vertex s en pijlen (s, u) voor alle u U met demand 0, capaciteit 1 en gewicht 0. Een vertex t en pijlen (v, t) voor alle v V met demand 1, capaciteit en gewicht 0. Pijlen in plaats van kanten {(u, v) u U, v V, {u, v} E}. Iedere pijl (u, v) met u U en v V heeft demand 0 en capaciteit. Vind: Een s-t flow x N, waarbij N het nieuwe netwerk is, waarvoor geldt dat (u,v) A x uvw uv minimaal en waarvoor geldt: 10

d uv x uv c uv voor alle (u, v) A (de flow door een pijl mag niet kleiner zijn dan zijn demand en niet groter zijn dan zijn capaciteit) x su = v:(u,v) A x uv voor elke u U u:(u,v) A x uv = x vt voor elke v V (de laatste twee voorwaarden betekenen het behoud van flow: de som van de inkomende flow is gelijk aan de som van de uitgaande flow voor alle u U en alle v V ) Deze twee problemen zijn equivalent. Doordat de pijlen (s, u) capaciteit 1 hebben komt er bij iedere vertex u maximaal 1 flow aan. Deze flow wordt doorgestuurd naar de vertices v V. Doordat de pijlen (v, t) demand 1 hebben komt er bij iedere vertex v minimaal flow 1 aan. Dit betekent dus dat er precies flow 1 vertrekt bij iedere vertex u U en precies flow 1 aankomt bij iedere vertex v V. Dit betekent dus dat er bij beide problemen een perfecte matching wordt gevonden met minimaal gewicht. Dit is een speciaal geval van het b-transshipment probleem met kosten { w(u,v) als {u,v} E k(u, v) = 0 anders b(s) = U, b(t) = U en b(u) = 0 voor alle u s, t. De capaciteitsfunctie is { 1 als v = t c(u, v) = anders De demand functie is d(u, v) = { 1 als u = s 0 anders De MIP die bij dit probleem hoort is N=(X,A) is de nieuw geconstrueerde graaf): Minimize (i,j) A k ijxij Subject to d ij x ij c ij Voor alle i X: j:(j,i) A x ji j:(i,j) A U als i=s x ij = U als i=t 0 anders 11

5 Simplex methode De simplex methode wordt gebruikt op linear programming problemen in de standaard vorm: Minimize cx Subject to Ax=b, x i 0 met x = (x 1,..., x n ) de variabelen van het probleem, c = (c 1,..., c n ) de coëfficiënten van de doelfunctie, A een p n matrix van rang p en b = (b 1,..., b p ) constanten met b j 0. Het gereduceerde transshipment probleem is van deze vorm. Dus de simplex methode kan worden gebruikt om b-transshipment problemen op te lossen. Een lineair programma in standaard vorm wordt als volgt in een tableau weergegeven. [ 1 c T ] 0 0 A b In de eerste rij staat de doelfunctie en in de andere rijen staan de constraints. Als de kolommen van A gepermuteerd kunnen worden zodat het de identiteitsmatrix bevat, dan is het een canonical tableau. De variabelen die bij de kolommen van de identiteitsmatrix horen zijn de basis variabelen. De niet-basis variabelen zijn 0, de waarden van de basis variabelen kunnen worden afgelezen in de laatste kolom. Dit levert een toegestane oplossing op, namelijk de basisoplossing die bij deze basisvariabelen hoort. Met behulp van pivot operaties kan van een basisoplossing naar een andere basisoplossing worden gegaan. Hiervoor wordt een niet nul element in een niet basis kolom gekozen. De rij waarin dit pivotelement zit wordt gedeeld door de waarde van het element. Hierdoor wordt het element 1. Vervolgens worden veelvouden van de rij opgeteld bij de andere rijen zodat alle andere waardes in de kolom nul worden. Dit zorgt er voor dat als het pivot element in rij r zat, dat de kolom de r-de kolom van de identiteitsmatrix wordt. De variabele van de kolom wordt nu basis variabele in plaats van de variabele die bij de oorspronkelijke r-de kolom van de identiteitsmatrix hoorde. De matrix is nog steeds canonical, maar er is een basis variabele vervangen waardoor een nieuwe basisoplossing is gecreëerd. Het pivot element moet zo gekozen worden dat de oplossing verbetert. Hiervoor moet een kolom gekozen worden, waarin het element in de rij van de 12

doelfunctie positief is. Als er meerdere positieve elementen zijn in de doelfunctie dan moet er een keuze worden gemaakt. De regel waarop de keuze gebaseerd is, is het eerste onderdeel van de pivotregel. Als er geen positieve elementen zijn, dan kan er geen keuze gemaakt worden zodat de oplossing verbetert. Dit betekent dat de oplossing optimaal is. De keuze voor de pivotrij wordt voor een groot deel bepaald door de eis dat de oplossing toelaatbaar moet zijn. Er wordt alleen gekeken naar de positive elementen in de pivot kolom, omdat dit garandeert dat de nieuwe basis variabele positief is. De oplossing is alleen toelaatbaar als ook de andere basis variabelen positief zijn. Om een geschikte rij te vinden wordt de minimum ratio test gebruikt. Als c de pivotkolom is, dan wordt de pivotrij r zo gekozen dat b r a cr minimaal is onder alle r, met a cr 0. Als er meerdere rijen zijn waarbij de ratio gelijk is moet er een keuze worden gemaakt. De keuze voor de rij is het tweede onderdeel van de pivotregel. Door pivot stappen uit te voeren totdat er geen positieve elementen in de eerste rij staan, wordt de optimale oplossing gevonden. Er wordt gebruik gemaakt van de twee-fasen methode. Hiervoor moet eerst nog een eerste canonical tableau worden opgesteld. In het algemeen is een lineair programma nog niet in canonical vorm. Hiervoor worden artificiële variabelen ingevoerd. De kolommen van de identiteitsmatrix worden toegevoegd als kolommen bij deze variabelen. Het nieuwe probleem is in canonical vorm, maar het is niet equivalent met het originele probleem. De som van de artificiële variabelen is de nieuwe doelfunctie. Vervolgens wordt de simplex methode uitgevoerd om deze som te minimaliseren. Als de som van de artificiële variabelen 0 is, dan kunnen de artificiële variabelen weer worden verwijderd. Het resultaat is dan een canonical tableau voor het originele probleem. Als de som van de artificiële variabelen niet 0 wordt, dan is er geen toegestane oplossing voor het originele probleem. [Bron: A. Schrijver, Theory of linear and integer programming, Willey-Interscience Series in Discrete Mathematics, John Wiley & Sons Ltd., Chichester, 1986, A Wiley-Interscience Publication.] 6 Vergelijking simplex methode met bekende netwerk algoritmes Van de simplex methode is niet bekend na hoeveel stappen het de optimale oplossing geeft. Voor sommige bekende problemen zijn algoritmes bekend 13

die polynomiaal zijn. Door te laten zien dat er bij de algoritmes en bij de simplex methode hetzelfde gebeurt, kan worden aangetoond dat de simplex methode in een polynomiaal aantal stappen de optimale oplossing vindt als de juiste pivotkeuzes worden gemaakt. 6.1 Kortste pad Dijkstra s algoritme Het kortste pad probleem kan worden opgelost met Dijkstra s algoritme. Dit algoritme werkt op een gerichte graaf D = (V, A), met bron s V en eindpunt t V, en met kosten k uv gelijk aan de afstand van pijl (u, v). De capaciteit van alle pijlen is en de demand van alle pijlen is 0. Het algoritme verdeelt de punten van de graaf D(V, A) in drie verzamelingen: B: de verzameling van punten waarvan de kortste afstand tot s bekend is X: de verzameling van punten waarnaar er al wel een pad bekend is vanuit s, maar niet noodzakelijk het kortste V (D) B X: de overige punten van V De verzameling B bevat in het begin alleen punt s en de verzameling X is leeg. Er bestaat een array d(v), deze bevat de afstanden van s naar het punt v. Dus d(s) = 0, voor de overige punten geldt in het begin d(v) =. Door het algoritme wordt deze array zo gevuld dat uiteindelijk d(t) de lengte van het kortste s t pad is. Het algoritme herhaalt nu de volgende stappen vanuit s totdat X de lege verzameling wordt: 1. Kies uit X het punt x met de minimale waarde van d(x). Voor dit punt is d(x) definitief de kortste afstand van s naar x. Ook de pijl naar dit punt toe, die de kortste afstand levert, wordt definitief. 2. Omdat d(x) definitief is, wordt x verplaatst van X naar B. Voor alle buren z van x (er is dus een rechtstreekse pijl (x, z)), die nog niet in B zitten, wordt het volgende gedaan: (a) Zit z nog niet in X, dan wordt het toegevoegd aan X. Een eerste schatting voor de afstand van s naar z is dan d(z) = d(x) + k xz (b) Zit z al wel in X, dan is de nieuwe waarde voor d(z) het minimum van de oude waarde en d(x) + k xz 14

Figuur 5: Voorbeeld kortste pad. Zodra dit algoritme afloopt, als ieder element van X naar B verplaatst is, dan is de kortste afstand van s naar t bekend, namelijk d(t). Ook het kortste pad is bekend, omdat de pijlen die de kortste afstand leveren worden opgeslagen. Het aantal stappen dat het algoritme nodig heeft is O( V 2 ). Kortste pad met Simplex methode Het kortste pad probleem kan worden opgelost met behulp van de simplex methode. Dit wordt duidelijk gemaakt met een voorbeeld. De graaf die hoort bij het voorbeeld staat in figuur 5. Er moet een pad gevonden worden van s naar t waarbij de som van de lengtes van de pijlen minimaal is. Er kan een tableau worden opgesteld dat bij dit probleem hoort. Dat tableau zal er als volgt uit zien. [ 1 c T ] 0 0 M b Waarbij c de doelfunctie is, M de incidentie matrix en b is de hoeveelheid flow die per punt achterblijft. De incidentie matrix van de gerichte graaf is: 15

x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 s 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 3 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 4 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 5 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 6 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 7 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 8 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 t 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 De waardes in de doelfunctie zijn de lengtes van de pijlen. De waardes bij b, de hoeveelheid flow die achterblijft, zijn 1 bij s, 1 bij t en 0 bij de rest. Er moet namelijk alleen flow 1 van s naar t. Omdat de rijen afhankelijk zijn van elkaar (de som van alle rijen is 0) wordt er een rij geschrapt, in dit geval wordt de eerste rij weggelaten. Dat levert het volgende tableau op: x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 b doel 1 1 2 2 2 1 1 3 3 3 1 4 5 4 1 2 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 4 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 6 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 8 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 t 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 Dit tableau bevat niet alle kolommen van de identiteitsmatrix, dus worden er artificiële variabelen toegevoegd. Er komt ook een nieuwe doelfunctie, namelijk de som van alle artificiële variabelen. Als dit geminimaliseerd wordt, dan worden alle artificiële variabelen 0, mits er een toegestane oplossing is voor het kortste pad probleem. Het tableau ziet er dan als volgt uit. 16

x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 art. var. b doel 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 doel 0 1 1 2 2 2 1 1 3 3 3 1 4 5 4 1 2 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 3 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 4 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 5 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 1 0 0 0 8 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 t 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 17

Vervolgens worden rijen 3 tot en met 11 bij de eerste rij opgeteld zodat de identiteitsmatrix ontstaat. Dan worden er pivotstappen gedaan totdat alle artificiële variabelen uit de basis zijn. De artificiële variabelen kunnen dan weggelaten worden. Dan krijgen we een tableau dat equivalent is met het originele tableau, maar dit tableau is canonical. De eerste toegestane oplossing kan worden afgelezen uit de matrix. x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 b doel 1 0 0 0 0 0 0 2 3 0 0 0 0 2 0 2 8 x 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 x 2 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 0 x 3 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 1 x 4 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 x 6 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 x 10 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 x 11 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 x 9 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 x 12 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 In de matrix is af te lezen dat x 3, x 10 en x 12 waarde 1 hebben en de rest 0. Het gevonden pad is dus langs deze drie pijlen. De totale lengte is 8, de waarde rechtsboven in de matrix. Verder is ook te zien welke pijlen in de basis zitten, dat zijn x 1, x 2, x 3, x 4, x 6, x 9, x 10, x 11 en x 12. Deze vormen een (ongerichte) opspannende boom in de graaf. De waardes in de niet basis kolommen zijn ook te herkennen in de graaf. De waarde in de eerste rij is de verbetering van de afstand van s naar de kop van de pijl als deze pijl zou worden toegevoegd aan de basis. Als deze pijl wordt toegevoegd ontstaat een circuit. Alle pijlen die dezelfde richting op wijzen als de toe te voegen pijl hebben een 1 in de bijbehorende rij. De pijlen die in tegengestelde richting wijzen hebben een 1 en de pijlen die niet op het circuit liggen hebben een 0. In de laatste kolom staat een 1 bij de pijlen die op het pad van s naar t liggen, en een 0 bij de andere pijlen. Op deze manier is bij iedere willekeurige boom de bijbehorende matrix op te stellen. De oplossing is te zien in figuur 6. Er is nu één positieve waarde in de eerste rij, namelijk bij x 15, dus dat is de pivot kolom. De ratio is het kleinst voor de rij van basiselement x 11, dus dat is de pivot rij. In dit geval is er dus geen keuze nodig, omdat er maar 1 element in aanmerking komt om pivotelement te worden. x 11 gaat uit de basis en x 15 komt in de basis. Dit levert een nieuwe opspannende boom op. Deze pivot stap levert de volgende matrix op. 18

Figuur 6: Eerste toegestane oplossing x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 b doel 1 0 0 0 0 0 0 2 3 0 0 2 0 2 2 0 8 x 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 x 2 0 0 1 0 0 1 0 1 1 0 0 1 0 0 1 0 0 x 3 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 x 4 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 x 6 0 0 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 x 10 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 x 15 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 x 9 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 x 12 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 De oplossing die bij deze matrix hoort is te zien in figuur 7. Het kortste pad is nog steeds via x 3, x 10 en x 12. De afstand van s tot punt 7 is verkort van 7 naar 5. Er is ook een basis variabele vervangen, x 15 is in de basis gekomen in plaats van x 11. Deze pivot stap leidt niet direct tot een korter st-pad, maar iedere stap leidt tot een verbetering van de afstand tot een punt in de graaf. In de nieuwe matrix is opnieuw maar één mogelijke pivot kolom. Er zijn nu wel drie rijen met dezelfde ratio. Er wordt nu gekozen voor rij 4, hierdoor gaat x 3 uit de basis en x 14 komt in de basis. Deze stap levert de volgende matrix op. 19

Figuur 7: Tweede toegestane oplossing x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 x 13 x 14 x 15 b doel 1 0 0 2 0 0 0 0 3 0 0 0 0 4 0 0 6 x 1 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 x 2 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 x 14 0 0 0 1 0 0 0 1 0 0 0 1 0 1 1 0 1 x 4 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 x 6 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 x 10 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 x 15 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 1 x 9 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 x 11 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 De oplossing die bij deze matrix hoort staat in figuur 8. Deze pivot stap heeft wel een korter st-pad opgeleverd. De afstand tot t is nu 6 via de pijlen x 2, x 6, x 15 en x 14. x 14 is in de basis gekomen in plaats van x 3, dat x 3 uit de basis gaat heeft te maken met de keuze voor de pivot rij. x 14 sluit een circuit af in de boom, x 3, x 10 en x 12 zijn de positieve flow-arcs in het circuit. Een van deze pijlen wordt uit de basis gehaald. Bij de andere twee pivotkeuzes waren x 10 of x 12 uit de basis gegaan. Om de simplex methode te vergelijken met Dijkstra s methode wordt het voorbeeld ook opgelost met Dijkstra s methode. Dit is te zien in de volgende figuren. De getallen bij de pijlen zijn de lengtes van de pijlen. De getallen bij de punten zijn de afstanden van s tot de punten. De ingekleurde punten zijn definitief. Bij Dijkstra wordt de hele opspannende boom vanuit s opgebouwd. Bij de simplexmethode wordt gestart met een boom in de graaf. 20

Figuur 8: Derde toegestane oplossing Figuur 9: Dijkstra stap 1 Als vanuit deze boom Dijkstra zou worden toegepast, dan moet eerst x 15 worden toegevoegd aan de basis en x 11 moet uit de basis worden gehaald. Dit gebeurd ook bij de simplex methode. Vervolgens zou moet x 14 worden toegevoegd en x 12 worden verwijderd. In het voorbeeld waren de ratio s bij x 3, x 10 en x 12 gelijk. Hier werd x 3 uit de basis gehaald. Pivotregels voor kortste pad In het algemeen stelt het eerste canonical tableau een boom voor in de graaf. Met behulp van artificiële variabelen wordt een eerste canonical tableau gevormd. Er is dan een pad van s naar t, als dit pad gericht is dan heeft het een bepaalde lengte. In iedere pivotstap wordt een nieuwe kolom aan de basis toegevoegd. Dit komt overeen met het toevoegen van een pijl aan de 21

Figuur 10: Dijkstra stap 2 Figuur 11: Dijkstra stap 3 Figuur 12: Dijkstra stap 4 22

Figuur 13: Dijkstra stap 5 Figuur 14: Dijkstra stap 6 Figuur 15: Dijkstra stap 7 23

Figuur 16: Dijkstra stap 8 Figuur 17: Dijkstra stap 9 Figuur 18: Dijkstra stap 10 24

boom. De kolom die verdwijnt uit de basis komt overeen met de pijl die uit de boom verdwijnt. De pivotkeuzes bepalen welke pijl wordt toegevoegd en welke verdwijnen. Bij het kiezen van een pivotkolom moet de entry in de eerste rij positief zijn. Dit betekent dat de afstand van s naar de kop van de pijl wordt verbeterd als deze pijl wordt toegevoegd. Als er geen positieve getallen meer in de eerste rij staan, betekent dit dat er geen pijlen meer zijn die een verbetering opleveren. Dit betekent dat het kortste pad is gevonden. De eerste stap in Dijkstra s algoritme is om het punt v te vinden waarvoor de afstand tot s het kleinst is en waarvoor geldt dat v nog niet definitief is, dit punt wordt definitief gemaakt en de afstanden van s naar de buren van v worden waar nodig aangepast. Als er een buurman is waarvoor de afstand tot dat punt korter wordt als het pad via v wordt gekozen, dan staat er een positieve entry in de kolom van de bijbehorende pijl. De pivotkeuze moet zo gemaakt worden dat deze pijl in de basis komt. Vervolgens wordt weer het punt gezocht waarbij de afstand tot het punt s het kleinst is en waarbij de afstand nog niet definitief is. Zo kan voor iedere stap bij Dijkstra s methode de bijbehorende stap worden gedaan in simplex methode. Iedere keer als er een label van een buurman in Dijkstra s methode wordt aangepast, dan wordt er bij de simplexmethode een pivotstap gedaan als de desbetreffende pijl nog niet in de basis zit. Als dit wel het geval is, hoeft er geen pivotstap gedaan te worden. Er ontstaat steeds een circuit in de graaf. De tweede pivotkeuze gaat om welke pijl uit de basis verdwijnt. Deze wordt zo gekozen dat de laatste pijl van het vorige kortste pad uit de basis verdwijnt, waardoor de opspannende boom een gerichte boom blijft. Als dit wordt herhaald totdat voor ieder punt de kortste afstand tot s bekend is, dan ontstaat een gerichte opspannende boom, waarbij voor ieder punt het kortste pad tot s het pad over de opspannende boom is. In het voorbeeld zou dan bij de laatste pivotkeuze niet x 3, maar x 12 uit de basis moet worden gehaald. Door deze keuzes wordt het aantal stappen proportioneel aan het aantal stappen in Dijkstra s algoritme, omdat voor iedere stap in Dijkstra s methode maximaal 1 pivotstap gedaan hoeft te worden. 6.2 Max flow Ford-Fulkerson Algoritme Het max flow probleem kan worden opgelost met het Ford-Fulkerson algoritme. Dit algoritme start met de gerichte graaf D = (V, A) met capaciteitsfunctie c : A Z +, startpunt s en eindpunt t. De restgraaf D f (V, A) wordt gedefinieerd als het netwerk met capaciteitsfunctie c f (u, v) = c(u, v) f(u, v) en c f (v, u) = f(u, v) voor alle (u, v) A. Als c f (u, v) = f(u, v) dan wordt 25

de pijl omgedraaid. Het algoritme werkt als volgt: 1. f(u, v) 0 voor alle kanten 2. Vind een pad p van s naar t in D f zodanig dat c f (u, v) > 0 voor alle (u, v) p, herhaal dan voor alle kanten (u, v) p: (a) Vind c f (p) = min c f (u, v) : (u, v) p (b) Voor alle kanten (u, v) p i. f(u, v) f(u, v) + c f (p) (verzonden flow over het pad) ii. f(v, u) f(v, u) c f (p) (de flow kan later terugkeren) Het pad in stap 2 kan worden gevonden met bijvoorbeeld breadth-first search. Als er geen pad meer gevonden kan worden stopt het algoritme. De maximale flow is dan de som van de verschillende flows die van s naar t zijn verstuurd. Het aantal iteraties waarin het Ford-Fulkerson algoritme de maximale flow vind is begrensd door O( A C), waarbij A het aantal pijlen in de graaf is en C de maximale capaciteit in de graaf. Dit is niet polynomiaal, er kan een polynomiale variant worden verkregen door iedere keer het pad met het minste aantal pijlen toe te voegen. Max flow met Simplex methode Ook het max flow probleem kan worden opgelost met behulp van de simplex methode. Dit wordt uitgelegd aan de hand van een voorbeeld. De graaf die bij het voorbeeld hoort staat in figuur 19. De getallen die bij de pijlen staan zijn de capaciteiten. Zoals eerder uitgelegd worden pijlen met capaciteiten vervangen door drie pijlen met capaciteit. De graaf die bij dit gereduceerde probleem hoort staat in figuur 20. Door gebruik te maken van artificiële variabelen wordt een eerste toegestane oplossing (Figuur 21) gevonden. Dit kan ook door een willekeurige boom te kiezen in de graaf. De pijlen in de boom vormen dan de eenheidsmatrix. De pijlen die niet in de boom zitten, dus niet in de basis bij de simplex matrix krijgen een 1 in de eerste rij als ze op een vermeerderend pad liggen, een 1 als ze op een verminderend pad zouden vormen en een 0 als ze de flow niet beïnvloeden. Ieder van deze pijlen vormt een (ongericht) circuit als deze wordt toegevoegd aan de basis. De pijlen die op het circuit in dezelfde richting liggen als de toe te voegen pijl hebben een 1 in de bijbehorende rij, de pijlen die in tegengestelde richting liggen hebben een 1 in de bijbehorende rij en de pijlen die niet op het circuit liggen een 0. In de laatste kolom van de 26

Figuur 19: Max flow voorbeeld Figuur 20: Max flow gereduceerd 27

matrix staat hoeveel flow er door de pijlen in de basis stroomt. In de eerste rij van de laatste kolom staat de hoeveelheid flow die van s naar t loopt met een minteken. Op deze manier kan bij iedere gekozen boom de bijbehorende matrix worden opgesteld. In figuur 21 geven de getallen in de rondjes de b-waarden van de punten aan. De getallen langs de pijlen geven de flow aan. De zwarte pijlen zitten in de basis, de lichte pijlen niet. De basis vormt een (ongerichte) opspannende boom. De oplossing heeft een flow van 0. Er zijn zes pijlen die aan de basis kunnen worden toegevoegd, dit zijn de lichte pijlen in de graaf. Bij x 19 en x 34 staat een 1 in de eerste rij (de matrices die bij het voorbeeld horen zijn te groot om hier weer te geven). Dit betekent dat het toevoegen van deze pijlen een extra flow oplevert van s naar t. Het pivotten naar een van deze kolommen komt dus overeen met het vinden van een pad in het maxflow algoritme. Voor x 19 is dit het pad S-C-D-T, en voor x 34 is dat het pad S-C-F-T. In de kolom wordt de rij gekozen waarvoor b i aij minimaal is (met a ij 0). Dit komt overeen met de pijl waarvoor de capaciteit het kleinst is. Het levert een verhoging op van de flow met de kleinste capaciteit van de pijlen op het pad. In dit geval (pivotten naar x 19 ) is dat een verhoging van 1. Dit is de capaciteit van pijl C-D. In de graaf is de waarde van de st-flow te zien bij de pijl (t, s). In het maxflow algoritme wordt de pijl dan omgedraaid. Dit komt overeen met het wegvallen van x 14 uit de basis. Bij de tweede toegestane oplossing (Figuur 22) is het pad S-C-D-T toegevoegd. De pijl C-D heeft de laagste capaciteit, namelijk 1, dus de flow is verhoogd naar 1 en de pijl is omgedraaid in het max flow algoritme. Nu zijn er weer twee mogelijkheden om een pad van s naar t te creëren. Hiervoor moet x 16 of x 34 worden toegevoegd. Deze hebben een 1 in de eerste rij. x 14 heeft een 1 in de eerste rij, omdat het toevoegen van deze pijl aan de basis de flow zou verlagen. De andere pijlen hebben een 0 omdat ze geen pad van s naar t creëren en dus geen invloed hebben op de flow. Het toevoegen van x 16 aan de basis creërt het pad S-A-B-D-T. De pijl met de laagste capaciteit is S-A met 3. x 2 verdwijnt uit de basis. De stroom die over x 2 liep was 3, dus de st-flow wordt verhoogd met 3. Bij de derde toegestane oplossing (Figuur 23) is er de keuze tussen de paden S-C-B-D-T en S-C-F-T. Deze keuzes komen overeen met het pivotten in kolom x 12 en kolom x 34. Bij het tweede onderdeel van de pivotregel is in dit geval geen keuze. Stel dat de capaciteit van C-B 1 zou zijn, dan zou er de keuze zijn tussen het weghalen van x 8 en x 11. Het maakt dan voor de waarde van de flow niet uit welke wordt gekozen, want in beide gevallen 28

Figuur 21: Eerste toegestane oplossing Figuur 22: Tweede toegestane oplossing 29

Figuur 23: Derde toegestane oplossing worden zowel x 8 als x 11 gelijk aan 0. Een van de twee pijlen blijft in de basis maar krijgt capaciteit 0. Dit komt in het maxflow algoritme overeen met het omkeren van beide pijlen. Na het pivotten naar kolom x 12 is de oplossing in figuur 24 verkregen. Er zijn nu weer twee énen in de eerste rij. In de figuur is dit te zien doordat het toevoegen van de pijlen een (ongericht) pad opleveren van s naar t. x 27 voegt het pad S-E-C-B-D-T toe. De andere mogelijkheid is x 33. In deze kolom zijn er twee pivotmogelijkheden. Deze voegen geen extra flow toe, maar brengen x 33 in de basis en halen x 28 of x 30 uit de basis, waardoor in een volgende pivotstap het pad S-E-F-T kan worden toegevoegd. Voor het toevoegen van een pad kunnen dus meerdere pivotstappen nodig zijn. In dit geval is gekozen voor het pivotten naar x 27. Dit levert de oplossing in figuur 25 op. De flow is inmiddels verhoogt naar 6. Er is nu maar één mogelijkheid. x 34 moet worden toegevoegd aan de basis. Dit komt overeen met het pad S-E-C-F-T. De lijnstukken hebben nog capaciteiten van 7 (S-E), 4 (E-C), 2 (C-F) en 9 (F-T). Dit zijn de getallen die in de laatste kolom staan. De pijl met de kleinste restcapaciteit is bepalend. Dit betekent dus verhoging van de flow met 2 naar 8. 30

Figuur 24: Vierde toegestane oplossing Bij de zesde toegestane oplossing (Figuur 26) is x 29 weggevallen uit de basis. De capaciteit van pijl C-F is 0 en de pijl wordt omgedraaid. Nu is de enige mogelijkheid om x 33 toe te voegen. Dit komt overeen met het pad S-E-F-T. Dit leidt tot een verhoging van de flow met 4. In figuur 27 is de optimale oplossing te zien. Er zijn nu geen positieve getallen meer in de eerste rij. Er is dus geen pad meer van s naar t. De maximale flow in dit voorbeeld is dus 12. De zes pijlen die niet in de basis zitten, zijn allemaal omgekeerde pijlen. Die geven aan dat de capaciteit van de pijlen 0 is. Ook de 0 bij x 17 geeft dat aan. Deze zit wel in de basis omdat bij de vierde toegestane oplossing er twee mogelijk rijen waren om naar te pivotten. Dus x 17 of x 11 ging uit de basis en de ander werd 0. Om de simplex methode te kunnen vergelijken met het Ford-Fulkerson algoritme is het voorbeeld ook met het Ford-Fulkerson algoritme opgelost. Dit is te zien in de figuren 28 tot en met 40. Bij Ford-Fulkerson zou ook als eerste stap x 19 worden toegevoegd waardoor x 14 uit de basis verdwijnt. Bij de tweede stap wordt in het voorbeeld gekozen om x 12 toe te voegen. Bij Ford-Fulkerson zou eerst x 34 worden toegevoegd, omdat dit een pad op levert 31

Figuur 25: Vijfde toegestane oplossing Figuur 26: Zesde toegestane oplossing 32

Figuur 27: Optimale oplossing met minder pijlen. Vanaf dit punt loopt het voorbeeld dus niet meer gelijk met de Ford-Fulkerson methode. Bij Ford-Fulkerson zou hierna het laatste pad met 3 pijlen worden toegevoegd, door te pivotten bij x 33. Hierna worden de twee paden met 4 pijlen toegevoegd. In het voorbeeld zou dan gekozen moeten worden om te pivotten naar x 16 en x 27. Hierna is er nog maar 1 mogelijk pad, hiervoor moet x 12 worden toegevoegd aan de basis. Pivot regels max flow In het algemeen komen de pivotstappen in de simplexmethode overeen met stappen in het max flow algoritme. Een pivotstap komt overeen met het vinden en toevoegen van een nieuw pad van de bron naar het eindpunt. Het verhogen van de flow, en dus het verlagen van de capaciteit in de restgraaf komt in het algoritme overeen met het omkeren van een pijl. De eerste pivotkeuze is voor de kolommen. Als er meerdere kolommen zijn met een positieve getal in de eerste rij, dan moet de kolom gekozen worden die het pad toevoegt met het minste aantal pijlen, want het max flow algoritme is polynomiaal als steeds het kortste pad wordt toegevoegd. De keuze voor de pijl die verdwijnt uit de basis doet er niet toe. Bij het max flow algoritme wordt de pijl omgedraaid waarvoor de restcapaciteit het kleinst is. In de gereduceerde graaf 33

Figuur 28: Ford Fulkerson stap 1 Figuur 29: Ford Fulkerson stap 2 34

Figuur 30: Ford Fulkerson stap 3 Figuur 31: Ford Fulkerson stap 4 35

Figuur 32: Ford Fulkerson stap 5 Figuur 33: Ford Fulkerson stap 6 36

Figuur 34: Ford Fulkerson stap 7 Figuur 35: Ford Fulkerson stap 8 37

Figuur 36: Ford Fulkerson stap 9 Figuur 37: Ford Fulkerson stap 10 38

Figuur 38: Ford Fulkerson stap 11 Figuur 39: Ford Fulkerson stap 12 39

Figuur 40: Ford Fulkerson stap 13 is die vervangen door drie pijlen. De middelste van deze drie, degene in tegengestelde richting, zal uit de basis verdwijnen. Er is alleen een keuze als er meerdere pijlen zijn met dezelfde restcapaciteit. In dat geval kan er willekeurig een uit de basis worden gehaald, en de andere krijgt restcapaciteit 0. Bij de eerste pivotregel moet gekozen worden tussen de kolommen met een positieve waarde in de eerste rij. Als iedere pivotstap een verbetering op zou leveren, dan moest de kolom gekozen worden die het meeste niet-nul elementen bevat. Alle niet-nul elementen liggen op het circuit. Dus dit is een maat voor het aantal pijlen op het toe te voegen pad. Bij de tweede pivotregel is er alleen een keuze als er meerdere pijlen op het pad dezelfde capaciteit hebben. Het maakt dan niet uit welke keuze wordt gemaakt, de ene pijl verdwijnt uit de basis en de andere krijgt restcapaciteit nul. Het kan echter voor komen dat om één pad toe te voegen meerdere pivotstappen nodig zijn. Als dit het geval is dan zal deze pivotregel niet altijd het pad kiezen met het minste aantal pijlen. Het is dus niet zeker dat met deze pivotregels een gelijk aantal stappen moet worden gedaan als met Ford-Fulkerson. 40

Conclusie In dit project is er een verband gelegd tussen de simplex methode en optimalisatie problemen in netwerken. Het kortste pad probleem, het max flow probleem en het minimale gewicht perfecte bipartiete matching probleem zijn uitgelegd. Voor de eerste twee is er aan de hand van een voorbeeld de connectie gelegd met de simplex methode. Het derde probleem kan op een vergelijkbare manier als het max flow probleem worden opgelost met de simplexmethode. Als de problemen worden opgelost met de bekende algoritmes, dan kan bij iedere stap worden gekeken naar welke pivotstap bij de stap in het algoritme hoort. Op deze manier wordt het aantal pivotstappen proportioneel aan het aantal stappen van de algoritmes. Het is niet gelukt om pivotregels op te stellen zuiver in termen van het tableau en de graaf, zonder te verwijzen naar de stappen in het algoritme. Bronvermelding A. Schrijver, Theory of linear and integer programming, Willey-Interscience Series in Discrete Mathematics, John Wiley & Sons Ltd., Chichester, 1986, A Wiley-Interscience Publication. A. Schrijver, Combinatorial opitimization, Algorithms and Combinatorics, vol. 24, Springer-Verslag, Berlin, first ed., 2003, Polyhedra and Efficiency. 41