TAOP86 Optimering

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