GRASP = Greedy randomized adaptive search process Stefan Theussl Gerold Köb Goran Lovric Martin...
-
Upload
berndt-zeidler -
Category
Documents
-
view
127 -
download
6
Transcript of GRASP = Greedy randomized adaptive search process Stefan Theussl Gerold Köb Goran Lovric Martin...
GRASP = Greedy randomized adaptive search processGRASP = Greedy randomized adaptive search process
Stefan TheusslGerold Köb
Goran LovricMartin Gartner
Stefan TheusslGerold Köb
Goran LovricMartin Gartner
InhaltInhalt
EinleitungAlgorithmusSimulation, ParameterwahlRecheneffizienzUnser BenchmarkSchlussfolgerungen und AusblickLive-Demonstration in R
EinleitungAlgorithmusSimulation, ParameterwahlRecheneffizienzUnser BenchmarkSchlussfolgerungen und AusblickLive-Demonstration in R
Einleitung IEinleitung I
Grundprinzip: Erzeugung einer „greedy“ Startlösung mit
der dann Local Search gestartet wird Construction Phase:
Kandidatenliste der Städte, die von Startpunkt erreichbar sind
Auswahl eines Kandidaten nach Bewertung mit „greedy-function“ bis eine komplette Lösung vorliegt
…
Grundprinzip: Erzeugung einer „greedy“ Startlösung mit
der dann Local Search gestartet wird Construction Phase:
Kandidatenliste der Städte, die von Startpunkt erreichbar sind
Auswahl eines Kandidaten nach Bewertung mit „greedy-function“ bis eine komplette Lösung vorliegt
…
Einleitung IIEinleitung II
…Local Search:
Permutation der „greedy“-Startlösung und Berechnung des Zielwerts
wenn Zielwert besser als jener der „greedy“-Startlösung Zielwert als neuer „benchmark“
Wiederholung des Prozesses bis Abbruchbedingung erfüllt wird (zB Anzahl der Iterationen)
…Local Search:
Permutation der „greedy“-Startlösung und Berechnung des Zielwerts
wenn Zielwert besser als jener der „greedy“-Startlösung Zielwert als neuer „benchmark“
Wiederholung des Prozesses bis Abbruchbedingung erfüllt wird (zB Anzahl der Iterationen)
Ablauf des AlgorithmusAblauf des Algorithmus
„grasp.solve“ wird aufgerufen optimaler Zielwert = unendlich In „grasp.solve“ wird mit
„.construct_greedy“ eine Startlösung erzeugt
Startlösung in Funktion „.local_search“ wenn Zielwertverbesserung durch
„.local_search“ neuer Zielwert ist neues Optimum
Wiederholung bis Abbruchbedingung erfüllt (bei uns: Anzahl der Wiederholungen von „grasp.solve“)
„grasp.solve“ wird aufgerufen optimaler Zielwert = unendlich In „grasp.solve“ wird mit
„.construct_greedy“ eine Startlösung erzeugt
Startlösung in Funktion „.local_search“ wenn Zielwertverbesserung durch
„.local_search“ neuer Zielwert ist neues Optimum
Wiederholung bis Abbruchbedingung erfüllt (bei uns: Anzahl der Wiederholungen von „grasp.solve“)
Algorithmus IAlgorithmus I
Funktion: „grasp.solve“:Inputs: Distanzmatrix, StartpunktParameter: alpha, k, iterations, n
n wird „local_search“ übergebenk entspricht Anzahl der vertauschten
Städte beim k-opt-move
Funktion: „grasp.solve“:Inputs: Distanzmatrix, StartpunktParameter: alpha, k, iterations, n
n wird „local_search“ übergebenk entspricht Anzahl der vertauschten
Städte beim k-opt-move
Algorithmus IIAlgorithmus II
Funktion: „.construct_greedy“: min <- minimale Distanz max <- maximale Distanz alpha <- gleichverteilte ZZ zwischen 0 und
1Verteilung für alpha kann bei Aufruf von „.grasp.solve“ übergeben werden
treshold <- min + alpha * (max – min) Gewichtung zwischen der am kürzesten und der am weitesten entfernten Stadt
zufällige Auswahl eines Kandidaten, wo Distanz kleiner „treshold“
Funktion: „.construct_greedy“: min <- minimale Distanz max <- maximale Distanz alpha <- gleichverteilte ZZ zwischen 0 und
1Verteilung für alpha kann bei Aufruf von „.grasp.solve“ übergeben werden
treshold <- min + alpha * (max – min) Gewichtung zwischen der am kürzesten und der am weitesten entfernten Stadt
zufällige Auswahl eines Kandidaten, wo Distanz kleiner „treshold“
Algorithmus IIIAlgorithmus III
Funktion: „local_search“:Inputs: Distanzmatrix, greedy
StartlösungParameter: n, kk gibt Anzahl für k-opt-move ann ist Abbruchbedingung falls keine
Zielwertverbesserung gefunden wird (n ist Anzahl der maximalen Durchläufe der Local Search)
Funktion: „local_search“:Inputs: Distanzmatrix, greedy
StartlösungParameter: n, kk gibt Anzahl für k-opt-move ann ist Abbruchbedingung falls keine
Zielwertverbesserung gefunden wird (n ist Anzahl der maximalen Durchläufe der Local Search)
Simulation, Parameterwahl I
Simulation, Parameterwahl I
Zufallsvariable: alphaVerwendung bei Erzeugung einer
„greedy“ Startlösungtreshold <- min + alpha * (max –
min)
Simulation in R: mit festem seed (dh: gleichen Pseudozufallszahlen werden verwendet!)
folgende Beispiele mit 3-opt-moves!
Zufallsvariable: alphaVerwendung bei Erzeugung einer
„greedy“ Startlösungtreshold <- min + alpha * (max –
min)
Simulation in R: mit festem seed (dh: gleichen Pseudozufallszahlen werden verwendet!)
folgende Beispiele mit 3-opt-moves!
alpha ~ U(0,1)alpha ~ U(0,1)
kleineres alpha bessere Zielwerte
Zielwerte zwischen ca. 14.000 km und 45.000 km
kleineres alpha bessere Zielwerte
Zielwerte zwischen ca. 14.000 km und 45.000 km
0.0 0.2 0.4 0.6 0.8 1.0
15
00
02
00
00
25
00
03
00
00
35
00
04
00
00
a$alpha
a$
solu
tion
alpha ~ U(0, 0.2)alpha ~ U(0, 0.2)
Zielwerte zwischen ca. 14.000 km und 27.000 km
unser Optimum bei alpha von „0.054966“
Zielwerte zwischen ca. 14.000 km und 27.000 km
unser Optimum bei alpha von „0.054966“0.00 0.05 0.10 0.15 0.20
16
00
01
80
00
20
00
02
20
00
24
00
02
60
00
a$alpha
a$
solu
tion
s
0.00 0.05 0.10 0.15 0.20
16
00
01
80
00
20
00
02
20
00
24
00
02
60
00
a$alpha
a$
solu
tion
s
alpha ~ Γ(1, 6)alpha ~ Γ(1, 6)
Zielwerte zwischen ca. 40.000 km und 15.000 km aber Häufung bei Zielwerten zwischen 15.000 km und 20.000 km
Zielwerte zwischen ca. 40.000 km und 15.000 km aber Häufung bei Zielwerten zwischen 15.000 km und 20.000 km
0.0 0.2 0.4 0.6 0.8 1.0 1.2
15
00
02
00
00
25
00
03
00
00
35
00
04
00
00
a$alpha
a$
solu
tion
s
Simulation, Parameterwahl II
Simulation, Parameterwahl II
Parameter k: k-opt-move: Positionen von k Städten
wird zufällig vertauscht zB A-B-C-D-E 2-opt-move zB: A-D-C-B-E 3-opt-move zB: C-B-E-D-A
Simulation in R: mit festem seed (dh: gleichen Pseudozufallszahlen werden verwendet!)
Parameter k: k-opt-move: Positionen von k Städten
wird zufällig vertauscht zB A-B-C-D-E 2-opt-move zB: A-D-C-B-E 3-opt-move zB: C-B-E-D-A
Simulation in R: mit festem seed (dh: gleichen Pseudozufallszahlen werden verwendet!)
0.0 0.2 0.4 0.6 0.8 1.0
15
00
02
00
00
25
00
03
00
00
35
00
04
00
00
c$alpha
c$so
lutio
n
Vergleich bei Verwendung verschiedener k
Vergleich bei Verwendung verschiedener k
0.0 0.2 0.4 0.6 0.8 1.0
15
00
02
00
00
25
00
03
00
00
35
00
04
00
00
c$alpha
c$so
lutio
n
2-opt-move 3-opt-move
0.0 0.2 0.4 0.6 0.8 1.0
15
00
02
00
00
25
00
03
00
00
35
00
04
00
00
c$alpha
c$so
lutio
n
Vergleich bei Verwendung verschiedener k
Vergleich bei Verwendung verschiedener k
3-opt-move 4-opt-move
0.0 0.2 0.4 0.6 0.8 1.0
20
00
02
50
00
30
00
03
50
00
40
00
0
c$alpha
c$so
lutio
n
Recheneffizient IRecheneffizient I
Test der durchschnittlichen Rechenzeiten bei unterschiedlicher Wahl der Parameter
auf Banias-Centrino™ mit 1.4 Ghz, 1 MB L2 Cache, 512 MB
alpha keine Auswirkungen auf Rechenzeit hier alpha ~ U(0, 0.2)
Angaben in Sekunden!!!
Test der durchschnittlichen Rechenzeiten bei unterschiedlicher Wahl der Parameter
auf Banias-Centrino™ mit 1.4 Ghz, 1 MB L2 Cache, 512 MB
alpha keine Auswirkungen auf Rechenzeit hier alpha ~ U(0, 0.2)
Angaben in Sekunden!!!
Recheneffizienz IIRecheneffizienz IISekunden Iterations
Grasp(iterations = …)
Iterations LocalSearch(n = …)
k-opt-move(k = …)
19.466 1,000 10,000 2
122.965 1,000 10,000 3
423.745 1,000 10,000 4
2.442 100 10,000 2
5.138 250 10,000 2
9.316 500 10,000 2
19.929 1,000 10,000 2
14.706 1,000 1,000 2
15.224 1,000 2,500 2
16.747 1,000 5,000 2
18.381 1,000 7,500 2
19.311 1,000 10,000 2
Unser Benchmark:Unser Benchmark:
Start in Wien (und Rückkehr nach Wien) 14.422 km Route:
Wien -> Bratislava -> Budapest -> Zagreb -> Graz -> Linz -> Prag -> Berlin -> Hamburg -> Kopenhagen -> Stockholm -> Warschau -> Kiev -> St..Petersburg -> Helsinki -> Bergen -> Amsterdam -> Paris -> Bordeaux -> Madrid -> Marseille -> Genf -> Innsbruck -> Muenchen -> Salzburg -> Villach -> Venedig -> Siena -> Rom -> Athen -> Wien
Start in Wien (und Rückkehr nach Wien) 14.422 km Route:
Wien -> Bratislava -> Budapest -> Zagreb -> Graz -> Linz -> Prag -> Berlin -> Hamburg -> Kopenhagen -> Stockholm -> Warschau -> Kiev -> St..Petersburg -> Helsinki -> Bergen -> Amsterdam -> Paris -> Bordeaux -> Madrid -> Marseille -> Genf -> Innsbruck -> Muenchen -> Salzburg -> Villach -> Venedig -> Siena -> Rom -> Athen -> Wien
Unser Benchmark - Route:Unser Benchmark - Route:
-1000 -500 0 500 1000 1500
-200
0-1
000
010
00
-coords[, c(2, 1)][,1]
-coo
rds[
, c(2
, 1)][
,2]
Amsterdam
Athen
Bergen
Berlin
Bordeaux
BratislavaBudapest
Genf
Graz
Hamburg
Helsinki
Innsbruck
Kiev
Kopenhagen
Linz
Marseille
Madrid
Muenchen
Paris
Prag
Rom
Salzburg
Siena
Stockholm
St..Petersburg
Venedig
Villach
Warschau
Wien
Zagreb
Wien -> Bratislava -> Budapest -> Zagreb -> Graz -> Linz -> Prag -> Berlin -> Hamburg -> Kopenhagen -> Stockholm -> Warschau -> Kiev -> St..Petersburg -> Helsinki -> Bergen -> Amsterdam -> Paris -> Bordeaux -> Madrid -> Marseille -> Genf -> Innsbruck -> Muenchen -> Salzburg -> Villach -> Venedig -> Siena -> Rom -> Athen -> Wien
AusblickAusblick
Einbinden einer Hash-TabelleMulti-TaskingEffizienzsteigerungEinbinden einer Möglichkeit, dass
Wahl für Verteilung von alpha automatisch an Ergebnisverteilung angepasst wird
Package-Dokumentation
Einbinden einer Hash-TabelleMulti-TaskingEffizienzsteigerungEinbinden einer Möglichkeit, dass
Wahl für Verteilung von alpha automatisch an Ergebnisverteilung angepasst wird
Package-Dokumentation
Zum Abschluss …Zum Abschluss …
… Live-Demonstration in R… Live-Demonstration in R