BAd_OPER_dynam
Transkrypt
BAd_OPER_dynam
BADANIA OPERACYJNE Programownie dynamiczne dr Adam Sojda [email protected] http://dydaktyka.polsl.pl/roz6/asojda/default.aspx Pokój A405 Programowanie dynamiczne Programowanie dynamiczne jest jedną z metod rozwiązywania wieloetapowych problemów decyzyjnych. Jej twórcą jest amerykański matematyk Richard Bellman. Przedstawiamy ją na przykładzie dyskretnego deterministycznego problemu n - etapowego. Przyjmijmy oznaczenia: di - decyzja, którą należy podjąć w i-tym etapie, si - stan przed podjęciem decyzji di, si+1 - stan po podjęciu decyzji di. Di - zbiór decyzji dopuszczalnych w i-tym etapie, Si - zbiór stanów, które mogą zaistnieć na początku i-tego etapu. Ciąg decyzji { d1, d2, ... , dn } nazywamy strategią dr Adam SOJDA 2 Programowanie dynamiczne Z deterministycznego charakteru problemu wynika, ze wybór decyzji di przy stanie si jednoznacznie wyznacza stan si+1. Zatem efekt przyjęcia strategii { d1, d2, ... , dn }, czyli kolejnego podejmowania decyzji d1, d2, ... , dn , można przedstawić następująco: s1 d1 Etappierwszy s2 d2 Etapdrugi s3 sn dn sn+1 Etapn-ty S1 jest zbiorem jednoelementowym. Ponieważ problem jest deterministyczny wybór decyzji di przy stanie si określa jednoznacznie si+1, co zapisujemy wzorem: si+1=Ti( di, si ), gdzie i =1, 2, ..., n. dr Adam SOJDA 3 Programowanie dynamiczne Niech funkcją kryterium będzie funkcja F ( d1, d2, ..., dn, s1, s2, ..., sn ) Rozwiązaniem rozważanego problemu jest znalezienie strategii optymalnej, czyli takiego ciągu decyzji {d1, d2, ..., dn }, dla którego funkcja F osiąga ekstremum. Aby można było zastosować metodę programowania dynamicznego problem ten musi mieć własność Markowa, to znaczy, że po podjęciu decyzji d1, d2, ..., dk w kolejnych k etapach stan sn+1 na końcu etapu n zależy wyłącznie od stanu sk+1 który zaistniał po podjęciu decyzji dk oraz decyzji dk+1,, dk+2, ..., dn podjętych w następnych etapach. dr Adam SOJDA 4 Programowanie dynamiczne Z własności Markowa wynika zasada optymalności Bellmana, na której oparto metodę programowania dynamicznego. „Strategia optymalna ma tę własność, że niezależnie od tego jaki był stan początkowy i jakie były decyzje początkowe, pozostałe decyzje muszą tworzyć strategię optymalną ze względu na stan będący efektem tych początkowych decyzji.” dr Adam SOJDA 5 Programowanie dynamiczne Ciąg równań (RD) nazywany jest ciągiem równań funkcyjnych Bellmana. Posługiwanie się tymi równaniami dla rozwiązania wieloetapowego problemu decyzyjnego można przedstawić w formie algorytmu: ⎧ g n (sn ) := max{ f n (d n , sn )} d n ∈Dn ⎪ sn ∈S n ( RD )⎨ g k (sk ) := max{ f k (d k , sk ) + g k +1 (sk +1 )} ⎪ d k ∈Dk sk ∈S k ⎩ dla k =1, 2, ..., n-1. dr Adam SOJDA 6 Programowanie dynamiczne Krok 1. ETAP n Wyznacz gn ( sn ) := max { fn ( dn , sn )} Kroki 2,.., n-1. ETAPY Wyznacz gk ( sk ) := max { fk ( dk , sk ) + gk+1 ( sk+1 )} Krok n. ETAP Oblicz: g.1 ( s1 ) := max { f1 ( d1, s1 ) + g2 ( s2 )} dn ∈Dn sn ∈Sn n-k , gdzie k = 1, 2, ..., n-1. dk ∈Dk sk ∈Sk 1 d1∈D1 s1∈S1 Decyzja d1* , dla której funkcja g1( s1 ) osiąga maksimum, jest decyzją optymalną w 1 etapie. Odpowiada jej jednoznacznie stan s2* = T1( d1*, s1 ). Powtarzając obliczenia dla funkcji g2( s2*), g3( s3*), ..., gn( sn*) otrzymujemy ciąg decyzji optymalnych { d1*, d2*, ..., dn* } tworzących strategię optymalną. dr Adam SOJDA 7 Programowanie dynamiczne Zarząd firmy może przeznaczyć 150 jednostek pieniężnych na inwestycje w trzech wydziałach A1, A2, A 3 .Jak rozdzielić posiadane środki, aby spowodowało to maksymalny łączny wzrost zysków? Wzrost zysków w poszczególnych wydziałach po zainwestowaniu w nich odpowiednio 0, 50, 100, 150 jednostek pieniężnych podano w tabeli. dr Adam SOJDA 8 Programowanie dynamiczne Rozwiązanie: Sztucznie dzielimy cały proces przydziału kwoty 150 jednostek pieniężnych na trzy etapy: Etap 1. Przydział x1 jednostek pieniężnych na A1, Etap 2. Przydział x2 jednostek pieniężnych na A2, Etap 3. Przydział x3 jednostek pieniężnych na A3. Przyjmijmy oznaczenia: si - kwota, która pozostała do rozdziału, na początku i-tego etapu, fi(xi,si) - wzrost zysku w wydziale Ai po przydzieleniu na inwestycje xi jp, jeśli na inwestycje pozostało jeszcze si jp. Łączny wzrost zysków z inwestycji wyniesie F(x1,x2,x3,s1,s2,s3) = f1(x1,s1) + f2(x2,s2) + f3(x3,s3). Zarząd firmy chce zmaksymalizować wzrost zysków. max F(x1,x2,x3,s1,s2,s3) dla si ∈Si, i = 1,2,3 x1+x2+x3=150 dr Adam SOJDA 9 Programowanie dynamiczne s1 x1 Etappierwszy s2 x2 Etapdrugi s3 x3 s4 Etaptrzeci Zauważmy, że: s1 = 150, s2 = 150 – x1, s3 = s2 – x2, s4 = s3 – x3 = 0 stąd x3 = s3. D1={ x1: 0 ≤ x1 ≤ s1}, D2={ x2: 0 ≤ x2 ≤ s2}, D3={ x3: x3 = s3}. dr Adam SOJDA 10 Programowanie dynamiczne Krok 1. (Etap 3). Przydział x3 wydziałowi A3 g3(s3) = max f3(x3,s3) = max f3(x3,s3) = f3(s3,s3) s3–x3=0 x3=s3 Krok 2. (Etap 2). Przydział x2 wydziałowi A2 g2(s2) = max (f2(x2,s2)+ g3(s3)) 0 ≤ x2 ≤ s2 Krok 3. (Etap 1). Przydział x1 wydziałowi A1 g1(s1) = max (f1(x1,s1) + g2(s2)) 0 ≤ x1 ≤ s1 Stąd możemy policzyć kolejno: Krok 1. dla x3 = s3 gdzie 0 ≤ s3 ≤ 150 mamy g3(s3) = f3(x3,s3) = f3(s3,s3) dr Adam SOJDA 11 Programowanie dynamiczne Krok 1. dla x3 = s3 gdzie 0 ≤ s3 ≤ 150 mamy g3(s3) = f3(x3,s3) = f3(s3,s3) dr Adam SOJDA 12 Programowanie dynamiczne Krok 2. (Etap 2). Przydział x2 wydziałowi A2 g2(s2) = max (f2(x2,s2)+ g3(s3)) 0 ≤ x2 ≤ s2 Ponieważ s3 = s2 – x2 więc s2 = s3 + x2. dr Adam SOJDA 13 Programowanie dynamiczne Krok 3. Przydział x1 wydziałowi A1 g1(s1) = max (f1(x1,s1) + g2(s2)) 0 ≤ x1 ≤ s1 Największy wzrost zysku 1150 jednostek pieniężnych przyniosą przydziały: 50 jednostek pieniężnych wydziałowi A3 ( x3 = 50 ) 0 jednostek pieniężnych wydziałowi A2 ( x2 = 0) 100 jednostek pieniężnych wydziałowi A1 ( x1 = 100 ) lub 0 50 100 jednostek pieniężnych wydziałowi A3 ( x3 = 0) jednostek pieniężnych wydziałowi A2 ( x2 = 50) jednostek pieniężnych wydziałowi A1 ( x1 = 100). dr Adam SOJDA 14 Programowanie dynamiczne Krok 3. Przydział x1 wydziałowi A1 g1(s1) = max (f1(x1,s1) + g2(s2)) 0 ≤ x1 ≤ s1 Największy wzrost zysku 1150 jednostek pieniężnych przyniosą przydziały: 50 jednostek pieniężnych wydziałowi A3 ( x3 = 50 ) 0 jednostek pieniężnych wydziałowi A2 ( x2 = 0) 100 jednostek pieniężnych wydziałowi A1 ( x1 = 100 ) lub 0 50 100 jednostek pieniężnych wydziałowi A3 ( x3 = 0) jednostek pieniężnych wydziałowi A2 ( x2 = 50) jednostek pieniężnych wydziałowi A1 ( x1 = 100). dr Adam SOJDA 15