CONTROLE ÓTIMO
Aluno: João Pedro T. Brandão Orientador: Alex Castro
Introdução
Este trabalho é um estudo verticalizado sobre métodos de otimização e métodos numéricos para o cálculo aproximado de soluções subótimas. Utilizando recursos de
programação não-linear e da linguagem MatLab, além de estudos feitos anteriormente, para serem implementados em métodos de aproximação visando resolver problemas de controle ótimo. Avaliamos as vantagens práticas dos métodos como tempo de execução e convergência à soluções ótimas.
Ambiente MatLab
O ambiente MatLab foi escolhido por sua simplicidade em aplicar métodos numéricos além de conter diversos recursos já implementados. Isso facilita bastante a prototipagem de algoritmos para a aproximação numérica em problemas matemáticos gerais. A manipulação de matrizes e vetores está embutida na linguagem simplificando o seu uso. Por exemplo, na linguagem C++ uma multiplicação de duas matrizes ( × ) e ( × ) resultaria em:
for ( int i = 0 ; i < n ; ++i ) { for ( int j = 0 ; j < n ; ++j ) { for ( int k = 0 ; k < n ; ++k ) { C[ i ][ j ] = C[ i ][ j ] + A[ i ][ k ]*B[ k ][ j ]; } } }
Utilizando a linguagem MatLab, o código acima se transforma em:
C = A*B;
Por outro lado, a linguagem C++ é útil na otimização dos códigos numéricos quando tempo se torna um recurso escasso. Usamos a função fmincon do pacote Optimization
Toolbox que permite a execução do algoritmo Programação Sequencial Quadrática assim
como ajustes de seus parâmetros. Aplicamos os métodos pseudo-espectral de Legendre e o método Bellman-PS usando fmincon para obter soluções ótimas.
Programação Sequencial Quadrática
O algoritmo é usado para minimizar uma função com restrições de igualdade = 0, () = ((), … , ()) , e restrições de desigualdade ℎ ≤ 0, ℎ() = (ℎ(), … , ℎ()). Construímos a Lagrangeana:
(, , ) = () − () − ℎ()
Linearizamos os vínculos e usamos a aproximação quadrática da Lagrangeana para obter:
(
) ≈ (
) + ∇(
)∆
∆ =
−
,
∆ =
−
,
∆ =
−
Reduzimos o problema de programação não linear a um problema de programação quadrática.
Algorítmo
1. Escolha um chute inicial ( , , ). 2. Monte a Lagrangeana.
3. Faça a aproximação quadrática da Lagrangeana do ponto (, , ). 4. Use o método Quase-Newton para achar o passo a ser seguido. 5. Acrescente o passo a (, , ) e repita o 3º passo.
No entanto, usaremos a função fmincon do ambiente e linguagem MatLab por questões práticas. O ambiente nos proporciona uma implementação eficiente do algoritmo e a fácil manipulação de parâmetros para adaptar aos nossos requerimentos.
Problema Geral de Controle Ótimo Problema intuitivo
Usaremos como base um problema de controle ótimo intuitivo: o da locomoção de um trem de um ponto A até um ponto B. Por estar em cima de trilhos, o caminho do trem já está pré-determinado. Portanto, devemos considerar os seguintes parâmetros do trem:
1. Sua posição ao longo do caminho. 2. Sua velocidade.
3. Sua aceleração.
Sabemos que sua velocidade inicial, no ponto A, é zero, e sua velocidade final, no ponto B, também deve ser zero. De fato, controlamos apenas a aceleração do trem, que acaba influenciando os outros dois parâmetros.
Visando otimizar o consumo de combustível, a solução ótima seria acelerar o trem até um certo ponto da trajetória deixando que a inércia obtida o levasse exatamente até o final.
Consideremos agora que o objetivo seja otimizar o tempo de viagem. Num mundo ideal, poderíamos acelerar o trem ao máximo durante todo o percurso, freando apenas um pouco antes do final para que a velocidade chegasse à zero no ponto B. Como existem restrições decorrentes de fenômenos físicos embutidas no sistema, incluindo aceleração e velocidade máxima, é necessário incluir estas restrições no modelo para torna-lo mais realístico. Podemos também incluir outras restrições, como limite na quantia de combustível.
Estes são apenas dois de muitos exemplos onde o problema de controle ótimo pode ser aplicado no mundo real.
Problema Geral
O problema de controle ótimo consiste em achar uma regra de controle para um sistema satisfazendo certo critério de otimização. Isso inclui uma função custo que depende de variáveis de controle e estado. Um controle ótimo conduz os caminhos das variáveis de controle que minimize essa função custo.
Minimizar a função:
! = "#$(%
), %
, $&%
'(, %
') + * ℒ,$(%), -(%), %./%
0102 Sujeito aos vínculos dinâmicos:
$3(%) = 4,$(%), -(%), %. Às restrições de desigualdade:
5,$(%), -(%), %. ≤ 0
5 = (5
, 5
, … , 5
6)
Às restrições do tipo igualdade, conhecidas também por condições de fronteira:
Φ#$(%
), %
, $&%
'(, %
') = 0
Φ = (Φ
, Φ
, … , Φ
)
A função ℒ é conhecida como a Lagrangeana.
Quando a função objetivo é o tempo percorrido, i.e. ! = %', é preciso aplicar uma transformação afim, 8, no intervalo #% , %').
8: #%
, %
') → ,−1,1.
8($) =
%
2
'
− %
$ −
%
'+ %
%
'− %
Atualizando todas as restrições, o tempo final se torna um parâmetro livre nas restrições do tipo igualdade, desigualdade e/ou fronteiras.
Solução Numérica
Como as funções de estado e controle não são conhecidas previamente, precisamos de um método numérico que encontre tais funções e que respeite as restrições estabelecidas anteriormente. Começamos discretizando o intervalo ,% , %'. e adotando uma malha para nossos cálculos, i.e., % < % < % < ⋯ < % < % < ⋯ < %@A< %@ = %'. Assim, as funções de estado e controle também são discretizadas, tornando cada ponto do estado e controle, $(%) e -(%) B = 0,1, … , C, em uma variável. Utilizando o método PSQ,
considerando a função custo como função objetiva, i.e. a integral da Lagrangeana, e aplicando as restrições necessárias, é possível achar uma solução ótima para o caso discreto. Para a solução do caso contínuo usamos um polinômio interpolador.
Esse método, porém, nos traz uma serie de dificuldades. Usar uma malha equidistante para interpolação polinomial não garante que o polinômio aproximante seja efetivamente útil na prática. Outro problema é a discretização de vínculos diferenciais que seja estável e tenha boas propriedades de convergência. Diferenças finitas (a aproximação de derivadas variações médias) pode acarretar alguns problemas na qualidade das soluções sub-ótimas obtidas. Além do mais, visamos um método que possa ser aplicado em situações de tempo real. Cada vez que discretizamos o intervalo em C + 1 pontos, obtemos 2(C + 1) parâmetros livres a serem otimizados; com o exemplo mencionado anteriormente necessitando de 3(C + 1) parâmetros, 2(C + 1) parâmetros para as funções de estado $ E $, e C + 1 parâmetros para a função de controle -. Caso a função objetivo seja o tempo percorrido, o tempo final %' é também considerado um parâmetro livre. Precisamos de um método com o qual uma solução ótima possa ser obtida com um número pequeno de nós.
Método Pseudo-Espectral de Legendre
Por simplicidade, reconhecemos que qualquer intervalo pode ser mapeado no intervalo ,−1,1. por meio de transformações afins, e será esse o intervalo usado daqui em diante. O método vigente resolve os impasses mencionados previamente. Utilizamos os nós Legendre-Gauss-Lobatto (LGL) adquiridos através das raízes dos polinômios de Legendre, @($). O polinômio de Legendre é definido pela seguinte expressão:
($) =
2
@1
C!
/
@/$
@($
− 1)
@Assim, para obtermos C + 1 nós LGL, encontramos as raízes do polinômio de
Legendre de C graus. Sabemos que dado C + 1 pontos há um único polinômio interpolador de grau C coincidindo nesses pontos. Os nós LGL são acumulados nas bordas que acabam diminuindo o efeito de aliasing. Aliasing é o efeito que causa duas funções não poderem ser diferenciadas dadas uma amostragem de pontos como ilustrado abaixo.
Figura 1 - As funções cos(2G(0.9)) e cos(2G(0.1)) são indistinguíveis nos 10 pontos acima Isso evidencia a importância de uma malha não uniforme (ou geométrica) na
discretização de problemas contínuos. Abaixo ilustramos o fenômeno de Runge, a oscilação do polinômio interpolante em malha uniforme, e atenuando-o com nós LGL para 5, 10 e 15 pontos, aproximando a função ($) =
Figura 2 - Nós Equidistantes e Legendre-Gauss-Lobatto. A função está representada pelas linhas pontilhadas, os nós pelos círculos, e o polinomio interpolador pela linha preenchida
Achado o polinômio interpolador, sua taxa de convergência para a função aproximada é algébrica da ordem de K(A) onde L representa o numero de vezes que a função é
diferenciíavel e é o grau do polinômio. Se a função for analítica, o polinômio converge exponencialmente, ou seja, da ordem de K(MA6) onde M é uma constante. Como em análise espectral (Fourier) a diferenciabilidade aqui determina a velocidade de convergência (na norma uniforme) entre os aproximantes e o sinal original. Em suma: “Quanto mais diferenciável for, mais rápido a convergência do polinômio”.
Supomos que temos uma função que queremos aproximar. Podemos escrever sua aproximação como uma combinação linear de polinômios de Legendre. Lembrando que a família de polinômios de Legendre até grau C é uma família ortonormal.
($) ≈
@($) = N 4
($)
@O
Mostre-se então que podemos reescrever tal expressão como:
($) ≈
@($) = N ($
)"
($)
@ O Onde"
($) =
@(@)PQ(IR) (IJA)PQ3 (I)IAIR . Ressaltamos que "&$S( = TS implicando na seguinte propriedade:
@($
Essa expressão é mais favorável do que a anterior por só precisar avaliar a função nos nós LGL e apenas polinômio de Legendre de grau C. Desta expressão obtemos a aproximação de sua derivada V( × ).
V
S=
W
XX
Y
XX
Z
($
− $
@S($
)
)
@($
S) [E B ≠ ]
−C(C + 1)
4
[E B = ] = 0
C(C + 1)
4
[E B = ] = C
0 _. _.
A figura abaixo mostra como o erro de diferenciação diminui ao passo que o numero de nós aumenta.
Figura 3 - Comparação da derivada (linha pontilhada) com sua aproximação (linha cheia) e o erro Com isso, somos capazes de escrever os vínculos diferenciais do problema de controle ótimo de maneira prática e estável utilizando equações algébricas e possibilitando o uso do algoritmo PSQ.
Para discretizar a integral da Lagrangeana, utilizamos a seguinte aproximação da quadratura de Gauss:
* ($)/$
A≈ N ($
)`
@ O Sendo`
=
@(@),PQ(IR).J, e uma função suave qualquer. Mostra-se que se é a-vezes diferencíavel, onde
b
(c)b ≤ d
, sua convergência é da ordem deK(
Ac)
. Com isso, resolvemos todos impasses necessários para implementação do método.Aplicação para problema ilustrativo
Com a finalidade de exemplificar o processo descrito anteriormente, começamos com um problema de controle ótimo cuja solução já é conhecida.
Problema
Minimizar a função:
! = * -(%)
/%
Sujeito aos vínculos dinâmicos:
$3
(%) = $
(%)
$3
(%) = -(%)
As condições de bordo:$
(0) = 0
$
(1) =
−11
24
$
(0) = 0
E a restrição de desigualdade:|-(%)| ≤ 1
O problema admite solução ótima:
$
(%) =
W
Y
Z
−
%
2 4f4 0 ≤ % < 0.5
%
h3 − %
+
4 −
%
24 4f4 0.5 ≤ % ≤ 1
1
$
(%) = i
−% 4f4 0 ≤ % < 0.5
%
− 2% +
1
4 4f4 0.5 ≤ % ≤ 1
-(%) = j −1 4f4 0 ≤ % < 0.5
2% − 2 4f4 0.5 ≤ % ≤ 1
Algoritmo1. Calcule o polinômio de Legendre de grau C, os nós LGL, e a matriz de diferenciação. 2. Monte a quadratura de Gauss
3. Adapte as restrições e vínculos dinâmicos à função fmincon. 4. Use fmincon para rodar o algoritmo PSQ para achar solução ótima Script clc clear n = 8; syms t; L = legendpoly(n, t); no = leg_roots(L); % matriz de diferenciação
D = diff_legend(L, no);
% fator de diferenciação resultando da tranformação afim de [0,1]->[-1,1] D = 2.*D;
% %% MIN int(u).^2
% variaveis [ x1_1 x1_2 ... x1_N+1 x2_1 ... x2_N+1 u_1 ... u_N+1 ] Z = sym('z%d', size([no ; no ; no]));
u = Z(2*length(no)+1:end); % função objetiva
f = (u).^2;
f = leg_int(f, L, no);
% Formato da função objetiva para usar em fmincon F = @(w) subs(f, Z, w);
% %%% Restrições %%% % vínculo diferencial
% Dx1 = x2 <=> Dx1 - x2 = 0
Aeq = [ D -eye(length(no)) zeros(length(no)) ]; beq = zeros([ size(Aeq,1) 1 ]);
% Dx2 = u <=> Dx2 - u = 0
aux = [ zeros(length(no)) D -eye(length(no)) ]; Aeq = [ Aeq ; aux ];
beq = [ beq ; zeros([ size(aux,1) 1 ]) ] ; % condições de fronteira
% x(0) = 0, x(1) = -11/24, v(0) = 0
% Com TA => x(-1) = -1, x(1) = -46/24, v(0) = 0 aux = zeros([ 3 3*length(no) ]) ;
aux(1,1) = 1;
aux(2,length(no)) = 1; aux(3,length(no)+1) = 1; Aeq = [ Aeq ; aux ];
beq = [ beq ; -1 ; -46/24 ; 0 ]; % restrições no controle % abs(u) <= 1
abs_u = [ zeros(length(no)) zeros(length(no)) eye(length(no)) ] ; Aineq = [ abs_u ; -abs_u ];
bineq = [ ones(size(abs_u,1), 1) ; ones(size(abs_u,1), 1) ] ; bineq = 2.*bineq;
% chute inicial
chute = zeros( size([no ; no ; no]) ); % execução fmincon
options = optimset('fmincon');
options = optimset(options, 'Algorithm','SQP','MaxFunEvals', 5000, 'TolX', 1e-6); tic
solution = fmincon(F, chute, Aineq, bineq, Aeq, beq, [], [], [] ,options); toc
Resultados
Figura 4 - Primeira fileira executada com 5 nós, segunda com 10, e terceira com 15 A solução analítica esta em linhas pontilhadas. Note que com 5 nós já podemos considerar uma aproximação razoável, e com 15, não vemos muita diferença entre uns e outros. Rodamos o exemplo acima para 4 a 30 nós, para comparar o tempo de execução do algoritmo PSQ e o erro entre o resultado obtido e a solução ótima.
Figura 6 - Erro entre a solução obtida e solução ótima
Vemos que o tempo cresce substancialmente ao passo que os nós crescem, enquanto o erro tende a zero. Com 5 nós temos uma aproximação razoável, e precisamos de 10 nós ou mais para ter boas aproximações. Porem, a solução ótima desse exemplo é bem regular. Quanto mais regular, melhor a aproximação, um fato que não podemos extrapolar para todos os casos, em particular os casos com descontinuidades. Portanto, em geral, para obter
soluções aproximadas com erro pequenos, nos garantimos com 15 a 20 nós. No entanto, isso nos dará um tempo de execução de mais de 20 segundos (no exemplo acima, com 15 nós o tempo de execução é 25 segundos; com 20 nós o tempo é 76 segundos). Para aplicações de tempo real isso é inviável.
Método Bellman-PS
O método se baseia em outros métodos pseudo-espectrais procurando um equilíbrio entre soluções precisas e custo computacional. Usualmente acham-se soluções subótimas com um baixo custo computacional. Embora seja possível achar soluções altamente precisas com o método pseudo-espectral de Legendre, como vimos anteriormente, o tempo de execução rapidamente cresce ao passo que o numero de nós crescem. Para obtermos soluções mais precisas com baixo numero de nós usamos o método Bellman-PS.
Algoritmo
1. Resolva o sistema utilizando o método pseudo-espectral de Legendre 2. Divida o intervalo #% , %')em k segmentos de ,%, %., faça B = 0 3. Interpole os valores discretos até o final do segmento %
4. Use os valores do controle e estado em % como condição inicial e resolva o sistema. 5. Se B = k − 1 pare, se não, faça B = B + 1 e volte para o 3º passo.
6. A solução é a concatenação dos segmentos. Problema Teste Minimizar:
!,$(. ), -(. ), %
'. = %
' Sujeito à:$
3 = $
$
3 = -
$(0) = ,10, 10.
$(%
') = ,0,0.
|-| ≤ 1
ImplementaçãoPrecisamos primeiro reparametrizar o problema da variável % para l:
%(l) =
%
'(l +
1),
onde lm,−1, 1.. As restrições se tornam:$
3 =
1
2 %
'$
$
3 =
1
2 %
'-
$(−1) = ,10, 10.
$(1) = ,0,0.
|-| ≤ 1
Assim ao discretizar o intervalo, precisamos que o tempo final %' seja um parâmetro livre totalizando em 3C + 4 parâmetros (C + 1 para cada $, $, e -, e mais um para %'). Ao executar o algoritmo PSQ, ele nos retornará o valor mínimo de %'.
Conclusões
Atualmente estamos aprimorando nossa implementação do método Bellman para entendê-lo melhor. Ao terminar isso, como foi feito anteriormente com o algoritmo PSQ, vamos aprender a usar o pacote DIDO onde os métodos pseudo-espectrais foram
implementados com eficiência. Comparar com a execução do nosso script. Ao longo prazo iremos implementar os métodos aqui descritos em aplicações que trabalhem em tempo real. Referências
1 - Ross, I. M.; Gong, Q.; Sekhavat, P. Bellman Pseudospectral Method. The American Institute of Aeronautics and Astronautics, ago. 2008.
2 - Becerra, V. M; Galvão, R. K. H. Um tutorial sobre métodos pseudo-espectrais para controle ótimo computacional. Sba Controle & Automação, v.21, n.1, maio/jun 2010. 3 - Betts, J. T. Practical Methods for Optimal Control and Estimation Using Nonlinear
Programming. 2. ed. Philadelphia: Society for Industrial and Applied Mathematics, 2009. 123p.
4 - Documentação função fmincon. Disponível em:
<www.mathworks.com/help/optim/ug/fmincon.html>, Acesso em 10 jun. 2014.
5 - Trefethen, L. N. Approximation Theory and Approximation Practice. Philadelphia: Society for Industrial and Applied Mathematics, 2012. 318p.
6 - Maymon, S.; Oppenheim, A. V. Sinc Interpolation of Nonuniform Samples. IEEE Transactions on Signal Processing, 2011.