∫ ∫
Transkrypt
∫ ∫
Materiały pomocnicze do laboratorium Podstaw Optymalizacji GMAS - PROGRAMOWANIE DYNAMICZNE PROGRAMOWANIE DYNAMICZNE 1. Wprowadzenie Celem ćwiczenia jest poznanie istoty zasady optymalności oraz pokazanie wybranych zastosowań programowania dynamicznego do wyznaczania sterowań optymalnych w układach dyskretnych w czasie. Programowanie dynamiczne jako metoda rozwiązywania pewnych zadań optymalizacji zostało opracowane w latach pięćdziesiątych przez R. Bellmana. 1.1. Zasada optymalności Podstawę teoretyczną, na której opiera się metoda programowania dynamicznego, stanowi zasada optymalności. W oryginalnym ujęciu Bellmana została ona przedstawiona w sposób następujący [1]: Optymalna strategia sterowania ma tę własność, że jakikolwiek by był stan początkowy i decyzja początkowa, to następne decyzje muszą tworzyć optymalną strategię sterowania względem stanu wynikającego z pierwszej decyzji. Jako oczywisty wniosek z powyższego sformułowania możemy napisać: Każdy końcowy odcinek strategii optymalnej jest dla swoich warunków początkowych strategią optymalną. Metoda programowania dynamicznego w wersji dyskretnej Podzielmy trajektorię układu na dwa odcinki , odpowiadające przedziałom [t0, t’] i [t’, t0+T], przy czym t’ – dowolna chwila z przedziału [t0, t0+T]. Załóżmy, że obiekt jest opisany równaniami stanu, zaś wskaźnik jakości jest typu całkowego, t 0 +T J= ∫f 0 ( x(t), u(t), t )dt (1) t0 Zasada optymalności Bellmana mówi: Sterowanie optymalne w przedziale [t’, t0+T] nie zależy od historii układu (dla t < t’) i jest określone wyłącznie przez stan w chwili t’, x(t’) i przez wartość wskaźnika t 0 +T ∫f 0 ( x(t), u(t), t )dt (2) t' 1 Materiały pomocnicze do laboratorium Podstaw Optymalizacji GMAS - PROGRAMOWANIE DYNAMICZNE Inaczej mówiąc, sterowanie optymalne w przedziale [t’, t0+T] można wyznaczyć tak można wyznaczyć tak, jakby całe zadanie optymalizacji było sformułowane dla przedziału [t’, t0+T], ze stanem początkowym x(t’). Z zasady tej wynika pewien algorytm wyznaczania sterowania optymalnego. Rozważmy problem optymalizacyjny: t0 +T ∫ f [ x(t), u(t), t ]dt min u ( t )∈A t∈[ t0 ,t0 +T ] t0 0 (3) gdzie: g i [ x(t), u(t)] = bi , i = 1,2,..., I h [ x(t), u(t)] ≤ b , j = 1,2,..., J j A: j x& = f [ x(t), u(t), t ], x(t 0 ) = x0 t ∈ [t 0 , t 0 + T ] (4) Podzielmy przedział [t0, t0+T] na N przedziałów o długości ∆t i zdyskretyzujmy w czasie równanie stanu oraz wskaźnik jakości: x(k + 1 ) = x(k ) + ∆tf [ x(k), u(k), k ], k = 0,1,2,..., N − 1 (5) N −1 J [u] = ∑ f 0 [ x(k), u(k), k ]∆t (6) k =0 Zastępujemy przebiegi czasowe u(t) funkcjami schodkowymi czasu, które w przedziale czasowym [k, k+1] przyjmują wartości u(k)=const. Niech t’= t0+n∆t , n=0,1,..,N-1. Wskaźnik jakości za przedział [t’, t0+T] ma postać N −1 J n = ∑ f 0 [ x(k), u(k), k ]∆t . k =n Zdefiniujemy S n = min Jn u( n) . u ( n +1) (7) M u ( N −1) Zgodnie z zasadą Bellmana, wielkość Sn zależy jedynie od n (przy danym f0) i od x(n) S n = S n [ x (n)] . 2 Materiały pomocnicze do laboratorium Podstaw Optymalizacji GMAS - PROGRAMOWANIE DYNAMICZNE Sn jako funkcję stanu nazywamy funkcją Bellmana. Przedstawmy ją w postaci S n = min { f 0 [ x(n), u(n), n]∆t + J n +1} u( n ) . (8) u ( n +1) M u ( N −1) Minimalizacja względem ciągu sterowań: u(n), u(n+1),…, u(N-1) można teraz przeprowadzić w dwu etapach: najpierw względem u(n+1),…, u(N-1), potem względem u(n). Uwzględniając, że f0 we wzorze (8) nie zależy od u(k), dla k≥n+1, mamy S n = min{ f 0 [ x(n), u(n), n]∆t + umin J } ( n +1) n +1 u( n ) , u( n+2) M u ( N −1) a więc S n [ x (n)] = min{ f 0 [ x(n), u(n), n]∆t + S n +1[ x (n + 1)]} , u(n) (9) Otrzymane równanie nosi nazwę równania funkcyjnego Bellmana. Technika posługiwania się tym równaniem jest następująca: 1. Obliczenia zaczynamy od końca procesu, tj. od n=N-1. Na podstawie wzoru (7) mamy S N −1[ x ( N − 1)] = min { f 0 [ x(N − 1 ), u(N − 1 ), N − 1]∆t} , u ( N −1) na ostatnim etapie przeprowadzamy minimalizację funkcji podcałkowej wskaźnika jakości; obliczenia wykonujemy tylko dla tych stanów x(N-1), dla których istnieje sterowanie dopuszczalne u(N-1) prowadzące do zadanego stanu końcowego x(N)=x(T). Funkcja SN-1[x(N-1)] jest określona również tylko dla tych stanów; stany te tworzą pewien podzbiór przestrzeni stanów, który nazywamy zbiorem stanów dopuszczalnych x(n) dla n=N-1. 2. Cofając się o jeden etap minimalizujemy prawą stronę równania (9) dla n=N-2 i dla każdego spośród x(N-2) dopuszczalnych, tj. takich dla których istnieje u(N-2) prowadzące do zbioru stanów dopuszczalnych x(N-1). Zapamiętujemy u*[x(N-2)], oraz SN-2[x(N-2)]. 3. Operacje z punktu 2 ponawiamy dla n=N-3, N-3,… aż do n=0. 4. Znając x(0), z równania (9) dla n=0 mamy wartość S0[x(0)], czyli wartość wskaźnika jakości, oraz u*[x(0)]. Podstawiając u*[x(0)] do równania stanu obiektu otrzymujemy stan x(1), który poprzez zależność u*[x(1)] daje konkretną wartość u*(1). Kontynuując ten ciąg podstawień otrzymamy x(2), u*(2), x(3), u*(3) itd., aż do końca procesu sterowania. 3 Materiały pomocnicze do laboratorium Podstaw Optymalizacji GMAS - PROGRAMOWANIE DYNAMICZNE 2. Przykład (GAMS) Dany jest obiekt sterowania opisany równaniem stanu x& = x(t) + u(t) , (1) z warunkiem początkowym x (0) = 1 . Wyznaczyć sterowanie u(t) obiektu minimalizujące funkcjonał celu: 3 [ ] J = ∫ x 2 (t) + u 2 (t) dt . (2) 0 Dokonujemy dyskretyzacji (czas), przyjmując ∆t = 1 i zapiszemy równanie stanu w postaci: x(k + 1 ) = 2 x(k) + u(k) , k = 0, 1, 2. (3) Kryterium przyjmie postać: 2 J = ∑ x 2(k) + u 2(k) [ ] (4) k =0 Wprowadzając zmienne decyzyjne: x1=x(0), x2=x(1), x3=x(2), x4=u(0), x5=u(1), x6=u(2), zadanie sformułujemy w sposób następujący: x1 = 1 6 min J ( x ) = ∑ xi x2 = 2 x1 + x4 . x i =1 x3 = 2 x 2 + x5 2 W przypadku GAMSa kod implementujący powyższy problem jest następujący: $Title Przykład do tematu Programowanie dynamiczne Sets i index / 1 * 6 /; Variables x(i) J Equations variables criterion criterion constr_1 constr_2 constr_3 criterion.. constr_1.. constr_2.. constr_3.. criterion definition state x(0) state x(1) state x(2) ; J =e= sum(i, x(i)*x(i)); x("1") =e= 1; x("2") =e= 2*x("1")+x("4"); x("3") =e= 2*x("2")+x("5"); Model lab /all/; Solve lab minimizing J using nlp; Display x.l; 4