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: 13, 24, 31, dummy12 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: 13, 24, 31, 42. 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: ACEHJ ADEHJ ADFIJ 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