Billigaste väg Billigaste väg 7 1 3 6 1 2 3 1 t 7 7 4 5 5 2 s 5 3 6 4 4 4 6 Indata: Riktad graf G = (N, B) med bågkostnader c, start/slutnod s, t. Billigaste väg-problemet: Finn en väg från s till t med minimal kostnad. Kostnaden för en väg är summan av kostnaderna för de bågar som ingår i vägen. Skicka en (odelbar) enhet från s till t på billigaste sätt. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 Kaj Holmberg (LiU) 1 / 29 Billigaste väg: Matematisk modell TAOP86 Optimering 4 4 5 1 8 Variabeldefinition: xij = 1 om båge (i, j) ingår i vägen. X min cij xij 3 1 6 2 3 (i,j)∈B 5 7 −1 då i = s X X 1 då i = t xji − xij = 0 fö j:(j,i)∈B j:(i,j)∈B −x12 x12 för alla i ∈ N −x13 x13 +x32 −x32 −x24 −x34 +x34 x25 Nodjämviktsvillkor: (in - ut) Anslutningsmatris: A = TAOP86 Optimering −x25 x24 xij ∈ {0, 1} för alla (i, j) ∈ B Kaj Holmberg (LiU) 2 / 29 Exempel 2 då 24 september 2015 24 september 2015 3 / 29 Kaj Holmberg (LiU) −x35 +x35 −x45 +x45 = = = = = −1 0 0 0 1 (1) (2) (3) (4) (5) −1 −1 0 0 0 0 0 0 1 0 1 −1 −1 0 0 0 0 1 −1 0 0 −1 −1 0 0 0 0 1 0 1 0 −1 0 0 0 0 1 0 1 1 TAOP86 Optimering 24 september 2015 4 / 29 Billigaste väg: Matematisk modell i vektor/matrisform Med x som bågvektor: −1 då i = s 1 då i = t bi = 0 fö min då Billigaste väg: Matematisk modell i vektor/matrisform Definition cT x Ax = b x ∈ {0, 1}m −1 1 aik = 0 En matris A är fullständigt unimodulär om varje underdeterminant har värdet 0, 1 eller -1. Sats Varje anslutningsmatris, A, är fullständigt unimodulär. om båge k startar i nod i om båge k slutar i nod i för övrigt Sats Om A är en fullständigt unimodulär matris och b är en heltalsvektor, så är alla extrempunkter till mängden X = {x : Ax = b, x ≥ 0} heltaliga. A kallas anslutningsmatris. En kolumn i A har ett element lika med -1, ett lika med 1 och resten nollor. Detta gäller även b. Summering av Ax = b ger 0 = 0. Sats Ett LP-problem vars bivillkorsmatris är en anslutningsmatris och vars högerled är heltaligt, har heltalig optimallösning. Slutsats Ax = b innehåller ett redundant bivillkor (raderna är linjärt beroende). Billigaste väg-problem kan betraktas som LP-problem. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 5 / 29 Kaj Holmberg (LiU) TAOP86 Optimering Billigaste väg Lösningsmetoder för billigaste vägproblemet LP-formulering: X min cij xij yi : dualvariabel, “nodpris”, för nod i. (i,j)∈B då −1 då i = s 1 då i = t xji − xij = 0 fö j:(j,i)∈B j:(i,j)∈B X X 24 september 2015 6 / 29 LP-dualen: max yt − ys då yj − yi ≤ cij för alla (i, j) för alla i ∈ N xij ≥ 0 för alla (i, j) ∈ B Ett redundant bivillkor i primalen ger en frihetsgrad i dualen. Sätt ys = 0. LP-dualitet ger: Slutsats Om LP-formuleringen av billigaste väg-problemet har ändligt optimum, så är alla xij lika med 1 eller 0 i optimallösningen. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 7 / 29 Om y är en optimal duallösning (med ys = 0), så är yk är lägsta kostnaden för att komma till nod k från s. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 8 / 29 Nodmärkningsmetoder LP-dual: max yt Nodmärkningsmetoder Mål: ys = 0, yj = min(cij + yi ) för alla j. då yj − yi ≤ cij för alla (i, j) (samt ys = 0) i Bivillkoren: yj ≤ cij + yi . Acyklisk graf: Målfunktionen: max yt ⇒ öka alla nodpriser så mycket som möjligt. Sortera noderna så att i < j för alla bågar (i, j) ∈ B. Märk noderna i den ordningen: yj = min(cij + yi ) för j = 1, . . . , n. Slutsats: Sätt yj = min(cij + yi ). i<j i (Bellmans ekvationer. Används för dynamisk programmering.) Primal tolkning: Vi vill finna billigaste sättet att komma till nod j. Frånvaron av cykler gör att inga nodmärkningar behöver göras om. Märk nod j med (yj , pj ), där pj är det i som gav min (föregångaren). Ickenegativa kostnader: Dijkstras metod Praktisk fråga: I vilken ordning skall vi undersöka noderna? Ordningen är ej känd. Märk (permanent) först den nod som ger lägst nodpris. Tre olika fall: 1. Inga cykler. 2. Inga negativa kostnader. 3. Negativa kostnader och cykler. Kaj Holmberg (LiU) Frånvaron av negativa kostnader gör att inga nodpriser kan sänkas, dvs att inga permanenta nodmärkningar behöver ändras. (Försök inte ens.) TAOP86 Optimering 24 september 2015 9 / 29 Billigaste väg: Dijkstras metod Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 10 / 29 24 september 2015 12 / 29 Dijkstras metod för billigaste väg: Exempel A: permanent märkta noder. 0. Sätt ys = 0 och yj = M för alla j 6= s, samt A = {s}. (4,3) 1. Finn nod (k) med lägsta temporära nodpris: yk = min yj . (6,2) 2 2 j6∈A Lägg till k till A, dvs. gör märkningen permanent. (0,−) 2. Om slutnoden (eller alla noder) permanent märkt: Stopp. 5 3 (3,1) Viktigt för effektiviteten: Titta inte på permanent märkta noder, j ∈ A, i steg 1 och 3. Komplexitet O(|N|2 ). Billigaste vägen nystas upp bakifrån med föregångare pj (börja med j = t). 1 4 3 4. Gå till 1. 1 1 1 3. Uppdatera de temporära nodpriser som blir lägre via yk , dvs. om ckj + yk < yj för j 6∈ A. 4 5 2 5 5 (7,4) Nysta upp vägen baklänges. Billigaste väg: 1 - 3 - 2 - 4 - 5. Kostnad: 7. Nodpriserna ger optimal duallösning. Obs: Först görs nodmärkningen helt färdigt. Sedan hittar man vägen. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 11 / 29 Kaj Holmberg (LiU) TAOP86 Optimering Billigaste väg Billigaste väg: Fords metod Negativa kostnader och cykler: Fords metod 0. Sätt ys = 0 och yj = M för alla andra noder. 1. Finn oavsökt nod (k) med lägsta nodpris (min yj ). Finns ingen ordning så att nodmärkningar inte behöver göras om. j Skilj ej på permanent och temporär märkning. 2. Uppdatera de nodpriser som blir lägre via yk . Om en avsökt nod får lägre nodpris, blir den oavsökt. Avsökning av nod: Kolla utgående bågar. Uppdatera alla nodpriser som blir lägre. Om inget nodpris kan sänkas är noden avsökt. 3. Markera nod k som avsökt. Om en avsökt nod får lägre nodpris, blir den oavsökt. 5. Gå till 1. Stoppkriterium: Alla noder avsökta. (Sämre än Dijkstra.) Billigaste vägen nystas upp bakifrån mha pj . Cykel med negativ kostnad ger obegränsad lösning. Nodpriserna i cykeln kommer att uppdateras ett oändligt antal gånger. Man kan sluta efter |N| gånger. Alla nodpriser kan ändras. (I Dijkstras metod rör man inte de permanent märkta.) Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 13 / 29 Fords metod för billigaste väg: Exempel 4. Om all noder är avsökta: Stopp. I steg 1 och 2 beaktas alla noder: Komplexitet O(|N|3 ). Kaj Holmberg (LiU) TAOP86 Optimering 2 (0,−) 5 4 5 −5 3 1 3 3 −2 1 (0,−) 5 −5 1 3 3 −2 1 5 5 5 (3,1) (1,4) (8,3) (7,3) TAOP86 Optimering 4 5 1 Alla noder avsökta. Finn väg baklänges. Billigaste väg: 1 - 2 - 4 - 3 - 5. Kostnad: 7. Kaj Holmberg (LiU) 2 2 1 2 3 4 5 3 5 (3,1) (2,4) (4,2) (6,2) (7,2) 2 14 / 29 Fords metod för billigaste väg: Exempel 2 (2,3) (4,3) (5,1) (5,1) 24 september 2015 (8,3) (7,4) (6,3) 1 2 3 4 5 3 2 4 Vi kommer att fortsätta sänka nodpriserna för nod 4, 3, 2. Negativ cykel: 2 - 4 - 3 - 2. Oändligt bra primal lösning. Ingen tillåten duallösning. 24 september 2015 15 / 29 Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 16 / 29 Billigaste väg Billigaste väg: Generaliseringar Optimala nodmärkningar: (3,s) 7 1 (0,−) 3 5 3 6 5 (17,6) 1 1 t 7 7 4 6 2 3 5 2 s 4 4 4 (9,1) (4,s) Kan lösas med samma metoder. X Billigaste väg min cij yj = min(cij + yi ) (15,3) (10,1) Dyraste väg 6 (13,4) Min produkt Alla noder har en märkning. Billigaste väg-träd: (3,s) 7 1 (0,−) 3 5 3 4 2 3 1 t 7 6 (4,s) 4 (9,1) cij 6 yj = max(cij + yi ) ys = 0 yj = min(cij · yi ) ys = 1 yj = max(cij · yi ) ys = 1 i i max Min max min max cij yj = min(max(cij , yi )) ys = 0 Max min max min cij yj = max(min(cij , yi )) ys = M ij ij 4 4 cij ij Y ys = 0 Max produkt (17,6) 1 ij Y cij ij 5 5 7 min (15,3) (10,1) 6 2 s max i ij X i i i I de fyra sista fallen förutsätts cij ≥ 0 för alla (i, j). (13,4) Vi får billigaste väg från s till alla andra noder. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 17 / 29 Billigaste väg: Alla till alla Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 18 / 29 Maxflödesproblemet Indata: Riktad graf G = (N, B) med bågkapaciteter u, start/slutnod s, t. Floyd-Warshalls metod för att finna billigaste väg mellan alla nodpar: Skicka så mycket som möjligt från s till t. 1 Sätt dij = cij för alla i, j. 2 För k = 1, . . . , |N|, för i = 1, . . . , |N|, för j = 1, . . . , |N| sätt dij = min(dij , dik + dkj ). Variabeldefinition: xij = flöde i båge (i, j). max då Komplexitet O(|N|3 ). f −f då i = s f då i = t xji − xij = 0 fö j:(j,i)∈B j:(i,j)∈B X X för alla i ∈ N 0 ≤ xij ≤ uij för alla (i, j) ∈ B Kan användas för att göra om ett TSPr till ett ∆TSP(r). f fri Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 19 / 29 Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 20 / 29 Lösningsmetod för maxflödesproblemet Maxflödesproblemet Påfyllnadsmetoden (Edmonds-Karp) Sats Varje tillåtet flöde ger en undre gräns på f ∗ . Kapaciteten hos varje (s, t)-snitt ger en övre gräns på f ∗ . 0. Börja från noll. 1. Finn maximal flödesökande väg från s till t. Avbryt om ingen väg finns. 2. Skicka så mycket som möjligt den vägen. Sats Kapaciteten hos ett minsnitt är lika med den maximala flödesstyrkan, f ∗ . Sats Flödesstyrkan är maximal (och lika med kapaciteten hos ett minsnitt) om och endast om en flödesökande väg saknas. 3. Ändra tillåtna riktningar. 4. Gå till 1. xij = 0: Framåt (öka). Tillåtna riktningar: 0 < xij < uij : xij = uij : En flödesökande väg finnes metodiskt med Dijkstras metod (max av min). Framåt och bakåt. Minst en ytterligare enhet skickas varje iteration. Det krävs högst f ∗ iterationer. Bakåt (minska). Komplexitet O(f¯|N|2 ) där f¯ ≥ f ∗ . Pseudopolynomisk metod. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 Kaj Holmberg (LiU) 21 / 29 Maxflöde: Exempel TAOP86 Optimering 24 september 2015 22 / 29 Dynamisk programmering Billigaste väg-problem i acyklisk nivåindelad graf. Tid! (1,1) (3,2) (M,−) 1 2 (3,3) (4,1) (4,3) 3 1 4 2 5 8 3 6 9 4 7 10 11 Nodmärkningsmetod (Bellmans ekvationer): Ta en nivå, Sk , i taget: • y1 = 0. • För k = 1, . . . , N: För varje j ∈ Sk : Sätt yj = min (cij + yi ). (2,2) (1,1) i∈Sk−1 Ordningen inom en nivå oviktig. Vägen kommer att passera en av noderna i varje nivå. Vet ej vilken. P P Q Q Möjliga målfunktioner: min , max , min , max , min max, max min. Maxflöde och minsnitt funna. Maxflöde: 5. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 23 / 29 Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 24 / 29 Dynamisk programmering: Lagerhållningsproblem Dynamisk programmering: Kappsäcksproblem Nod j man ska till i Sk kallas tillstånd, sk . Noden man kommer från kallas styrning, xk . min Kan lösa allt som “är” ett väg-problem i en acyklisk nivåindelad graf. X cj xj då X j Exempel: Lagerhållningsproblem aj xj ≤ b, 0 ≤ xj ≤ uj och heltal, för alla j j Varje variabel ses som en nivå. Tillstånd: sk = antal enheter i lager efter period k. Varje nivå innebär ett ökat utnyttjande av den gemensamma resursen b. Styrning: xk = antal enheter som köps/produceras/säljs i period k. Tillstånd: sk = den del av högerledet b som får användas till de k första variablerna. sk = 2 Koppling mellan nivåerna: sk−1 = sk − ak xk sk = 1 sk = 0 Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 25 / 29 Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 Dynamisk programmering: Kappsäcksproblem Dynamisk programmering: Beräkningar Ex: max 7x1 + 2x2 + 4x3 då 2x1 + 3x2 + 2x3 ≤ 4, x1 ∈ {0, 1}, x2 ∈ {0, 1}, x3 ∈ {0, 1, 2} Kan göra beräkningarna i en tabell p.g.a. strukturen hos nätverket. s x1Z Z1 0 1 f1 (s1 ) x̂1 (s1 ) s x3Z Z3 0 1 2 f3 (s3 ) x̂3 (s3 ) b=4 b=3 7 4 b=2 7 2 8 b=1 7 2 b=0 Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 27 / 29 0 0 0 0 1 0 0 0 2 0 7 7 1 3 0 7 7 1 4 0 7 7 1 s x2Z Z2 0 1 f2 (s2 ) x̂2 (s2 ) 0 0 0 0 1 0 0 0 2 7 4 7 0 3 7 4 7 0 4 7 11 8 11 1 Uppnystning: s3 = 4, x3 = 1, s2 = 2, x2 = 0, s1 = 2, x1 = 1, z = 11. Kaj Holmberg (LiU) 0 0 0 0 1 0 0 0 TAOP86 Optimering 2 7 7 0 3 7 2 7 0 26 / 29 4 7 2 7 0 24 september 2015 28 / 29 DynP: Kappsäcksproblem Detta angreppssätt kan användas på många typer av “kappsäckar”. Eller där man har ett “lager” som fylls på eller töms vid olika tidpunkter. Även på kontinuerliga “kappsäckar”, om man diskretiserar. Man inför då ett tillstånd för varje möjlig nivå i kappsäcken/lagret. Och bågar, framåt i tiden, för varje möjlig ändring. Kaj Holmberg (LiU) TAOP86 Optimering 24 september 2015 29 / 29
© Copyright 2024