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) x n = toestand in stage n+1 waar je naar toe gaat f n (s,x n ) = kosten vanuit s na beslissing x n, tot eind f n *(s) = minimale kosten vanuit s tot eind: f n *(s) = min {f n (s,x n ) x n } 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 s n : aantal teams dat in stadium n nog te verdelen is: s 1 = 5, s 2 = s 1 x 1, s 3 = s 2 x 2 p i (x i ) is de toegevoegde waarde van x i teams in land i (waarden uit Tabel 10.1) Maximaliseer p 1 (x 1 ) + p 2 (x 2 ) + p 3 (x 3 ) zodat x 1 + x 2 + x 3 = 5, en x i 0.
Alle mogelijkheden om teams te verdelen Verband tussen de stadia
Los de stadia van achteren naar voren op: Optimale oplossing: x 1 * = 1, s 2 = 5 1 = 4, x 2 * = 3, s 3 = 4 3 = 1, x 3 * = 1 Land 1, 2 en 3 krijgen resp. 1, 3 en 1 teams. Dit levert 170.000 extra mensjaren op.
Optimale oplossing
Voorbeeld (10.3 Ex.3): NASA ontwikkelt een nieuwe satelliet. Drie teams werken parallel aan verschillende technologieën. Het project is geslaagd als minstens één van de teams slaagt. Twee extra wetenschappers kunnen aan de teams worden toegevoegd. Ze beïnvloeden de faalkans van de teams als volgt: Faalkans Aantal team 1 team 2 team 3 0 0,4 0,6 0,8 1 0,2 0,4 0,5 2 0,15 0,2 0,3 De faalkans zonder extra wetenschappers is de kans dat alledrie de teams falen: 0,4 0,6 0,8 = 0,192. In fase n bepaal je hoeveel wetenschappers team n krijgt. s n is aantal wetenschappers dat nog beschikbaar is. De faalkans vanaf fase n is de faalkans vanaf fase n+1 maal de faalkans van team n. Recursie: f n (s n, x n ) = p n (x n ) f n+1 * (s n x n ) f n * (s n ) = min {f n (s n, x n ) x n }
Tabel van fase 3: s 3 f * 3 (s 3 ) * x 3 0 0,8 0 1 0,5 1 2 0,3 2 Tabel van fase 2: s 2 x 2 0 1 2 f * 2 (s 2 ) * x 2 0 0,48 0,48 0 1 0,3 0,32 0,3 0 2 0,18 0,2 0,16 0,16 2 Bijvoorbeeld: s 1 = 1, x 2 = 0 betekent: je hebt één wetenschapper over, je geeft er géén aan team 2. Faalkans is faalkans van team 2 zonder extra hulp (0.6) maal kleinste faalkans van de rest van het project, waarbij je nog één wetenschapper te verdelen hebt (vorige tabel, s 3 = s 2 x 2 = 1 0 = 1, kans 0,5). 0,6 0,5 = 0.3 komt in de tabel. Onder f 2 * (s 2 ) komt de minimale waarde van de rij daarvoor. Onder x 2 * komt de waarde van x 2 waar het minimum wordt aangenomen. Tabel van fase 1: s 1 x 1 0 1 2 f * 1 (s 1 ) * x 1 2 0,064 0,06 0,072 0,06 1 Je begint met twee wetenschappers dus alleen s 1 = 2 is mogelijk. Oplossing:
x 1 * = 1 (tabel fase 1), dus s 2 = s 1 x 1 * = 2 1 = 1, dus (tabel fase 2) x 2 * = 0, dus s 3 = s 2 x 2 * = 1 0 = 1 en x 2 * = 1 (tabel fase 3) Gevolg: team 1 en 3 krijgen elk één wetenschapper. Faalkans is nu 0,06. In dit simpele voorbeeld kun je alle mogelijke verdelingen van wetenschappers opschrijven: Team 1 Team 2 Team 3 Faalkans 2 0 0 0,072 1 1 0 0,064 1 0 1 0,06 0 2 0 0,064 0 1 1 0,08 0 0 2 0,072 Faalkans zit tussen 0,06 en 0,08
Voorbeeld (10.3 Ex.4): Een bedrijf heeft in het voorjaar 255 medewerkers nodig, in de zomer 220, in de herfst 240 en in de winter 200. Ontslaan/inhuren kost het verschil in werknemers gekwadrateerd, maal $200. Boventallig personeel kost $2000 per medewerker per seizoen. Vind de goedkoopste bezetting. Maximaal 255 medewerkers. Stadium 4 = voorjaar (eenvoudig op te lossen). x n = aantal medewerkers in seizoen n s n = x n-1 legt de toestand vast r n = minimaal aantal medewerkers Aantal toestanden per stadium is oneindig. Stadium 4: x 4 * = 255 s 4 (=x 3 ) f 4 *(s 4 ) x 4 * 200 = r 4 s 4 255 200(255-s 4 ) 2 255 f 3 (s 3,x 3 ) = 200(x 3 -s 3 ) 2 + 2000(x 3-200) + f 4 *(x 3 ) f 3 *(s 3 ) = min {200(x 3 -s 3 ) 2 + 2000(x 3-200) + 200(255-x 3 ) 2 200 x 3 255} Afgeleide naar x 3 : 400(x 3 -s 3 ) + 2000 400(255-x 3 ) Tweede afgeleide naar x 3 : 800 Minimum: x 3 * = s 3 /2 + 125 s 3 = x 2 [240,255] dus x 3 * [245,255] [200,255] is feasible
Stadium 3 f 3 *(s 3 ) = f 3 (s 3,x 3 *) = 100s 3 2 50.000s 3 + 6.355.000 s 3 (=x 2 ) f 3 *(s 3 ) x 3 * 240 s 3 255 100s 2 3-50.000s 3 +6.355.000 s 3 /2+125 Stadium 2: f 2 (s 2,x 2 ) = 200(x 2 -s 2 ) 2 + 2000(x 2 -r 2 ) + f 3 *(x 2 ) = 300x 2 2-400x 2 s 2 +200s 2 2-48.000x 2 +5.915.000 Afgeleide: 600x 2 400s 2 48000 = 0 x 2 = 2/3s 2 + 80 is het minimum als 240 x 2 255. Dit is alleen waar als 240 s 2 255. Voor de waarden 220 s 2 240 wordt het minimum aangenomen in x 2 = 240 Stadium 2: s 2 (=x 1 ) f 2 *(s 2 ) x 2 * 200s 2 2-96000s 2 +11635000 200/3s 2 2-32000s 2 +3955000 220 s 2 240 240 s 2 255 240 2/3s 2 + 80 Stadium 1: f 1 (s 1,x 1 ) = 200(x 1 -s 1 ) 2 + 2000(x 1 -r 1 ) + f 2 *(x 1 ) = 200(2x 2 1-980x 1 +121.000) als 220 x 1 240 = 200(4/3x 2 1-660x 1 +82.600) als 220 x 1 255 (r 1 = 220, s 1 = 255, s 2 = x 1 )
x 1 * = 240 f 1 (s 1,x 1 *) = 200.000 als 220 x 1 240 x 1 * = 247,5 f 1 (s 1,x 1 *) = 185.000 als 240 x 1 255 s 1 f 1 *(s 1 ) x 1 * 255 185.000 247,5 Optimale oplossing is dus: x 1 * = 247,5 x 2 * = 245 x 3 * = 247,5 x 4 * = 255 Verwachte kosten zijn $185.000
Opgave (generalisatie van 10.4 Ex. 7): Iemand speelt een spel waarbij hij zijn inzet verdubbelt (met kans p) of kwijtraakt. Hij start met 3 fiches en wil met drie keer spelen op 5 fiches uitkomen. Hoeveel moet hij elke keer inzetten om kans hierop te maximaliseren? Gewonnen fiches worden niet ingezet. s n is het aantal fiches aan het begin van spel n, x n is het aantal fiches dat wordt ingezet. De uitkomst van spel n is s n x n met kans 1 p en s n + 2x n met kans p Tabel voor n = 3 x 3 s 3 0 1 2 f 3 *(s 3,x 3 ) x 3 * 3 p p 2 4 p p 1 5 1 1 0 Tabel voor n = 2 s 2 x 2 0 1 2 f 2 *(s 3,x 3 ) x 2 * 2 p 2 p 2 p 2 1,2 3 p p 2 p p 0,1 4 p 2p-p 2 2p-p 2 1 5 1 1 0
Tabel voor n = 3 x 1 s 0 1 2 f 1 *(s 3,x 3 ) x 1 * 1 3 p 3p 2-2p 3 p p 0,2 3p 2-2p 3 1 1 e regel als 0 p 1/2 (winstgevend voor bank) 2 e regel als 1/2 p 1 (winstgevend voor speler) Voorbeeld: p = 0,6: Optimale strategie: Zet 1 fiche in. Als je wint zet je niets meer in. Als je verliest zet je 1 of 2 fiches in. Als je verliest heb je pech. Als je wint zet je 1 of geen, resp. 1 fiche in. In het laatste spel zet je 5 s 3 in. Met deze strategie is de kans 5 fiches
Wat als je gewonnen fiches ook mag inzetten? x 3 s 3 0 1 2 3 4 5 6 7 f 3 * x 3 * 3 p p 2 4 p p 1 5 1 1 0 6 1-p 1-p 1 7 1-p 1-p 2 8 1-p 1-p 3 9 1-p 1-p 4 10 1-p 1-p 5 11 1-p 1-p 6 12 1-p 1-p 7 x 2 s 2 0 1 2 3 4 5 6 f 2 * x 2 * 2 p 2 p 2 p 2 1,2 3 p p 2 p p(1-p) p 3 4 p 2p-p 2 p(1-p) p(1-p) p(1-p) 2p-p 2 1 5 1 2p(1-p) 2p(1-p) p(1-p) p(1-p) p(1-p) 1 0 6 1-p 1-p 2 2p(1-p) 2p(1-p) p(1-p) p(1-p) p(1-p) 1-p 2 2,3 x 1 s 1 0 1 2 3 f 1 * x 1 * 3 p 3p 2-2p 3 p p-p 2 3p 2-2p 3 1 Dezelfde oplossing (maar meer werk!)
Opgave: Mike Phoney woont op de Long Street nr 312 en hij werkt voor een telefoonmaatschappij. Long Street ligt in een achterstandswijk en het komt regelmatig voor dat wanbetalers moeten worden afgesloten. Het is de taak van Mike om dit in Long Street te verzorgen. Elke ochtend om 8.00 uur krijgt hij de huisnummers doorgebeld die moeten worden afgesloten en gaat hij op pad om dit te doen. Zijn strategie is om eerst linksaf te slaan en achtereenvolgens alle lagere huisnummers van zijn lijstje af te sluiten. Bij het laagste nummer keert hij om en gaat terug langs zijn eigen huis om alle hogere nummers af te werken. Hiermee loopt hij meteen de kortst mogelijke route. De telefoonmaatschappij legt echter andere criteria aan. Zij willen dat de gemiddelde afsluittijd zo klein mogelijk is. De afsluittijd is de tijd waarop Mike een bepaalde woning afsluit. Omdat het afsluiten alleen neerkomt op het omdraaien van een schakelaar, is de afsluittijd evenredig met de totale lengte van de route die Mike tot die woning heeft afgelegd. Het komt er dus op neer dat de som van de afsluittijden van alle af te sluiten woningen minimaal moet worden. Dit kan betekenen dat Mike niet meer de kortst mogelijke route loopt. Bepaal met behulp van dynamisch programmeren de beste route in het geval dat de volgende huisnummers moeten worden afgesloten: 118, 372, 394 en 739. De afstand tussen twee huisnummers is evenredig met het verschil van de nummers. Hint: Mike hanteert de volgende werkwijze: na elke afsluiting heeft hij bepaald of hij links- of rechtsaf moet gaan en sluit hij het eerstvolgende nummer van zijn lijstje in die richting af, die hij nog niet heeft gehad. In het algemeen kan hij dus een zigzagroute volgen, waarbij hij bepaalde woningen meerdere malen passeert.
Oplossing: We moeten eerst een aantal fasen onderscheiden. Fase 0 is de start op nummer 312, fase 1 is het eerste huisnummer dat hij aandoet, fase 2 het tweede, etc. tot en met fase 4, waarin het laatste adres wordt bezocht. De objectfunctie is de som van alle afgelegde wegen tot de adressen (de som van de bezorgtijden), dus de afgelegde weg van nr 312 naar het eerste huis plus de afgelegde weg (niet de kortste weg) van 312 tot het tweede huis. Deze som is gemakkelijk uit te drukken in de weg die tussen de fasen wordt afgelegd. De weg tussen fase 3 en 4 (van het één-na-laatste huis naar het laatste) wordt erbij opgeteld. De weg van fase 2 naar fase 3 wordt er tweemaal bij opgeteld (want dat stuk geldt voor de route naar het één-na-laatste huis, maar ook naar het laatste), de route van 1 naar twee wordt er driemaal bij opgeteld en de route van 0 naar 1 viermaal. In formule geldt voor de objectfunctie in fase n: f n (s,x n ) = (5-n) s-x n + f n-1 * (x n ) Hierin is s de toestand (adres) waarin je je bevindt en x n het volgende adres, s-x n is de afstand tussen de adressen en 5-n is de factor waarmee deze afstand meetelt: éénmaal voor fase 4, tweemaal voor fase 3, etc., f n-1 * (x n ) is de optimale som van de bezorgafstanden tot en met adres x n. Omdat het hier om maar vier adressen gaat kun je nog eenvoudig alle mogelijkheden opschrijven: 312 118 372 394 739 \ 372 118 394 739 \ 394 118 739 \ 739-118 Je begint nu in fase 4, het laatste adres. Dit kan alleen zijn: 118, of 739, want de tussenliggende adressen moet je inmiddels gepasseerd zijn. Je kunt in 118 alleen komen via 739 (bijdrage 739-118 = 621), in 739 kom je via 394 (bijdrage 345) of via 118. Voor fase 4 kun je de volgende tabel maken. Hierin staan de mogelijke laatste routes (van s naar x 4 ) met hun bijdrage aan de som van de servicetijden.
x 4 s 118 739 f * * 4 (s) x 4 118-621 621 739 394-345 345 739 739 621-621 118 De tabel van fase 3, vervolgens is als volgt opgebouwd: de route van 394 naar 118 (afstand 394-118 = 276) geeft een bijdrage 2 276. De kleinste bijdrage vanaf 118 lees je uit de vorige tabel: 621. De totale bijdrage van 394 naar 118 is dus: 2 276 + 621 = 1173, etc. x 3 s 118 394 739 f * * 3 (s) x 3 118-897 - 897 394 372-389 - 389 394 394 1173-1311 1173 118 Fase 2: x 2 s 118 372 394 f * * 2 (s) x 2 118-1151 - 1151 372 372 1659-1239 1239 394 Tenslotte fase 1: x 1 s 118 372 f * * 1 (s) x 1 312 1927 1479 1479 372 Uit deze tabellen lees je af dat de beste route is: 312 372 394 118 739. De som van de servicetijden is 1497 (60 + 82 + 358 + 979). Merk op dat dit niet de kortste route is.