Algorytmy i Struktury Danych. Programowanie Dynamiczne dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com 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 następnie 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, zasadę optymalności Bellmana, w myśl której optymalne rozwiazanie zagadnień z zakresu programowania dynamicznego ma tę własność, że optymalne rozwiazanie dla k-tego etapu jest jednocześnie rozwiazaniem optymalnym dla etapów k + 1, k + 2,..., N. Tak więc 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 się rozpoczynajac od poszukiwania rozwiazania dla ostatniego etapu (N), a następnie cofajac się poszukuje się rozwiazania dla etapu N 1. Uzyskane w ten sposób rozwiazanie dla etapów N 1 oraz N jest optymalne bez względu na to, w jaki sposób osiagnięto etap N 1. Powtarzajac w powyższy sposób etap po etapie dochodzimy do rozwiazania optymalnego dla pierwszego etapu, a więc 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ł się w miarę 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ń pomiędzy 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 ciężarówek z Polski do Francji, podzieliła cała trasę na pięć etapów. W każdym z etapów wyznaczono po kilka miast, przez które przejeżdżać będa ciężarówki. Problem polega na znalezieniu najkrótszej drogi przejazdu pomiędzy Polska a Francja. Odległości drogowe pomiędzy 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 cięż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 się na postój. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 6 / 25
Krok 2 Cofnijmy się 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ć drogę o długości d(4, 7, 9) = 320. Następnie: 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ć drogę 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ć drogę 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 postępowanie 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ć drogę: 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ć drogę: 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ć drogę: 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 Przedsiębiorca Jan Nowak, posiadajacy kredyt inwestycyjny w wysokości 6 mln złotych oraz halę produkcyjna w Częstochowie, 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ł) 0 1 2 3 4 5 6 Zdolności F 0 6 12 12 12 15 20 Produkcyjne S 0 5 8 11 14 17 18 (w tyśacach) P 0 4 15 15 15 15 16 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. 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 więc w tym przypadku podjać decyzję dotyczac a podziału kredytu pomiędzy poszczególne programy inwestycyjne, tak aby piekarnia osiagnęł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. Nakłady (w mln zł) 0 1 2 3 4 5 6 Zdolności F 0 6 12 12 12 15 20 Produkcyjne S 0 5 8 11 14 17 18 (w tyśacach) P 0 4 15 15 15 15 16 W tym przypadku, jedynym sensownym rozwiazaniem jest zainwestowanie 6 mln zł w polska linię produkcyjna w celu osiagnięcia zdolności produkcyjnej 16t pieczywa na dobę. Rezultat ten zapiszemy następujaco:p(6) = 16, Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 12 / 25
Krok 2 Załóżmy, że dostępne sa dwa typy linii produkcyjnych P oraz S. Zadajmy następujace pytanie: jak należy podzielić kredyt inwestycyjny pomiędzy 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 dostępne sa dwa typy linii produkcyjnych P oraz S. Zadajmy następujace pytanie: jak należy podzielić kredyt inwestycyjny pomiędzy 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 następujace 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 linię o raz 4 mln zł w szwedzka linię, osiagaj ac w ten sposób 29t pieczywa na dobę, 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 pomiędzy linię 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 linię P oraz S należy zainwestować 2 mln zł w linię P oraz 3 mln zł w linię S, osiagaj ac 26t pieczywa dobę, 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 pomiędzy linię 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 linię 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 pomiędzy linię 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 linię P oraz 1 mln w linię 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 linię P oraz 0 mln w linię 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 pomiędzy linię 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 linię 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 pomiędzy linię 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ł) 0 1 2 3 4 5 6 Zdolności F 0 6 12 12 12 15 20 Produkcyjne S+P 0 5 15 20 23 26 29 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 18 / 25
Krok 4 Możliwych jest 7 wariantów podziału 6 mln kredytu pomiędzy linie F oraz linie P+S, dajacych następujace 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 linię francuska (F) oraz 4 mln zł w linię 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ł pomiędzy linię P oraz S. Zatem otrzymujemy następujace rozwiazanie: 2 mln zł na linię F, 2 mln zł na linię P oraz 2 mln ma linię S, co zapewnia 35t pieczywa na dobę: 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ć decyzję jaka część stada sprzedać, a jaka zachować do dalszej hodowli, jeśli chce maksymalizować zysk w ciagu trzech lat. Założono, że: 1 sprzedaż następuje zawsze na poczatku roku, 2 pod koniec roku stado powiększa się o 50%, 3 na poczatku czwartego roku hodowla jest likwidowana. Dane dotyczace cen sprzedaży oraz roczny koszt utrzymania jednej sztuki sa następujace: 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: y i - liczba sprzedanych owiec w i - tym roku, s i - wielkość stada na poczatku i - tego roku, f i (y i, s i ) - zysk hodowcy w i - tym roku przy sprzedaży y i i stanie poczatkowym stada s i, dla i = 1, 2, 3, 4. Całkowity zysk wynosi więc: f 1 (y 1, s 1 ) + f 2 (y 2, s 2 ) + f 3 (y 3, s 3 ) + f 4 (y 4, s 4 ) 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 s 1 = 100 sztuk oraz sprzedaje y 1 sztuk. Do hodowli pozostaje więc x 1 = 100 y 1 sztuk. Zysk hodowcy wynosi f 1 (y 1, 100) = 56y 1 20(100 y 1 ) = 76y 1 2000. ROK 2. Na poczatku 2 roku stado liczy s 2 = 1, 5(100 y 1 ) sztuk. Hodowca sprzedaje y 2 sztuk, do hodowli pozostaje x 2 = s 2 y 2 sztuk. Zysk hodowcy wynosi: f 2 (y 2, s 2 ) = 55y 2 21(s 2 y 2 ) = 76y 2 21s 2. ROK 3. Na poczatku roku trzeciego stado liczy s 3 = 1, 5(s 2 y 2 ) sztuk. Hodowca sprzedaje y 3 sztuk, do hodowli pozostaje x 3 = s 3 y 3 sztuk. Zysk hodowcy wynosi: f 3(y 3, s 3 ) = 56y 3 22(s 3 y 3 ) = 78y 3 22s 3. ROK 4. Na poczatku roku czwartego stado liczy s 4 = 1, 5(s 3 y 3 ) i zostaje w całości sprzedane. Zysk wynosi zatem f 4 (s 4, s 4 ) = 58s 4. 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: g 4 (s 4 ) = 58s 4 Krok 2. Rok trzeci. g 3 (s 3 ) = max 0 y3 s 3 {f 3 (y 3, s 3 ) + g 4 (s 4 )} = max 0 y3 s 3 {78y 3 22s 3 + 58s 4 } = max 0 y3 s 3 {78y 3 22s 3 + 58(1, 5(s 3 y 3 ))} = max 0 y3 s 3 {78y 3 22s 3 + 87s 3 87y 3 } = max 0 y3 s 3 { 9y 3 + 65s 3 } = 65s 3 dla y 3 = 0 Krok 3. Rok drugi. g 2 (s 2 ) = max 0 y2 s 2 {f 2 (y 2, s 2 ) + g 3 (s 3 )} = max 0 y2 s 2 {76y 2 21s 2 + 65s 3 } = max 0 y2 s 2 {76y 2 21s 2 + 65(1, 5(s 2 y 2 ))} = max 0 y2 s 2 { 21, 5y 2 + 76, 521s 2 } = 76, 5s 2 dla y 2 = 0 Krok 4. Rok pierwszy. g 2 (s 2 ) = max 0 y1 s 1 {f 1 (y 1, s 1 ) + g 2 (s 2 )} = max 0 y1 s 1 {76y 1 2000 + 76, 5(1, 5(100 y 1 ))} = max 0 y1 s 1 { 44, 75y 1 + 9475} = 9475 y 1 = 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 największy możliwy zysk 9475 jp. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 14 25 / 25