Programowanie dynamiczne Opracowano na podstawie: „Badania operacyjne w przykładach i zadaniach” pod red. Karola Kukuły Wyd. Naukowe PWN „Matematyczne techniki zarządzania” pod red. Zbigniewa Łuckiego Wyd. AGH Badania operacyjne mgr inż. Piotr Betlej
Programowanie dynamiczne jest jedną z technik matematycznych poszukiwania rozwiązań optymalnych określa sposób podejścia do rozwiązywania problemu niż jako pojedynczy uniwersalny algorytm.
rozwiązanie polega na podziale zagadnienia pierwotnego na podproblemy lub etapy, a następnie na ich sekwencyjnym rozwiązywaniu, aż do znalezienia rozwiązania optymalnego. Stosuje się przy tym, niezależnie od algorytmu, zasadę optymalności Bellmana, w myśl której optymalne rozwiązanie zagadnień z zakresu programowania dynamicznego ma tę własność, że optymalne rozwiązanie dla k-tego etapu jest jednocześnie rozwiązaniem optymalnym dla etapów k + 1, k + 2, ..., N. Tak więc optymalne rozwiązanie dla etapu pierwszego stanowi optymalne rozwiązanie dla całego problemu. W związku z powyższą zasadą problem z zakresu programowania dynamicznego rozwiązuje się rozpoczynając od poszukiwania rozwiązania dla ostatniego etapu (N), a następnie cofając się poszukuje się rozwiązania dla etapu N-1 Uzyskane w ten sposób rozwiązanie dla etapów N-1 oraz N jest optymalne bez względu na to, w jaki sposób osiągnięto etap N- 1. Powtarzając w powyższy sposób etap po etapie dochodzimy do rozwiązania optymalnego dla pierwszego etapu, a więc i dla całego problemu.
Zadania programowania dynamicznego zagadnienie dyliżansu, zagadnienie finansowania inwestycji, optymalizacja zapasów, alokacja zasobów, czy wymiana majątku trwałego.
Zagadnienie finansowania przedsięwzięcia inwestycyjnego Zagadnienie finansowania przedsięwzięcia inwestycyjnego można scharakteryzować jako problem alokacji określonego zasobu środków (w tym przypadku wyrażonego w jednostkach pieniężnych) pomiędzy poszczególne zadania (programy inwestycyjne), tak aby osiągnąć maksymalny efekt. Przyjmuje się przy tym następujące założenia: Efekt zastosowania każdego z programów inwestycyjnych nie zależy od tego, czy zostały zastosowane równocześnie inne programy inwestycyjne. Zwrot nakładów inwestycyjnych jest mierzony w tych samych jednostkach. Nakłady inwestycyjne są liczbami całkowitymi. Funkcje określające związki między nakładami inwestycyjnymi a wysokością zwrotu z nakładów są niemalejące.
Przykład zagadnienia alokacji inwestycji Przedsiębiorca Jan Rogala, posiadający kredyt inwestycyjny w wysokości 6 min złotych oraz halę produkcyjną w Rzeszowie, postanowił zainstalować nowoczesne linie piekarnicze: francuską (F), szwedzką (S) oraz polską (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: Analiza rynku wykazała, że każda z linii produkcyjnych, pozwala uzyskiwać jednakowe zyski w przeliczeniu na 1 t pieczywa. Jan Rogala musi więc w tym przypadku podjąć decyzję dotyczącą podziału kredytu pomiędzy poszczególne programy inwestycyjne, tak aby piekarnia osiągnęła maksymalną, dobową zdolność produkcyjną.
Rozwiązanie Powyższy problem, należący do kategorii programowania dynamicznego, można rozwiązać za pomocą procedury opisanej w kilku etapach.
KROK 1. Załóżmy, że jedynym możliwym rozwiązaniem jest zakupienie polskiej linii produkcyjnej i zadajmy sobie pytanie dotyczące uzyskanej w ten sposób dobowej zdolności produkcyjnej w zależności od zainwestowanej kwoty. W tym przypadku, jedynym sensownym rozwiązaniem jest zainwestowanie 6 min zł w polską linię produkcyjną w celu osiągnięcia zdolności produkcyjnej 16 t pieczywa na dobę. Rezultat ten zapiszemy następująco: P(6) = 16, co oznacza, że 6 mln zł zainwestowane w polską linię produkcyjną zapewnia produkcję 16 t pieczywa na dobę.
KROK 2. Załóżmy, że dostępne są dwa typy linii produkcyjnych P oraz S i zadajmy sobie następujące pytanie: jak należy podzielić kredyt inwestycyjny pomiędzy te dwa programy, aby uzyskać maksymalną dobową zdolność produkcyjną?
W tym przypadku możliwe jest siedem wariantów podziału 6 min kredytu, które dają następujące dobowe zdolności produkcyjne: P(6) + S(0)= 16 + 0= 16, P(5) + S(l)= 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. W powyższej sytuacji należy więc zainwestować 2 mln w polską linię oraz 4 mln w szwedzką linię, osiągając w ten sposób 29 t pieczywa na dobę, tzn. P(2) + S(4) = 29.
KROK 3. Spróbujmy obecnie znaleźć optymalny podział kredytu pomiędzy linię P oraz S przy malejącej kwocie nakładów inwestycyjnych: 5 mln 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 kwotą 5 mln zł na linię P oraz S należy zainwestować 2 mln w linię P oraz 3 mln w linię S, osiągając 26 t pieczywa dobę. Rezultat zapiszemy w następujący sposób: P(2) + S(3) = 26.
b) 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 kwotą 4 mln zł należy zainwestować po 2 mln zł w linię P oraz S: P(2) + S(2) = 23.
c) 3 mln zł na linie P oraz S: P(3) + S(0) = 15 + 0 = 15 c) 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 tym przypadku należy zainwestować 2 mln w linię P oraz 1 mln w linię S: P(2) + S(1) = 20.
d) 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 tym przypadku należy zainwestować 2 min zł w linię polską (P): P(2) + S(0)= 15.
e) 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ę szwedzką (S): P(0) + S(1) = 5. A zatem, w kroku 3 określiliśmy optymalne kombinacje nakładów na linie P oraz S.
KROK 4. Konsekwentnie, 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:
Jak łatwo zauważyć możliwych jest siedem wariantów podziału 6 mln kredytu pomiędzy linie F oraz linie P + S, dających następujące 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. Tak więc maksymalną zdolność produkcyjną piekarni można uzyskać inwestując 2 min w linię francuską (F) oraz 4 mln zł w linię P i S.
Aby uzyskać rozwiązanie ostateczne, wystarczy odszukać w kroku 3 optymalny sposób podziału tych 4 mln zł pomiędzy linię P oraz S (krok 3b). W rezultacie otrzymujemy rozwiązanie: 2 mln zł na linię F, 2 mln zł na linię P oraz 2 mln ma linię S, co zapewnia 35 t pieczywa na dobę.
Zagadnienie dyliżansu Nazwa zagadnienia pochodzi od pewnego kupca amerykańskiego, który transportował towary ze Wschodniego Wybrzeża USA na Wybrzeże Zachodnie, używając w tym celu różnych połączeń realizowanych za pomocą dyliżansu. Oczywiście chodziło o dobór takich połączeń, aby transport odbywał się w miarę bezpiecznie, a miarą bezpieczeństwa na danej linii były stawki pobierane przez towarzystwo ubezpieczeniowe. Rozwiązanie 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łączeń pomiędzy nimi.
Przykład problemu dyliżansu Firma transportowa EuroTrans, ustalając nowe trasy przejazdu swych ciężarówek z Polski do Hiszpanii, podzieliła całą trasę na pięć etapów. W każdym z etapów wyznaczono po kilka miast, przez które przejeżdżać będą ciężarówki. Problem polega na znalezieniu najkrótszej drogi przejazdu pomiędzy Polską a Hiszpanią. Odległości drogowe pomiędzy miastami (w km) zaznaczono na poniższym rysunku:
KROK 1. Załóżmy, że ciężarówki dotarły do etapu 4. W tej sytuacji odległość od celu wynosi: d7,9 = 120 km lub d8,9 = 130 km, w zależności od tego, w którym z miast w etapie 4 zatrzymano się na postój.
KROK 2. Cofnijmy się o jeden etap. Odległość miast od celu w etapie 3 wynosi: d4,7 + d7,9 = 200 + 120 = 320, d4,8 + d8,9 = 250 + 130 = 380. Tak więc z miasta 4 do 9 należy wybrać drogę o długości d4,7,9 = 320. Podobnie: d5,7 + d7,9 = 200 + 120 = 320, d5,8 + d8,9 = 180 + 130 = 310, a więc z miasta 5 do 9 należy wybrać drogę o długości d5,8,9 = 310. Następnie: d6,7 + d7,9 = 150 + 120 = 270, d6,8 + d8,9 = 110 + 130 = 240, a więc z miasta 6 do 9 należy wybrać drogę o długości d6,8,9 = 240.
KROK 3. Powtórzmy całe postępowanie biorąc za punkt wyjścia etap 2: d2,4 + d4,9 = 150 + 320 = 470, d2,5 + d5,9 = 80 + 310 = 390, d2,6 + d6,9 = 120 + 240 = 360, a więc z miasta 2 do 9 należy wybrać drogę: 2-6-8-9 o długości 360 km. Podobnie d3,4 + d4,9 = 150 + 320 = 470, d3,5 + d4,9 = 130 + 310 = 440, d3,6 + d4,9 = 190 + 240 = 430, a więc z miasta 3 do 9 należy wybrać drogę: 3-6-8-9 o długości 430 km.
KROK 4. Dotarliśmy do punktu startowego, w którym rozpatrujemy sposób dotarcia do celu z miasta 1 przez miasta 2 lub 3: d1,2 + d2,9 = 100 + 360 = 460, d1,3 + d3,9 = 80 + 430 = 510, a więc z miasta 1 do 9 należy wybrać drogę: 1-2-6-8-9 o długości 460 km.