Algorytmy i Struktury Danych.
Transkrypt
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Programowanie Dynamiczne dr hab. Bożena Woźna-Szcześniak [email protected] Jan Długosz University, Poland Wykład 14 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 1 / 25 Programowanie dynamiczne Programowanie dynamiczne jest jedna˛ z metod rozwiazywania ˛ wieloetapowych problemów decyzyjnych. Programowanie dynamiczne to nie jest jeden algorytm, ale sposób podejścia do rozwiazywania ˛ problemu optymalizacyjnego. Twórca˛ programowania dynamicznego jest amerykański matematyk Richard Bellman. Programowanie dynamiczne polega na podziale danego zagadnienia na podproblemy (etapy), a nastepnie ˛ na ich sekwencyjnym rozwiazywaniu, ˛ aż do znalezienia rozwiazania ˛ optymalnego. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 2 / 25 Programowanie dynamiczne Wykorzystuje, niezależnie od algorytmu, zasade˛ optymalności Bellmana, w myśl której optymalne rozwiazanie ˛ zagadnień z zakresu programowania dynamicznego ma te˛ własność, że optymalne rozwiazanie ˛ dla k -tego etapu jest jednocześnie rozwiazaniem ˛ optymalnym dla etapów k + 1, k + 2, . . ., N. Tak wiec ˛ optymalne rozwiazanie ˛ dla etapu pierwszego stanowi optymalne rozwiazanie ˛ dla całego problemu. W zwiazku ˛ z zasada˛ optymalności Bellmana problem z zakresu programowania dynamicznego rozwiazuje ˛ sie˛ rozpoczynajac ˛ od poszukiwania rozwiazania ˛ dla ostatniego etapu (N), a nastepnie ˛ cofajac ˛ sie˛ poszukuje sie˛ rozwiazania ˛ dla etapu N − 1. Uzyskane w ten sposób rozwiazanie ˛ dla etapów N − 1 oraz N jest optymalne bez wzgledu ˛ na to, w jaki sposób osiagni ˛ eto ˛ etap N − 1. Powtarzajac ˛ w powyższy sposób etap po etapie dochodzimy do rozwiazania ˛ optymalnego dla pierwszego etapu, a wiec ˛ i dla całego problemu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 3 / 25 Problem dyliżansu Nazwa zagadnienia pochodzi od pewnego kupca amerykańskiego, który transportował towary ze Wschodniego Wybrzeża USA na Wybrzeże Zachodnie, używajac ˛ w tym celu różnych połacze ˛ ń realizowanych za pomoca˛ dyliżansu. Chodziło o dobór takich połacze ˛ ń, aby transport odbywał sie˛ w miare˛ bezpiecznie, a miara˛ bezpieczeństwa na danej linii były stawki pobierane przez towarzystwo ubezpieczeniowe. Rozwiazanie ˛ problemu wymagało podzielenia całej trasy na etapy, a w każdym z etapów określenia miast etapowych oraz wszystkich możliwych połacze ˛ ń pomiedzy ˛ nimi. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 4 / 25 Problem dyliżansu Definicja Firma transportowa EuroLine, ustalajac ˛ nowe trasy przejazdu swych cieżarówek ˛ z Polski do Francji, podzieliła cała˛ trase˛ na pieć ˛ etapów. W każdym z etapów wyznaczono po kilka miast, przez które przejeżdżać bed ˛ a˛ cieżarówki. ˛ Problem polega na znalezieniu najkrótszej drogi przejazdu pomiedzy ˛ Polska˛ a Francja. ˛ Odległości drogowe pomiedzy ˛ wybranymi miastami (w km) sa˛ pniżyszmy grafie: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 5 / 25 Krok 1 Załóżmy, że cieżarówki ˛ dotarły do etapu 4. W tej sytuacji odległość od celu wynosi: d(7, 9) = 120 km lub d(8, 9) = 130 km, w zależności od tego, w którym z miast w etapie 4 zatrzymano sie˛ na postój. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 6 / 25 Krok 2 Cofnijmy sie˛ o jeden etap. Odległość miast od celu w etapie 3 wynosi: d(4, 7) + d(7, 9) = 200 + 120 = 320, d(4, 8) + d(8, 9) = 250 + 130 = 380. Zatem z miasta 4 do 9 należy wybrać droge˛ o długości d(4, 7, 9) = 320. Nastepnie: ˛ d(5, 7) + d(7, 9) = 200 + 120 = 320, d(5, 8) + d(8, 9) = 180 + 130 = 310. Zatem z miasta 5 do 9 należy wybrać droge˛ o długości d(5, 8, 9) = 310. W końcu: d(6, 7) + d(7, 9) = 150 + 120 = 270, d(6, 8) + d(8, 9) = 110 + 130 = 240. Zatem z miasta 6 do 9 należy wybrać droge˛ o długości d(6, 8, 9) = 240. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 7 / 25 Krok 3 Powtórzamy całe postepowanie ˛ biorac ˛ za punkt wyjścia etap 2: d(2, 4) + d(4, 9) = 150 + 320 = 470, d(2, 5) + d(5, 9) = 80 + 310 = 390, d(2, 6) + d(6, 9) = 120 + 240 = 360, Zatem z miasta 2 do 9 należy wybrać droge: ˛ 2-6-8-9 o długości 360 km. Podobnie d(3, 4) + d(4, 9) = 150 + 320 = 470, d(3, 5) + d(4, 9) = 130 + 310 = 440, d(3, 6) + d(4, 9) = 190 + 240 = 430, Zatem z miasta 3 do 9 należy wybrać droge: ˛ 3-6-8-9 o długości 430 km Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 8 / 25 Krok 4 Dotarliśmy do etapu startowego, w którym rozpatrujemy sposób dotarcia do celu z miasta 1 przez miasta 2 lub 3: d(1, 2) + d(2, 9) = 100 + 360 = 460, d(1, 3) + d(3, 9) = 80 + 430 = 510, Zatem z miasta 1 do 9 należy wybrać droge: ˛ 1-2-6-8-9 o długości 460 km. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 9 / 25 Przykład zagadnienia alokacji inwestycji Przedsiebiorca ˛ Jan Nowak, posiadajacy ˛ kredyt inwestycyjny w wysokości 6 mln złotych oraz hale˛ produkcyjna˛ w Cz˛estochowie, postanowił zainstalować nowoczesne linie piekarnicze: francuska˛ (F), szwedzka˛ (S), oraz polska˛ (P). Dobowe zdolności produkcyjne pieczywa (w tonach) w zależności od wysokości nakładów inwestycyjnych przeznaczonych na zainstalowanie linii produkcyjnej danego typu, przedstawiono w poniższej tabeli: Nakłady (w mln zł) Zdolności Produkcyjne (w tyśacach) ˛ Bożena Woźna-Szcześniak (AJD) F S P 0 0 0 0 1 6 5 4 2 12 8 15 Algorytmy i Struktury Danych. 3 12 11 15 4 12 14 15 5 15 17 15 6 20 18 16 Wykład 14 10 / 25 Przykład zagadnienia alokacji inwestycji Analiza rynku wykazała, że każda z linii produkcyjnych, pozwala uzyskiwać jednakowe zyski w przeliczeniu na 1t pieczywa. Jan Nowak musi wiec ˛ w tym przypadku podjać ˛ decyzje˛ dotyczac ˛ a˛ podziału kredytu pomiedzy ˛ poszczególne programy inwestycyjne, tak aby piekarnia osiagn ˛ eła ˛ maksymalna, ˛ dobowa˛ zdolność produkcyjna. ˛ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 11 / 25 Rozwiazanie ˛ - Krok 1 Załóżmy, że jedynym możliwym rozwiazaniem ˛ jest zakupienie polskiej linii produkcyjnej i zadajmy sobie pytanie dotyczace ˛ uzyskanej w ten sposób dobowej zdolności produkcyjnej w zależności od zainwestowanej kwoty. 0 1 2 3 4 5 6 Nakłady (w mln zł) Zdolności F 0 6 12 12 12 15 20 S 0 5 8 11 14 17 18 Produkcyjne (w tyśacach) ˛ P 0 4 15 15 15 15 16 W tym przypadku, jedynym sensownym rozwiazaniem ˛ jest zainwestowanie 6 mln zł w polska˛ linie˛ produkcyjna˛ w celu osiagni ˛ ecia ˛ zdolności produkcyjnej 16t pieczywa na dobe. ˛ Rezultat ten zapiszemy nastepuj ˛ aco:P(6) ˛ = 16, Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 12 / 25 Krok 2 Załóżmy, że dostepne ˛ sa˛ dwa typy linii produkcyjnych P oraz S. Zadajmy nastepuj ˛ ace ˛ pytanie: jak należy podzielić kredyt inwestycyjny pomiedzy ˛ te dwa programy, aby uzyskać maksymalna˛ dobowa˛ zdolność produkcyjna? ˛ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 13 / 25 Krok 2 Załóżmy, że dostepne ˛ sa˛ dwa typy linii produkcyjnych P oraz S. Zadajmy nastepuj ˛ ace ˛ pytanie: jak należy podzielić kredyt inwestycyjny pomiedzy ˛ te dwa programy, aby uzyskać maksymalna˛ dobowa˛ zdolność produkcyjna? ˛ W tym przypadku możliwe jest siedem wariantów podziału 6 mln kredytu, które daja˛ nastepuj ˛ ace ˛ dobowe zdolności produkcyjne: P(6) + S(0) = 16 + 0 = 16, P(5) + S(1) = 15 + 5 = 20, P(4) + S(2) = 15 + 8 = 23, P(3) + S(3) = 15 + 11 = 26, P(2) + S(4) = 15 + 14 = 29, P(1) + S(5) = 4 + 17 = 21, P(0) + S(6) = 0 + 18 = 18. Zatem należy zainwestować 2 mln zł w polska˛ linie˛ o raz 4 mln zł w szwedzka˛ linie, ˛ osiagaj ˛ ac ˛ w ten sposób 29t pieczywa na dobe, ˛ tzn. P(2) + S(4) = 29. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 13 / 25 Krok 3 Znajdźmy optymalny podział kredytu pomiedzy ˛ linie˛ P oraz S przy malejacej ˛ kwocie nakładów inwestycyjnych: 5 min na linie P oraz S P(5) + S(O) = 15 + 0 = 15, P(4) + S(1) = 15 + 5 = 20, P(3) + S(2) = 15 + 8 = 23, P(2) + S(3) = 15 + 11 = 26, P(1) + S(4) = 4 + 14 = 18, P(0) + S(5) = 0 + 17 = 17. W przypadku dysponowania kwota˛ 5 min zł na linie˛ P oraz S należy zainwestować 2 mln zł w linie˛ P oraz 3 mln zł w linie˛ S, osiagaj ˛ ac ˛ 26t pieczywa dobe, ˛ tzn. P(2) + S(3) = 26. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 14 / 25 Krok 3 - cd Znajdźmy optymalny podział kredytu pomiedzy ˛ linie˛ P oraz S przy malejacej ˛ kwocie nakładów inwestycyjnych: 4 mln zł na linie P oraz S P(4) + S(0) = 15 + 0 = 15, P(3) + S(1) = 15 + 5 = 20, P(2) + S(2) = 15 + 8 = 23, P(1) + S(3) = 4 + 11 = 15, P(0) + S(4) = 0 + 14 = 14. W przypadku dysponowania kwota˛ 4 mln zł należy zainwestować po 2 mln zł w linie˛ P oraz S: P(2) + S(2) = 23. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 15 / 25 Krok 3 - cd Znajdźmy optymalny podział kredytu pomiedzy ˛ linie˛ P oraz S przy malejacej ˛ kwocie nakładów inwestycyjnych: 3 mln zł na linie P oraz S P(3) + S(0) = 15 + 0 = 15, P(2) + S(1) = 15 + 5 = 20, P(1) + S(2) = 4 + 8 = 12, P(0) + S(3) = 0 + 11 = 11. W przypadku dysponowania kwota˛ 3 mln zł należy zainwestować 2 mln zł w linie˛ P oraz 1 mln w linie˛ S: P(2) + S(1) = 20. 2 mln zł na linie P oraz S P(2) + S(0) = 15 + 0 = 15, P(1) + S(1) = 4 + 5 = 9, P(0) + S(2) = 0 + 8 = 8. W przypadku dysponowania kwota˛ 2 mln zł należy zainwestować 2 mln zł w linie˛ P oraz 0 mln w linie˛ S: P(2) + S(1) = 20. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 16 / 25 Krok 3 - cd Znajdźmy optymalny podział kredytu pomiedzy ˛ linie˛ P oraz S przy malejacej ˛ kwocie nakładów inwestycyjnych: 1 mln zł na linie P oraz S P(1) + S(0) = 4 + 0 = 4, P(0) + S(1) = 0 + 5 = 5. W tym przypadku należy zainwestować 1 mln zł w linie˛ szwedzka˛ (S): P(0) + S(1) = 5. Zatem, w kroku 3 określiliśmy optymalne kombinacje nakładów na linie P oraz S. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 17 / 25 Krok 4 W kroku 4 wystarczy rozpatrzyć wszystkie kombinacje podziału 6 mln zł kredytu pomiedzy ˛ linie˛ F oraz linie P + S. Zdolności produkcyjne w zależności od nakładów kredytowych przedstawiono w poniższej tabeli: Nakłady (w mln zł) Zdolności Produkcyjne Bożena Woźna-Szcześniak (AJD) F S+P 0 0 0 1 6 5 2 12 15 Algorytmy i Struktury Danych. 3 12 20 4 12 23 5 15 26 6 20 29 Wykład 14 18 / 25 Krok 4 Możliwych jest 7 wariantów podziału 6 mln kredytu pomiedzy ˛ linie F oraz linie P+S, dajacych ˛ nastepuj ˛ ace ˛ zdolności produkcyjne: F (6) + (P + S)(0) = 20 + 0 = 20, F (5) + (P + S)(1) = 15 + 5 = 20, F (4) + (P + S)(2) = 12 + 15 = 27, F (3) + (P + S)(3) = 12 + 20 = 32, F (2) + (P + S)(4) = 12 + 23 = 35, F (1) + (P + S)(5) = 6 + 26 = 32, F (0) + (P + S)(6) = 0 + 29 = 29. Zatem maksymalna˛ zdolność produkcyjna˛ piekarni można uzyskać inwestujac ˛ 2 mln zł w linie˛ francuska˛ (F) oraz 4 mln zł w linie˛ P i S. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 19 / 25 Krok 5 Aby uzyskać rozwiazanie ˛ ostateczne, wystarczy odszukać w kroku 3 optymalny sposób podziału tych 4 mln zł pomiedzy ˛ linie˛ P oraz S. Zatem otrzymujemy nastepujace ˛ rozwiazanie: ˛ 2 mln zł na linie˛ F, 2 mln zł na linie˛ P oraz 2 mln ma linie˛ S, co zapewnia 35t pieczywa na dobe: ˛ F(2)+P(2)+S(2)=35. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 20 / 25 Hodowla owiec Hodowca owiec na poczatku ˛ roku ma stado liczace ˛ 100 sztuk. Musi on podjać ˛ decyzje˛ jaka˛ cz˛eść stada sprzedać, a jaka˛ zachować do dalszej hodowli, jeśli chce maksymalizować zysk w ciagu ˛ trzech lat. Założono, że: 1 2 3 sprzedaż nastepuje ˛ zawsze na poczatku ˛ roku, pod koniec roku stado powieksza ˛ sie˛ o 50%, na poczatku ˛ czwartego roku hodowla jest likwidowana. Dane dotyczace ˛ cen sprzedaży oraz roczny koszt utrzymania jednej sztuki sa˛ nastepuj ˛ ace: ˛ Lata cena sprzedaży w jp roczny koszt utrzymania w jp 1 56 20 2 55 21 3 56 22 4 58 - Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 21 / 25 Hodowla Owiec - rozwiazanie ˛ Przyjmijmy oznaczenia: yi - liczba sprzedanych owiec w i - tym roku, si - wielkość stada na poczatku ˛ i - tego roku, fi (yi , si ) - zysk hodowcy w i - tym roku przy sprzedaży yi i stanie poczatkowym ˛ stada si , dla i = 1, 2, 3, 4. Całkowity zysk wynosi wiec: ˛ f1 (y1 , s1 ) + f2 (y2 , s2 ) + f3 (y3 , s3 ) + f4 (y4 , s4 ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 22 / 25 Hodowla Owiec - rozwiazanie ˛ ROK 1. Hodowca posiada stado o liczności s1 = 100 sztuk oraz sprzedaje y1 sztuk. Do hodowli pozostaje wiec ˛ x1 = 100 − y1 sztuk. Zysk hodowcy wynosi f1 (y1 , 100) = 56y1 − 20(100 − y1 ) = 76y1 − 2000. ROK 2. Na poczatku ˛ 2 roku stado liczy s2 = 1, 5(100 − y1 ) sztuk. Hodowca sprzedaje y2 sztuk, do hodowli pozostaje x2 = s2 − y2 sztuk. Zysk hodowcy wynosi: f2 (y2 , s2 ) = 55y2 − 21(s2 − y2 ) = 76y2 − 21s2 . ROK 3. Na poczatku ˛ roku trzeciego stado liczy s3 = 1, 5(s2 − y2 ) sztuk. Hodowca sprzedaje y3 sztuk, do hodowli pozostaje x3 = s3 − y3 sztuk. Zysk hodowcy wynosi: f 3(y3 , s3 ) = 56y3 − 22(s3 − y3 ) = 78y3 − 22s3 . ROK 4. Na poczatku ˛ roku czwartego stado liczy s4 = 1, 5(s3 − y3 ) i zostaje w całości sprzedane. Zysk wynosi zatem f4 (s4 , s4 ) = 58s4 . Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 23 / 25 Hodowla Owiec - rozwiazanie Obliczenia wykonujemy korzystajac z rownań Bellmana Krok 1. Rok czwarty: g4 (s4 ) = 58s4 Krok 2. Rok trzeci. g3 (s3 ) = max0≤y3 ≤s3 {f3 (y3 , s3 ) + g4 (s4 )} = max0≤y3 ≤s3 {78y3 − 22s3 + 58s4 } = max0≤y3 ≤s3 {78y3 − 22s3 + 58(1, 5(s3 − y3 ))} = max0≤y3 ≤s3 {78y3 − 22s3 + 87s3 − 87y3 } = max0≤y3 ≤s3 {−9y3 + 65s3 } = 65s3 dla y3 = 0 Krok 3. Rok drugi. g2 (s2 ) = max0≤y2 ≤s2 {f2 (y2 , s2 ) + g3 (s3 )} = max0≤y2 ≤s2 {76y2 − 21s2 + 65s3 } = max0≤y2 ≤s2 {76y2 − 21s2 + 65(1, 5(s2 − y2 ))} = max0≤y2 ≤s2 {−21, 5y2 + 76, 521s2 } = 76, 5s2 dla y2 = 0 Krok 4. Rok pierwszy. g2 (s2 ) = max0≤y1 ≤s1 {f1 (y1 , s1 ) + g2 (s2 )} = max0≤y1 ≤s1 {76y1 − 2000 + 76, 5(1, 5(100 − y1 ))} = max0≤y1 ≤s1 {−44, 75y1 + 9475} = 9475 y1 = 0 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 24 / 25 Hodowla Owiec - rozwiazanie Hodowca nie powinien sprzedawać owiec w roku pierwszym, drugim, trzecim. Wszystkie owce powinny być sprzedane na poczatku ˛ roku czwartego, co przyniesie najwiekszy ˛ możliwy zysk 9475 jp. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 25 / 25