Problema

O problema desse caso é o mesmo do caso 8, mas agora ao invés de P=1 ( o que significa peso para atingir o estado de referência igual ao peso do controle) e xref=0, deseja-se direcionar o estado para um valor diferente de zero e de forma rápida. A fórmula geral da função custo é a mesma, ou seja,



No caso particular em que o valor de referência para o estado x(t) é não nulo, vamos adotar o peso como P=100 e xref=5. Deseja-se então que o estado x(t) atinja o mais rápido possível o valor 5. Isso encarece o processo, e por encarecer o processo o estado "busca" atingir o valor x(t)=5 no menor tempo possível. Também outra modificação em relação ao caso 8 é que agora o tempo não é livre. Ele é limitado em t=20. Na nomenclatura matemática, o problema se torna

 



Com


Solução

A solução analítica deve repetir todos os passos explicados no caso 8, substituindo os valores tf=20, P=100 e xref =5 para se obter a solução final. É um exercício interessante para se compreender o problema do regulador que fica ao leitor para sua verificação.

 

 

Programação - Solução Numérica

A solução numérica pode ser resolvida via Matlab novamente, usando o mesmo recurso de toolbox e código conhecido como bvp4c.m. O programa é uma mera repetição do caso 8, mas agora substituindo os valores do tempo final, peso do custo P e valor de referência xref=5. Obviamente que a função hamiltoniana vai ser alterada bem como a equação adjunta, visto que agora o valor de referência não é nulo e fará parte dessa equação.

Hamiltoniana


Vamos adotar apenas como simplicidade de notação que as variáveis x(t)=x e u(t)=u para não carregar o parêntesis nas notações das derivadas. Então,



Adjunta



Controle Ótimo


Ao inserir na programação essa alteração, o resultado obtido é mostrado na figura a seguir:

 

 

Observa-se que nesse caso o estado se torna mais "caro" para atingir 5, e por isso procura ir o mais rápido possível para o valor 5. O segundo gráfico é o resultado do controle sendo acionado para tal caso e da variável adjunta lambda.

 

Algoritmo do LQR - Matlab

%PROBLEMA Do Regulador Linear Quadratico
% MIN  INT(100(x-5)^2+u^2)dt
%   suj dx=-x+u
%     x(0) =x0
%     x(tf)=xf (dado)
%     tf =20
%===========================================
clear all
global T
global uf
global x0
global y0
global xf
global yf
global x
 
T=20;
x0=1;
xf=0;
 
 
H =[]; G =[]; x = []; J = [];
%===============================INICIALIZACAO PARAMETROS AIDS (P013)
 
type LQRInit2;
type LQRM2;
type LQRRes2;
type LQRM2;
%===================================================
close all;
solinit = bvpinit(linspace(0,1,101),@LQRInit2);
options = bvpset('Stats','on','RelTol',1e-6);
 
sol = bvp4c(@LQRM2,@LQRRes2,solinit,options);
 
t = sol.x;
x = sol.y;
 
 
for i=1:1:size(t,2)
%   
    mm1(i) = -x(3,i)/2;
end;   
 
%cont=1;
%for i=1:10:100
%   if i==1
%       tj(cont)=cont*0.1;
%       J(cont)=(mm1(i)^2)*0.1;
%       Jan(cont)=(uan(i)^2)*0.1;
%       cont=cont+1
%   else
%       tj(cont)=cont*0.1;
%       J(cont) = J(cont-1)+( mm1(i)^2  )*0.1;
%       Jan(cont) = Jan(cont-1)+( uan(i)^2  )*0.1;
%       cont=cont+1;
%   end
%end
 
 
%H = G + fi1*(1-ep1.*mm1.*exp(-alpha1.*mm1))+gama1./x(1,:).^2+gama2*x(4,:).^2;
 
time=t*x(4,length(t));
clf reset
 
subplot(311)
plot(time,x(1,:),'-k')
xlabel('time')
ylabel('x(t)')
grid
 
 
subplot(312)
plot(time,mm1,'-k')
xlabel('time')
ylabel('controle')
grid
 
subplot(313)
plot(time,x(3,:),'-k')
xlabel('time')
ylabel('lambda')
grid
 

 

FUNCTION do custo e das restrições dinâmicas

function dxdt = LQRM(t,x);
 
 
u=-x(3)/2;
 
dxdt = [(-x(1)+u)*x(4);
         (100*(x(1)-5)^2+u^2)*x(4);
        (2*x(3)-2*100*(x(1)-5))*x(4);
        0];

 

 

 

Voltar ao índice de otimização dinâmica

 

 

Caso9: Regulador Linear Quadrático (LQR)