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