WI2608 sheets week 8..

advertisement
Toewijzingsproblemen (H 8.3)
Toewijzingsprobleem (Assignment problem):
Elk van n oorsprongknopen moet 1-1 worden
gekoppeld aan één van n bestemmingsknopen. De
kosten van elk paar koppelingen is bekend. Vind een
toewijzing met minimale totale kosten.
Dit is een speciaal geval van een transportprobleem:
Voorraad = 1, vraag = 1, aantal leveranciers = aantal
afnemers. Simplex op het gerelaxeerde probleem
vindt dan automatisch een binaire oplossing.
Voorbeeld: Welke machine op welke locatie?
KOSTEN Locatie 
1
machine
1
13
2
15
3
5
2
16
7
3
12
20
10
4
11
13
6
KOSTEN Locatie 
1
machine
1
13
2
15
3
5
dummy1
0
2
16
M
7
0
3
12
20
10
0
4
11
13
6
0
Niet-toelaatbare toewijzingen krijgen kosten big M.
Als aantallen niet kloppen: voeg dummies toe met
kosten 0. Die worden uiteindelijk niet toegewezen.
Oplossing: 13, 24, 31, dummy12 Cost=30.
Hongaarse methode (H 8.4)
Het volgende algoritme (H.W. Kuhn, 1955) lost het
toewijzingsprobleem op als de vierkante
kostenmatrix gegeven is met kosten  0:
1. Trek in elke kolom het kleinste getal van elk
getal in die kolom af.
2. Trek in elke rij het kleinste getal van elk getal in
die rij af.
3. Streep alle nullen weg met een minimaal aantal
horizontale en/of verticale strepen.
Als aantal strepen = aantal rijen ga naar 5, anders 4
4. Trek kleinste getal dat niet weggestreept is af
van elk niet weggestreept getal. Tel het getal op
bij elk getal op het kruispunt van strepen. Ga
naar 3.
5. Wijs elke rij aan een kolom toe zodat die kolom
0 heeft in die rij, en elke kolom één keer wordt
toegewezen.
Aftrekken van een getal van elk getal in een rij of
kolom verandert de optimale oplossing niet:
n
x
i 1
ij
1
n
en
x
j 1
ij
1
Dit reduceert de kosten van elke oplossing met
hetzelfde vaste getal. De gereduceerde kosten
blijven  0. Een oplossing met gereduceerde
kosten = 0 is dus optimaal.
Aftrekken van het kleinste niet-weggestreepte
getal van alle kolommen zorgt dat alle nietweggestreepte getallen niet-negatief blijven, maar
de weggesteepte nullen worden wel negatief. Om
dit te repareren kun je hetzelfde getal optellen bij
alle weggestreepte rijen en kolommen.
Het effect is dat het getal wordt opgeteld op de
kruispunten.
Voorbeeld:
13 16 12 11
15 M 20 13
5
7 10 6
0
0
0
0
Kostenmatrix
2
2
0
0
5
1
M-13 7
2
5
0
0
Stap 3
0
0
1
0
0
0
0
0
0
0
Stap 3: wegstrepen
lukt niet met 3 strepen
2 5 1 0
2 M-13 7 0
0 2 5 1
0 0 0 0
Na stap 1 en 2
2 4 0 0
2 M-14 6 0
0 1 4 1
1 0 0 1
Stap 4
0
0
0 0
Stap 5
Toewijzing: 13, 24, 31, 42.
0
0
Dynamisch programmeren (H 10)
Dynamisch programmeren is een techniek voor het
optimaal nemen van een rij van afhankelijke
beslissingen.
Voorbeeld (10.1): Vind de kortste route van A naar J
in het “Stage Coach” probleem (10.1):
Afstanden
Greedy aanpak (telkens de kortste) levert route
A  B  F  I  J, met lengte 13. Niet optimaal!
Trial-and-error: 3  3  2 = 18 mogelijkheden.
Aanpak met dynamisch programmeren:
Stadium (stage) n: knopen die je in n-1 stappen kunt
bereiken.
Als je de kortste afstand van elke knoop uit stage n
tot eindknoop J weet kun je de kortste afstand van
de knopen uit stage n-1 uitrekenen:
s = toestand (= knoop in stage n)
xn = toestand in stage n+1 waar je naar toe gaat
fn(s,xn) = kosten vanuit s na beslissing xn, tot eind
fn*(s) = minimale kosten vanuit s tot eind:
fn*(s) = min {fn(s,xn) | xn}
Begin bij de laatste stage:
Vanuit E kun je via H of I met lengte 1+3 en 4+4.
Kortste pad vanuit E gaat dus via H, lengte = 4.
Kortste paden zijn:
ACEHJ
ADEHJ
ADFIJ
alle met lengte 11.
Optimale routes
Algemeen over dynamisch programmeren:
Dynamisch: Het probleem heeft (kan worden
geformuleerd) met een tijdsaspect
Programmeren: Oplostechniek
Het probleem moet opgedeeld zijn in stadia (stages)
met een beslissing te nemen in elk stadium.
Elke stadium bestaat uit een aantal mogelijke
toestanden (states).
Een beslissing transformeert een toestand in een
toestand uit een volgende stage.
De optimale beslissing voor een toestand moet
onafhankelijk zijn van beslissingen in voorgaande
stadia. Alleen afhankelijk van de toestand, niet van
hoe je er gekomen bent.
De doelwaarde voor een toestand in stadium n is uit
te rekenen uit de optimale doelwaarden voor
stadium n+1.
De optimale beslissingen in het laatste stadium
moeten eenvoudig te vinden zijn. Werk recursief
terug naar de eerste stage.
Voorbeeld (10.3 Ex.2): Toewijzing van medische
teams.
Vind een toewijzing van 5 teams aan 3 landen die de
totale hoeveelheid toegevoegde mensjaren
maximaliseert.
Stadium n: toewijzen van aantal teams aan land n
sn: aantal teams dat in stadium n nog te verdelen is:
s1 = 5,
s2 = s1 – x1, s3 = s2 – x2
pi(xi) is de toegevoegde waarde van xi teams in land i
(waarden uit Tabel 10.1)
Maximaliseer
p1(x1) + p2(x2) + p3(x3)
zodat
x1 + x2 + x3 = 5,
en
xi  0.
Alle mogelijkheden om teams te verdelen
Verband tussen de stadia
Los de stadia van achteren naar voren op:
Optimale oplossing:
x1* = 1, s2 = 5 – 1 = 4, x2* = 3, s3 = 4 – 3 = 1, x3* = 1
Land 1, 2 en 3 krijgen resp. 1, 3 en 1 teams. Dit levert
170.000 extra mensjaren op.
Optimale oplossing
Download