∫ ∫

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